177 Commits

Author SHA1 Message Date
jwetzell dffee7781e set dependabot to only propose patch changes for @types 2025-10-12 12:53:45 -05:00
jwetzell 1d5ea2f15c update node version in nvmrc 2025-10-12 12:53:13 -05:00
jwetzell 54a8da8565 Merge pull request #168 from jwetzell/dependabot/npm_and_yarn/types/node-24.7.0
Bump @types/node from 24.3.1 to 24.7.0
2025-10-12 12:49:32 -05:00
jwetzell 7a3c727b0f Merge pull request #169 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.45.0
Bump typescript-eslint from 8.42.0 to 8.45.0
2025-10-12 12:49:22 -05:00
dependabot[bot] b817a14320 Bump typescript-eslint from 8.42.0 to 8.45.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.42.0 to 8.45.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.45.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.45.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-06 12:52:12 +00:00
dependabot[bot] ee2a6086b9 Bump @types/node from 24.3.1 to 24.7.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.3.1 to 24.7.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-06 12:50:55 +00:00
jwetzell cd9032fb44 2.1.0 2025-09-16 21:48:13 -05:00
jwetzell cb61fe340e insert dummy package json so type is setup correctly when imported into a project 2025-09-16 21:46:01 -05:00
jwetzell cd125da49b don't use directory or extensionless imports 2025-09-16 21:45:32 -05:00
jwetzell 9cfd033380 Merge pull request #158 from jwetzell/dependabot/npm_and_yarn/types/node-24.3.1
Bump @types/node from 24.3.0 to 24.3.1
2025-09-10 15:09:52 -05:00
jwetzell 3403dee7d5 Merge pull request #159 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.42.0
Bump typescript-eslint from 8.40.0 to 8.42.0
2025-09-10 15:09:38 -05:00
dependabot[bot] 09c8f301c3 Bump typescript-eslint from 8.40.0 to 8.42.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.40.0 to 8.42.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.42.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.42.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 12:30:25 +00:00
dependabot[bot] 9880a6e27c Bump @types/node from 24.3.0 to 24.3.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.3.0 to 24.3.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 12:29:43 +00:00
jwetzell 4033ba6f83 Merge pull request #151 from jwetzell/dependabot/npm_and_yarn/types/node-24.3.0
Bump @types/node from 24.2.1 to 24.3.0
2025-09-02 09:28:16 -05:00
jwetzell 469dd941d8 Merge pull request #154 from jwetzell/dependabot/npm_and_yarn/typescript-5.9.2
Bump typescript from 5.8.3 to 5.9.2
2025-09-02 09:28:08 -05:00
dependabot[bot] acee908444 Bump @types/node from 24.2.1 to 24.3.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.2.1 to 24.3.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-02 14:03:00 +00:00
dependabot[bot] c3a73e386e Bump typescript from 5.8.3 to 5.9.2
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.3 to 5.9.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.9.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-02 14:02:46 +00:00
jwetzell 8d8073b267 Merge pull request #155 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.34.0
Bump @eslint/js from 9.31.0 to 9.34.0
2025-09-02 09:01:39 -05:00
jwetzell 92d5983e3f Merge pull request #156 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.40.0
Bump typescript-eslint from 8.39.0 to 8.40.0
2025-09-02 09:01:31 -05:00
dependabot[bot] 69875ded6c Bump typescript-eslint from 8.39.0 to 8.40.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.39.0 to 8.40.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.40.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.40.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-26 00:15:19 +00:00
dependabot[bot] 5f8db9d26e Bump @eslint/js from 9.31.0 to 9.34.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.31.0 to 9.34.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.34.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-25 23:31:23 +00:00
jwetzell 4f53374834 Merge pull request #139 from jwetzell/dependabot/npm_and_yarn/globals-16.3.0
Bump globals from 16.2.0 to 16.3.0
2025-08-12 15:49:50 -05:00
jwetzell 8bc5213b44 Merge pull request #143 from jwetzell/dependabot/npm_and_yarn/eslint-config-prettier-10.1.8
Bump eslint-config-prettier from 10.1.5 to 10.1.8
2025-08-12 15:49:44 -05:00
dependabot[bot] 34de2a06db Bump eslint-config-prettier from 10.1.5 to 10.1.8
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.5 to 10.1.8.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.5...v10.1.8)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 20:48:13 +00:00
dependabot[bot] cd24aa75fc Bump globals from 16.2.0 to 16.3.0
Bumps [globals](https://github.com/sindresorhus/globals) from 16.2.0 to 16.3.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.2.0...v16.3.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 20:48:11 +00:00
jwetzell d5a7fac9b5 Merge pull request #148 from jwetzell/dependabot/npm_and_yarn/eslint-plugin-prettier-5.5.4
Bump eslint-plugin-prettier from 5.5.1 to 5.5.4
2025-08-12 15:47:17 -05:00
jwetzell 25f1330e3f Merge pull request #149 from jwetzell/dependabot/npm_and_yarn/types/node-24.2.1
Bump @types/node from 24.0.10 to 24.2.1
2025-08-12 15:47:09 -05:00
jwetzell 2dacf7f5af Merge pull request #150 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.39.0
Bump typescript-eslint from 8.36.0 to 8.39.0
2025-08-12 15:46:59 -05:00
dependabot[bot] 2831ab55d0 Bump typescript-eslint from 8.36.0 to 8.39.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.36.0 to 8.39.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.39.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-11 19:11:03 +00:00
dependabot[bot] f03dcf4314 Bump @types/node from 24.0.10 to 24.2.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.0.10 to 24.2.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-11 18:01:42 +00:00
dependabot[bot] a4a49a072c Bump eslint-plugin-prettier from 5.5.1 to 5.5.4
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.5.1 to 5.5.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.5.1...v5.5.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-11 17:44:28 +00:00
jwetzell 75b32055f3 Merge pull request #136 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.35.1 2025-07-12 20:37:41 -05:00
jwetzell 4a96c64a8d Merge pull request #138 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.30.1 2025-07-12 20:37:27 -05:00
jwetzell 96e1b69326 Merge pull request #132 from jwetzell/dependabot/npm_and_yarn/eslint-plugin-prettier-5.5.1 2025-07-12 20:37:13 -05:00
jwetzell 32a3bfb4e4 Merge pull request #135 from jwetzell/dependabot/npm_and_yarn/prettier-3.6.2 2025-07-12 20:37:04 -05:00
dependabot[bot] 9c87505c53 Bump typescript-eslint from 8.32.1 to 8.35.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.32.1 to 8.35.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.35.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-13 01:35:33 +00:00
dependabot[bot] ec51f81597 Bump @eslint/js from 9.27.0 to 9.30.1
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.27.0 to 9.30.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.1/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-13 01:35:29 +00:00
dependabot[bot] 0f1d42e557 Bump eslint-plugin-prettier from 5.4.0 to 5.5.1
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.4.0 to 5.5.1.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.4.0...v5.5.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-13 01:35:27 +00:00
dependabot[bot] 6d7c62f8ee Bump prettier from 3.5.3 to 3.6.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.3 to 3.6.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.3...3.6.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-13 01:35:26 +00:00
jwetzell 5634d5ed7d Merge pull request #137 from jwetzell/dependabot/npm_and_yarn/types/node-24.0.10 2025-07-12 20:34:15 -05:00
dependabot[bot] c5d47e3e86 Bump @types/node from 22.15.21 to 24.0.10
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.21 to 24.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.10
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-07 15:04:18 +00:00
jwetzell fedd14840c Merge pull request #117 from jwetzell/dependabot/npm_and_yarn/globals-16.2.0 2025-05-26 12:03:29 -05:00
jwetzell b946235af1 Merge pull request #118 from jwetzell/dependabot/npm_and_yarn/types/node-22.15.21 2025-05-26 12:03:21 -05:00
dependabot[bot] 02ad9725d9 Bump @types/node from 22.15.19 to 22.15.21
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.19 to 22.15.21.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.21
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 13:22:13 +00:00
dependabot[bot] 8bc7947754 Bump globals from 16.1.0 to 16.2.0
Bumps [globals](https://github.com/sindresorhus/globals) from 16.1.0 to 16.2.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.1.0...v16.2.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 13:20:32 +00:00
jwetzell 668a0195c9 Update .nvmrc to latest Node LTS 2025-05-19 15:20:26 -05:00
jwetzell 804ab32113 Merge pull request #115 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.27.0
Bump @eslint/js from 9.26.0 to 9.27.0
2025-05-19 15:12:14 -05:00
dependabot[bot] 365701f0e9 Bump @eslint/js from 9.26.0 to 9.27.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.26.0 to 9.27.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.27.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.27.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 20:11:25 +00:00
jwetzell b673604842 Merge pull request #114 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.32.1
Bump typescript-eslint from 8.32.0 to 8.32.1
2025-05-19 15:10:28 -05:00
jwetzell 55b57bed36 Merge pull request #116 from jwetzell/dependabot/npm_and_yarn/types/node-22.15.19
Bump @types/node from 22.15.17 to 22.15.19
2025-05-19 15:10:17 -05:00
dependabot[bot] b18b309ab9 Bump @types/node from 22.15.17 to 22.15.19
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.17 to 22.15.19.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 12:23:24 +00:00
dependabot[bot] e778525cab Bump typescript-eslint from 8.32.0 to 8.32.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.32.0 to 8.32.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 12:23:10 +00:00
jwetzell ddb46086a6 Merge pull request #110 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.32.0
Bump typescript-eslint from 8.31.1 to 8.32.0
2025-05-12 08:53:36 -05:00
jwetzell e974f710fd Merge pull request #111 from jwetzell/dependabot/npm_and_yarn/globals-16.1.0
Bump globals from 16.0.0 to 16.1.0
2025-05-12 08:53:28 -05:00
jwetzell 736dc45e59 Merge pull request #112 from jwetzell/dependabot/npm_and_yarn/types/node-22.15.17
Bump @types/node from 22.15.12 to 22.15.17
2025-05-12 08:53:21 -05:00
jwetzell cd4bf19297 Merge pull request #113 from jwetzell/dependabot/npm_and_yarn/eslint-config-prettier-10.1.5
Bump eslint-config-prettier from 10.1.2 to 10.1.5
2025-05-12 08:53:14 -05:00
dependabot[bot] 7289336be9 Bump eslint-config-prettier from 10.1.2 to 10.1.5
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.2 to 10.1.5.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.2...v10.1.5)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 12:29:37 +00:00
dependabot[bot] 298cf4c25d Bump @types/node from 22.15.12 to 22.15.17
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.12 to 22.15.17.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 12:26:53 +00:00
dependabot[bot] 3f8c719e5e Bump globals from 16.0.0 to 16.1.0
Bumps [globals](https://github.com/sindresorhus/globals) from 16.0.0 to 16.1.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.0.0...v16.1.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 12:24:09 +00:00
dependabot[bot] 550e7444ed Bump typescript-eslint from 8.31.1 to 8.32.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.31.1 to 8.32.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 12:21:52 +00:00
jwetzell 4b0641aaef Merge pull request #104 from jwetzell/dependabot/npm_and_yarn/types/node-22.15.3
Bump @types/node from 22.14.1 to 22.15.3
2025-05-06 11:21:41 -05:00
jwetzell 447367e605 Merge pull request #106 from jwetzell/dependabot/npm_and_yarn/eslint-config-prettier-10.1.2
Bump eslint-config-prettier from 10.1.1 to 10.1.2
2025-05-06 11:21:34 -05:00
dependabot[bot] 0be865b2e2 Bump @types/node from 22.14.1 to 22.15.3
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.14.1 to 22.15.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 16:20:31 +00:00
dependabot[bot] 363cb52daf Bump eslint-config-prettier from 10.1.1 to 10.1.2
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.1 to 10.1.2.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.1...v10.1.2)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 16:20:31 +00:00
jwetzell b7826af09e Merge pull request #107 from jwetzell/dependabot/npm_and_yarn/eslint-plugin-prettier-5.4.0
Bump eslint-plugin-prettier from 5.2.6 to 5.4.0
2025-05-06 11:19:48 -05:00
jwetzell c9a485271f Merge pull request #108 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.31.1
Bump typescript-eslint from 8.30.1 to 8.31.1
2025-05-06 11:19:28 -05:00
jwetzell f773ea1873 Merge pull request #109 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.26.0
Bump @eslint/js from 9.25.0 to 9.26.0
2025-05-06 11:19:16 -05:00
dependabot[bot] 820b226e3a Bump @eslint/js from 9.25.0 to 9.26.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.25.0 to 9.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.26.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 12:57:54 +00:00
dependabot[bot] 2ee8f5fc8b Bump typescript-eslint from 8.30.1 to 8.31.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.30.1 to 8.31.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 12:57:40 +00:00
dependabot[bot] 6a39d95746 Bump eslint-plugin-prettier from 5.2.6 to 5.4.0
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.6 to 5.4.0.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.6...v5.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 12:57:18 +00:00
jwetzell 36ffc5896f Merge pull request #97 from jwetzell/dependabot/npm_and_yarn/typescript-5.8.3
Bump typescript from 5.8.2 to 5.8.3
2025-04-23 08:59:03 -05:00
jwetzell d2deda6f07 Merge pull request #99 from jwetzell/dependabot/npm_and_yarn/types/node-22.14.1
Bump @types/node from 22.13.14 to 22.14.1
2025-04-23 08:58:51 -05:00
dependabot[bot] b4994f9542 Bump typescript from 5.8.2 to 5.8.3
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.2 to 5.8.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 13:58:07 +00:00
dependabot[bot] 57f7305f9d Bump @types/node from 22.13.14 to 22.14.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.14 to 22.14.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.14.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 13:57:55 +00:00
jwetzell 30295e7359 Merge pull request #95 from jwetzell/dependabot/npm_and_yarn/eslint-plugin-prettier-5.2.6
Bump eslint-plugin-prettier from 5.2.4 to 5.2.6
2025-04-23 08:57:16 -05:00
jwetzell 9fa5dd3787 Merge pull request #101 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.30.1
Bump typescript-eslint from 8.27.0 to 8.30.1
2025-04-23 08:56:55 -05:00
jwetzell 6ac10ab576 Merge pull request #102 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.25.0
Bump @eslint/js from 9.23.0 to 9.25.0
2025-04-23 08:56:39 -05:00
dependabot[bot] 46af9ea98e Bump @eslint/js from 9.23.0 to 9.25.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.23.0 to 9.25.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.25.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 13:27:19 +00:00
dependabot[bot] 151c96c640 Bump typescript-eslint from 8.27.0 to 8.30.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.27.0 to 8.30.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.30.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.30.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-21 13:15:03 +00:00
dependabot[bot] 4cefd6401d Bump eslint-plugin-prettier from 5.2.4 to 5.2.6
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.4 to 5.2.6.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.4...v5.2.6)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 13:31:43 +00:00
jwetzell 5458ceaa6c Merge pull request #88 from jwetzell/dependabot/npm_and_yarn/types/node-22.13.13
Bump @types/node from 22.13.10 to 22.13.13
2025-03-30 13:13:22 -05:00
dependabot[bot] 784ae84161 Bump @types/node from 22.13.10 to 22.13.13
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.10 to 22.13.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-30 18:06:08 +00:00
jwetzell 9f3c447f4b Merge pull request #89 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.23.0
Bump @eslint/js from 9.22.0 to 9.23.0
2025-03-30 13:05:12 -05:00
jwetzell 79b9a051ba Merge pull request #90 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.27.0
Bump typescript-eslint from 8.26.1 to 8.27.0
2025-03-30 13:05:04 -05:00
jwetzell fc2d7e23e4 Merge pull request #91 from jwetzell/dependabot/npm_and_yarn/eslint-plugin-prettier-5.2.4
Bump eslint-plugin-prettier from 5.2.3 to 5.2.4
2025-03-30 13:04:52 -05:00
dependabot[bot] 7392b4cb65 Bump eslint-plugin-prettier from 5.2.3 to 5.2.4
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.3 to 5.2.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.3...v5.2.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 13:14:42 +00:00
dependabot[bot] 7e2a1135c5 Bump typescript-eslint from 8.26.1 to 8.27.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.26.1 to 8.27.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.27.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 13:14:22 +00:00
dependabot[bot] ca6e7ee3e9 Bump @eslint/js from 9.22.0 to 9.23.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.22.0 to 9.23.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.23.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 13:14:04 +00:00
jwetzell de95036afa Merge pull request #87 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.26.1
Bump typescript-eslint from 8.26.0 to 8.26.1
2025-03-19 07:26:23 -05:00
dependabot[bot] dd58b99193 Bump typescript-eslint from 8.26.0 to 8.26.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.26.0 to 8.26.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.26.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 12:52:22 +00:00
jwetzell 7c31d92ad1 Merge pull request #81 from jwetzell/dependabot/npm_and_yarn/typescript-5.8.2
Bump typescript from 5.7.3 to 5.8.2
2025-03-10 09:02:04 -05:00
jwetzell cfe8ab4aa0 Merge pull request #84 from jwetzell/dependabot/npm_and_yarn/types/node-22.13.10
Bump @types/node from 22.13.8 to 22.13.10
2025-03-10 08:32:08 -05:00
dependabot[bot] ef8483941a Bump @types/node from 22.13.8 to 22.13.10
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.8 to 22.13.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 13:30:24 +00:00
dependabot[bot] 7e3a28ebc2 Bump typescript from 5.7.3 to 5.8.2
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.3 to 5.8.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 13:27:45 +00:00
jwetzell f34cdd025b Merge pull request #83 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.22.0
Bump @eslint/js from 9.21.0 to 9.22.0
2025-03-10 08:26:46 -05:00
jwetzell 071af0bf4c Merge pull request #85 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.26.0
Bump typescript-eslint from 8.25.0 to 8.26.0
2025-03-10 08:26:38 -05:00
jwetzell 6bd486392f Merge pull request #86 from jwetzell/dependabot/npm_and_yarn/eslint-config-prettier-10.1.1
Bump eslint-config-prettier from 10.0.2 to 10.1.1
2025-03-10 08:26:29 -05:00
dependabot[bot] 8188d2db20 Bump eslint-config-prettier from 10.0.2 to 10.1.1
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.0.2 to 10.1.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.2...v10.1.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 12:49:36 +00:00
dependabot[bot] c9182ec1b0 Bump typescript-eslint from 8.25.0 to 8.26.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.25.0 to 8.26.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.26.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 12:49:32 +00:00
dependabot[bot] eafff30244 Bump @eslint/js from 9.21.0 to 9.22.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.21.0 to 9.22.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.22.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 12:49:15 +00:00
jwetzell 2a7e0c6f02 Merge pull request #78 from jwetzell/dependabot/npm_and_yarn/eslint-config-prettier-10.0.2
Bump eslint-config-prettier from 10.0.1 to 10.0.2
2025-03-03 08:29:08 -06:00
jwetzell a0b62378f5 Merge pull request #79 from jwetzell/dependabot/npm_and_yarn/prettier-3.5.3
Bump prettier from 3.5.2 to 3.5.3
2025-03-03 08:29:00 -06:00
jwetzell d6e12c9b30 Merge pull request #80 from jwetzell/dependabot/npm_and_yarn/types/node-22.13.8
Bump @types/node from 22.13.5 to 22.13.8
2025-03-03 08:28:50 -06:00
jwetzell 7aa348e7da Merge pull request #82 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.25.0
Bump typescript-eslint from 8.24.1 to 8.25.0
2025-03-03 08:28:39 -06:00
dependabot[bot] 1334149112 Bump typescript-eslint from 8.24.1 to 8.25.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.24.1 to 8.25.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.25.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 12:33:13 +00:00
dependabot[bot] a4964dd3df Bump @types/node from 22.13.5 to 22.13.8
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.5 to 22.13.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 12:32:55 +00:00
dependabot[bot] 9b7efedd0c Bump prettier from 3.5.2 to 3.5.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.2...3.5.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 12:32:49 +00:00
dependabot[bot] 06fd468e76 Bump eslint-config-prettier from 10.0.1 to 10.0.2
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.0.1 to 10.0.2.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.1...v10.0.2)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 12:32:44 +00:00
jwetzell cd215dad3e Merge pull request #73 from jwetzell/dependabot/npm_and_yarn/globals-16.0.0
Bump globals from 15.14.0 to 16.0.0
2025-02-24 13:30:43 -06:00
jwetzell 2351d97426 Merge pull request #74 from jwetzell/dependabot/npm_and_yarn/types/node-22.13.5
Bump @types/node from 22.13.1 to 22.13.5
2025-02-24 13:30:33 -06:00
dependabot[bot] 12eadee805 Bump @types/node from 22.13.1 to 22.13.5
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.1 to 22.13.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 17:29:01 +00:00
dependabot[bot] 95b798cfc8 Bump globals from 15.14.0 to 16.0.0
Bumps [globals](https://github.com/sindresorhus/globals) from 15.14.0 to 16.0.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v15.14.0...v16.0.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 17:28:45 +00:00
jwetzell cdb76ec89d Merge pull request #75 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.24.1
Bump typescript-eslint from 8.23.0 to 8.24.1
2025-02-24 11:27:44 -06:00
jwetzell b51e4c603f Merge pull request #76 from jwetzell/dependabot/npm_and_yarn/prettier-3.5.2
Bump prettier from 3.5.0 to 3.5.2
2025-02-24 11:27:35 -06:00
jwetzell 84cbc1d6d6 Merge pull request #77 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.21.0
Bump @eslint/js from 9.19.0 to 9.21.0
2025-02-24 11:27:25 -06:00
dependabot[bot] d7d552efb1 Bump @eslint/js from 9.19.0 to 9.21.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.19.0 to 9.21.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.21.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 13:01:10 +00:00
dependabot[bot] 89c9a7a579 Bump prettier from 3.5.0 to 3.5.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.0 to 3.5.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.0...3.5.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 13:01:06 +00:00
dependabot[bot] 6081cd3700 Bump typescript-eslint from 8.23.0 to 8.24.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.23.0 to 8.24.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.24.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 13:00:56 +00:00
jwetzell 5d6868593a Merge pull request #66 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.23.0
Bump typescript-eslint from 8.21.0 to 8.23.0
2025-02-16 18:55:08 -06:00
jwetzell 201a8fc73e Merge pull request #67 from jwetzell/dependabot/npm_and_yarn/prettier-3.5.0
Bump prettier from 3.4.2 to 3.5.0
2025-02-16 18:55:00 -06:00
jwetzell 13bdcdefc2 Merge pull request #68 from jwetzell/dependabot/npm_and_yarn/types/node-22.13.1
Bump @types/node from 22.10.10 to 22.13.1
2025-02-16 18:54:50 -06:00
dependabot[bot] 6902fad9e7 Bump @types/node from 22.10.10 to 22.13.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.10 to 22.13.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 12:35:40 +00:00
dependabot[bot] 3710136a39 Bump prettier from 3.4.2 to 3.5.0
Bumps [prettier](https://github.com/prettier/prettier) from 3.4.2 to 3.5.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.4.2...3.5.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 12:35:34 +00:00
dependabot[bot] 6c3a251c89 Bump typescript-eslint from 8.21.0 to 8.23.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.21.0 to 8.23.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.23.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 12:35:29 +00:00
jwetzell 964ded00f6 Merge pull request #55 from jwetzell/dependabot/npm_and_yarn/typescript-5.7.3
Bump typescript from 5.7.2 to 5.7.3
2025-01-27 15:38:20 -06:00
jwetzell e21a629bf3 Merge pull request #60 from jwetzell/dependabot/npm_and_yarn/types/node-22.10.10
Bump @types/node from 22.10.7 to 22.10.10
2025-01-27 15:37:51 -06:00
dependabot[bot] bb1ba83ade Bump @types/node from 22.10.7 to 22.10.10
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.7 to 22.10.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 16:01:19 +00:00
dependabot[bot] 573290525b Bump typescript from 5.7.2 to 5.7.3
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 16:01:18 +00:00
jwetzell 928dd7a58c Merge pull request #61 from jwetzell/dependabot/npm_and_yarn/typescript-eslint-8.21.0
Bump typescript-eslint from 8.20.0 to 8.21.0
2025-01-27 09:59:41 -06:00
jwetzell a1e4bba9d9 Merge pull request #62 from jwetzell/dependabot/npm_and_yarn/eslint/js-9.19.0
Bump @eslint/js from 9.18.0 to 9.19.0
2025-01-27 09:59:28 -06:00
dependabot[bot] a76bfa2830 Bump @eslint/js from 9.18.0 to 9.19.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.19.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 12:50:49 +00:00
dependabot[bot] 15a613adb5 Bump typescript-eslint from 8.20.0 to 8.21.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.20.0 to 8.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.21.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 12:50:44 +00:00
jwetzell ed8d586d59 bump node versino to v22.13.1 2025-01-25 09:42:09 -06:00
jwetzell 130c5f8b00 remove unused packet chunk decoder 2025-01-25 09:41:56 -06:00
jwetzell fd27e5246b Merge pull request #59 from jwetzell/speed-up
Performance enhancements
2025-01-25 09:39:41 -06:00
jwetzell ee10f43a15 add workflow to run tests on PR 2025-01-25 09:39:16 -06:00
jwetzell cb60d22549 switch to reused float array where possible 2025-01-22 23:21:36 -06:00
jwetzell 7d7b92678b reuse fixed size DataViews 2025-01-22 23:10:42 -06:00
jwetzell c33a2dfd33 reuse instances of TextDecoder/Encoder 2025-01-22 23:09:28 -06:00
jwetzell e4ed695eb9 more dataview replacements 2025-01-22 23:08:44 -06:00
jwetzell 070e32bb74 replace DataView with inline bit twiddling 2025-01-22 23:08:16 -06:00
jwetzell 40adeb920e Merge pull request #58 from jwetzell/tests
Add basic tests
2025-01-22 23:04:57 -06:00
jwetzell 9811ad1b7f add basic tests covering decoding chunks 2025-01-22 23:03:55 -06:00
jwetzell d03b61e193 add basic tests covering encoding chunks 2025-01-22 22:35:10 -06:00
jwetzell 58416cc543 Merge pull request #57 from jwetzell/dependabot/npm_and_yarn/types/node-22.10.7
Bump @types/node from 22.10.2 to 22.10.7
2025-01-20 09:57:09 -06:00
dependabot[bot] 4b117f1cd9 Bump @types/node from 22.10.2 to 22.10.7
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.2 to 22.10.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 15:55:12 +00:00
jwetzell cff97f0e74 pin dependencies 2025-01-20 09:54:56 -06:00
jwetzell 3f77e88c62 add new eslint 2025-01-20 09:53:59 -06:00
jwetzell 128b0a8a11 remove eslint 2025-01-20 09:47:17 -06:00
jwetzell 9533ed8848 clean out eslint comments 2025-01-20 09:46:18 -06:00
jwetzell fb130585cc update comment 2025-01-06 21:55:30 -06:00
jwetzell b179575311 fix readme 2025-01-06 21:54:26 -06:00
jwetzell d4e4a2229b 2.0.0 2025-01-06 21:50:27 -06:00
jwetzell 6580f66e91 align structure more with underlying chunk layout 2025-01-06 21:49:08 -06:00
jwetzell acac519e9a Merge pull request #53 from jwetzell/dependabot/npm_and_yarn/types/node-22.10.2
Bump @types/node from 22.10.1 to 22.10.2
2024-12-25 09:41:14 -06:00
jwetzell 03e47a98a0 clean up Decoder properties 2024-12-19 21:07:57 -06:00
jwetzell f77e8815d1 simpler logging on benchmark 2024-12-19 19:32:00 -06:00
jwetzell 86ea701a8e fix import on benchmark 2024-12-19 19:29:26 -06:00
dependabot[bot] c5ef7180c7 Bump @types/node from 22.10.1 to 22.10.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.1 to 22.10.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 12:13:45 +00:00
jwetzell 3a44b9d79e Merge pull request #52 from jwetzell/dependabot/npm_and_yarn/prettier-3.4.2
Bump prettier from 3.4.1 to 3.4.2
2024-12-15 22:48:15 -06:00
dependabot[bot] e7a03383e6 Bump prettier from 3.4.1 to 3.4.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.4.1...3.4.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-09 12:16:15 +00:00
jwetzell 7edba830a5 Merge pull request #50 from jwetzell/dependabot/npm_and_yarn/prettier-3.4.1
Bump prettier from 3.3.3 to 3.4.1
2024-12-03 13:17:03 -06:00
dependabot[bot] 7749596859 Bump prettier from 3.3.3 to 3.4.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.3.3 to 3.4.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.3...3.4.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-02 15:44:57 +00:00
jwetzell b2ca7467ce Merge pull request #51 from jwetzell/dependabot/npm_and_yarn/types/node-22.10.1
Bump @types/node from 22.9.3 to 22.10.1
2024-12-02 09:43:29 -06:00
dependabot[bot] 431e9de9a1 Bump @types/node from 22.9.3 to 22.10.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.9.3 to 22.10.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-02 13:33:23 +00:00
jwetzell 934f572f38 Merge pull request #48 from jwetzell/dependabot/npm_and_yarn/types/node-22.9.3
Bump @types/node from 22.9.0 to 22.9.3
2024-11-25 13:45:06 -06:00
jwetzell f5c2de983f Merge pull request #49 from jwetzell/dependabot/npm_and_yarn/typescript-5.7.2
Bump typescript from 5.6.3 to 5.7.2
2024-11-25 13:44:56 -06:00
dependabot[bot] e367f1def9 Bump typescript from 5.6.3 to 5.7.2
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.3 to 5.7.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.3...v5.7.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 12:35:31 +00:00
dependabot[bot] 90f1deb43d Bump @types/node from 22.9.0 to 22.9.3
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.9.0 to 22.9.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 12:35:19 +00:00
jwetzell 23c4743ee8 Merge pull request #45 from jwetzell/dependabot/npm_and_yarn/types/node-22.9.0
Bump @types/node from 22.8.7 to 22.9.0
2024-11-18 08:22:49 -06:00
dependabot[bot] e132a22578 Bump @types/node from 22.8.7 to 22.9.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.8.7 to 22.9.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 12:28:11 +00:00
jwetzell 46368ad89b lint 2024-11-04 19:25:41 -06:00
jwetzell 4f846ccbd6 add eslint and format scripts 2024-11-04 19:25:19 -06:00
jwetzell ca2848f92a Merge pull request #44 from jwetzell/dependabot/npm_and_yarn/types/node-22.8.7
Bump @types/node from 22.8.1 to 22.8.7
2024-11-04 13:36:28 -06:00
dependabot[bot] a3f89ec528 Bump @types/node from 22.8.1 to 22.8.7
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.8.1 to 22.8.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 13:03:08 +00:00
jwetzell 01236ca7d3 Merge pull request #43 from jwetzell/dependabot/npm_and_yarn/types/node-22.8.1
Bump @types/node from 22.7.7 to 22.8.1
2024-10-28 09:59:32 -05:00
dependabot[bot] db436f34ed Bump @types/node from 22.7.7 to 22.8.1
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.7 to 22.8.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 12:27:51 +00:00
67 changed files with 3225 additions and 593 deletions
+3
View File
@@ -4,3 +4,6 @@ updates:
directory: '/'
schedule:
interval: 'weekly'
ignore:
- dependency-name: "@types*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
+25
View File
@@ -0,0 +1,25 @@
name: Run @jwetzell/posistagenet tests
on:
pull_request:
branches:
- main
paths:
- 'src/**'
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
- name: Set up Node.js
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
node-version-file: '.nvmrc'
cache: 'npm'
cache-dependency-path: './package-lock.json'
- name: Install Node.js dependencies
run: npm ci
- run: npm run test
+1 -1
View File
@@ -1 +1 @@
v20.15.1
v24.10.0
+1 -1
View File
@@ -28,7 +28,7 @@ decoder.decode(infoPacketBuffer)
decoder.decode(dataPacketBuffer)
// the system_name from info packets if available
console.log(decoder.system_name)
console.log(decoder.systemName)
// map of trackers populated with any data that has been received
// this merges both info and data packet properties into one
+6 -6
View File
@@ -1,4 +1,4 @@
const { Encoder, Decoder, Tracker } = require('./dist');
const { Encoder, Decoder, Tracker } = require('./dist/cjs');
const testSizes = [1, 10, 100, 1000];
@@ -40,7 +40,7 @@ function benchmark(trackerCount, iterations) {
for (let index = 0; index < iterations; index += 1) {
latestEncodedPackets = encoder.getDataPackets(Date.now(), trackers);
}
benchmarkResults.data.encode = `${(performance.now() - dataEncoderStart).toFixed(2)}ms`;
benchmarkResults.data.encode = performance.now() - dataEncoderStart;
const dataDecodedStart = performance.now();
for (let index = 0; index < iterations; index += 1) {
@@ -48,14 +48,14 @@ function benchmark(trackerCount, iterations) {
decoder.decode(packet);
});
}
benchmarkResults.data.decode = `${(performance.now() - dataDecodedStart).toFixed(2)}ms`;
benchmarkResults.data.decode = performance.now() - dataDecodedStart;
// INFO
const infoEncoderStart = performance.now();
for (let index = 0; index < iterations; index += 1) {
latestEncodedPackets = encoder.getInfoPackets(Date.now(), trackers);
}
benchmarkResults.info.encode = `${(performance.now() - infoEncoderStart).toFixed(2)}ms`;
benchmarkResults.info.encode = performance.now() - infoEncoderStart;
const infoDecodeStart = performance.now();
for (let index = 0; index < iterations; index += 1) {
@@ -63,9 +63,9 @@ function benchmark(trackerCount, iterations) {
decoder.decode(packet);
});
}
benchmarkResults.info.decode = `${(performance.now() - infoDecodeStart).toFixed(2)}ms`;
benchmarkResults.info.decode = performance.now() - infoDecodeStart;
console.table(benchmarkResults);
console.log(benchmarkResults);
}
testSizes.forEach((iterations) => {
+13
View File
@@ -0,0 +1,13 @@
import pluginJs from '@eslint/js';
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
import globals from 'globals';
import tseslint from 'typescript-eslint';
/** @type {import('eslint').Linter.Config[]} */
export default [
{ files: ['**/*.{js,mjs,cjs,ts}'] },
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
pluginJs.configs.recommended,
...tseslint.configs.recommended,
eslintPluginPrettierRecommended,
];
+2 -1
View File
@@ -1,4 +1,5 @@
const { Decoder } = require('../dist/cjs');
const decoder = new Decoder();
const infoPacketBuffer = new Uint8Array([
@@ -16,7 +17,7 @@ decoder.decode(infoPacketBuffer);
decoder.decode(dataPacketBuffer);
// the system_name from info packets if available
console.log(decoder.system_name);
console.log(decoder.systemName);
// map of trackers populated with any data that has been received
// this merges both info and data packet properties into one
+2 -1
View File
@@ -1,5 +1,6 @@
const { Encoder, Tracker } = require('../dist/cjs');
const encoder = new Encoder('Server Name', 2, 3); //server name, version high, version low
const encoder = new Encoder('Server Name', 2, 3); // server name, version high, version low
const trackers = [];
+7 -9
View File
@@ -23,18 +23,18 @@ setInterval(() => {
}
Object.entries(decoder.trackers).forEach(([trackerId, tracker]) => {
const trackerName = decoder.trackers[trackerId]?.tracker_name?.tracker_name;
const trackerName = decoder.trackers[trackerId]?.name;
console.log(`Tracker - id: ${trackerId} | name: ${trackerName || ''}`);
if (tracker.pos) {
console.log(`\tpos: ${tracker.pos.pos_x}, ${tracker.pos.pos_y}, ${tracker.pos.pos_z}`);
console.log(`\tpos: ${tracker.pos.x}, ${tracker.pos.x}, ${tracker.pos.x}`);
}
if (tracker.speed) {
console.log(`\tspeed: ${tracker.speed.speed_x}, ${tracker.speed.speed_y}, ${tracker.speed.speed_z}`);
console.log(`\tspeed: ${tracker.speed.x}, ${tracker.speed.y}, ${tracker.speed.z}`);
}
if (tracker.ori) {
console.log(`\tori: ${tracker.ori.ori_x}, ${tracker.ori.ori_y}, ${tracker.ori.ori_z}`);
console.log(`\tori: ${tracker.ori.x}, ${tracker.ori.y}, ${tracker.ori.z}`);
}
if (tracker.status) {
@@ -42,17 +42,15 @@ setInterval(() => {
}
if (tracker.accel) {
console.log(`\taccel: ${tracker.accel.accel_x}, ${tracker.accel.accel_y}, ${tracker.accel.accel_z}`);
console.log(`\taccel: ${tracker.accel.x}, ${tracker.accel.y}, ${tracker.accel.z}`);
}
if (tracker.trgtpos) {
console.log(
`\ttrgtpos: ${tracker.trgtpos.trgtpos_x}, ${tracker.trgtpos.trgtpos_y}, ${tracker.trgtpos.trgtpos_z}`
);
console.log(`\ttrgtpos: ${tracker.trgtpos.x}, ${tracker.trgtpos.y}, ${tracker.trgtpos.z}`);
}
if (tracker.timestamp) {
console.log(`\ttimestamp: ${tracker.timestamp.tracker_timestamp}`);
console.log(`\ttimestamp: ${tracker.timestamp}`);
}
});
}, 1000);
+5 -13
View File
@@ -1,10 +1,9 @@
// recreation of psn_server.cpp example from https://github.com/vyv/psn-cpp
const dgram = require('dgram');
const { Encoder, Tracker, Decoder } = require('../dist/cjs');
const { Encoder, Tracker } = require('../dist/cjs');
const client = dgram.createSocket('udp4');
const encoder = new Encoder('Test PSN Server', 2, 0);
const decoder = new Decoder();
const trackers = [];
@@ -40,25 +39,18 @@ setInterval(() => {
trackers[index].setTimestamp(timestamp);
});
console.log(`Sending Data Packets`);
const dataPackets = encoder.getDataPackets(timestamp, trackers);
dataPackets.forEach((packet, index) => {
const decodedPacket = decoder.decode(packet);
console.log(
`Sending PSN_DATA_PACKET : Frame Id = ${decodedPacket.packet_header.frame_id} , Packet Count = ${index + 1}`
);
dataPackets.forEach((packet) => {
client.send(packet, 56565, '236.10.10.10');
});
timestamp += 1;
}, 5);
setInterval(() => {
console.log(`Sending Info Packets`);
const infoPackets = encoder.getInfoPackets(timestamp, trackers);
infoPackets.forEach((packet, index) => {
const decodedPacket = decoder.decode(packet);
console.log(
`Sending PSN_INFO_PACKET : Frame Id = ${decodedPacket.packet_header.frame_id} , Packet Count = ${index + 1}`
);
infoPackets.forEach((packet) => {
client.send(packet, 56565, '236.10.10.10');
});
}, 500);
+1609 -24
View File
File diff suppressed because it is too large Load Diff
+18 -7
View File
@@ -1,6 +1,6 @@
{
"name": "@jwetzell/posistagenet",
"version": "1.1.0",
"version": "2.1.0",
"description": "",
"main": "./dist/cjs/index.js",
"module": "./dist/esm/index.js",
@@ -15,12 +15,17 @@
"scripts": {
"prebuild": "rimraf dist",
"build": "npm run build:cjs && npm run build:esm && npm run build:types",
"build:cjs": "tsc -p tsconfig.cjs.json",
"build:esm": "tsc -p tsconfig.esm.json",
"build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json",
"build:esm": "tsc -p tsconfig.esm.json && echo '{\"type\": \"module\"}' > dist/esm/package.json",
"build:types": "tsc -p tsconfig.types.json",
"example:client": "node examples/psn_client.js",
"example:server": "node examples/psn_server.js",
"prepublishOnly": "npm run build"
"prepublishOnly": "npm run build",
"lint:check": "eslint ./src",
"format:check": "prettier ./ --check",
"format:write": "prettier ./ --write",
"pretest": "npm run build",
"test": "node --test --experimental-test-coverage"
},
"files": [
"dist"
@@ -33,9 +38,15 @@
"repository": "https://github.com/jwetzell/psn-js",
"license": "MIT",
"devDependencies": {
"@types/node": "22.7.7",
"prettier": "3.3.3",
"@eslint/js": "9.34.0",
"@types/node": "24.7.0",
"eslint": "9.18.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-prettier": "5.5.4",
"globals": "16.3.0",
"prettier": "3.6.2",
"rimraf": "6.0.1",
"typescript": "5.6.3"
"typescript": "5.9.2",
"typescript-eslint": "8.45.0"
}
}
+52 -70
View File
@@ -1,33 +1,32 @@
import { Decoders } from '.';
import { DataPacketChunk, InfoPacketChunk, InfoTrackerChunk, PacketHeaderChunk } from './models';
import { Decoders } from './index.js';
import { DataPacketChunk, InfoPacketChunk, Tracker, TrackerFromData, TrackerFromInfo } from './models/index.js';
export class Decoder {
// TODO(jwetzell): check if these last packet headers are necessary to hold on to
lastInfoPacketHeader?: PacketHeaderChunk;
lastDataPacketHeader?: PacketHeaderChunk;
infoPacketFrames: { [key: number]: InfoPacketChunk[] } = {};
dataPacketFrames: { [key: number]: DataPacketChunk[] } = {};
trackers: { [key: string]: InfoTrackerChunk } = {};
trackers: { [key: string]: Tracker } = {};
system_name: string = '';
systemName: string = '';
constructor() {}
updateInfo(framePackets: InfoPacketChunk[]) {
framePackets.forEach((packet) => {
if (packet.system_name) {
this.system_name = packet.system_name.system_name;
if (packet.data.systemName?.data) {
this.systemName = packet.data.systemName?.data.systemName;
}
if (packet.tracker_list?.trackers) {
Object.entries(packet.tracker_list.trackers).forEach(([trackerId, tracker]) => {
if (!this.trackers[trackerId]) {
this.trackers[trackerId] = {};
if (packet.data.trackerList?.data) {
packet.data.trackerList.data.trackers.forEach((infoTrackerChunk) => {
if (!this.trackers[infoTrackerChunk.chunk.header.id]) {
const tracker = TrackerFromInfo(infoTrackerChunk);
if (tracker) {
this.trackers[infoTrackerChunk.chunk.header.id] = tracker;
}
}
this.trackers[trackerId].tracker_name = tracker.tracker_name;
const tracker = this.trackers[infoTrackerChunk.chunk.header.id];
tracker.updateInfo(infoTrackerChunk);
});
}
});
@@ -35,97 +34,80 @@ export class Decoder {
updateData(framePackets: DataPacketChunk[]) {
framePackets.forEach((packet) => {
if (packet.tracker_list) {
Object.entries(packet.tracker_list.trackers).forEach(([trackerId, tracker]) => {
this.trackers[trackerId] = {
...this.trackers[trackerId],
...tracker,
};
if (packet.data.trackerList) {
packet.data.trackerList?.data.trackers.forEach((dataTrackerChunk) => {
if (!this.trackers[dataTrackerChunk.chunk.header.id]) {
const tracker = TrackerFromData(dataTrackerChunk);
if (tracker) {
this.trackers[dataTrackerChunk.chunk.header.id] = tracker;
}
}
const tracker = this.trackers[dataTrackerChunk.chunk.header.id];
tracker.updateData(dataTrackerChunk);
});
}
});
}
// TODO(jwetzell): add invalid frame id decoding. Scenario where a frame id is reused before one is complete
decode(packetBuf: Uint8Array): DataPacketChunk | InfoPacketChunk | undefined {
const packet = Decoders.Packet(packetBuf);
decode(packetBuf: Uint8Array) {
const packet = Decoders.Chunk(packetBuf);
if (packet === undefined) {
return packet;
}
if (packet.id === 0x6756) {
const infoPacket = packet as InfoPacketChunk;
if (infoPacket && infoPacket.has_subchunks) {
const currentInfoPacketHeader = infoPacket.packet_header;
if (packet.header.id === 0x6756) {
const infoPacket = Decoders.InfoPacketChunk(packetBuf);
if (infoPacket && infoPacket.chunk.header.hasSubchunks) {
const currentInfoPacketHeader = infoPacket.data.packetHeader;
if (!currentInfoPacketHeader) {
// NOTE(jwetzell): not sure that info packets without a header subchunk are valid?
throw new Error('malformed packet');
}
const systemSubChunk = infoPacket.system_name;
const systemSubChunk = infoPacket.data.systemName;
if (!systemSubChunk) {
// NOTE(jwetzell): not sure that info packets without a system subchunk are valid?
throw new Error('malformed packet');
}
if (currentInfoPacketHeader.frame_id) {
if (this.infoPacketFrames[currentInfoPacketHeader.frame_id] === undefined) {
this.infoPacketFrames[currentInfoPacketHeader.frame_id] = [];
if (currentInfoPacketHeader.data.frameId) {
if (this.infoPacketFrames[currentInfoPacketHeader.data.frameId] === undefined) {
this.infoPacketFrames[currentInfoPacketHeader.data.frameId] = [];
}
this.infoPacketFrames[currentInfoPacketHeader.frame_id].push(infoPacket);
this.infoPacketFrames[currentInfoPacketHeader.data.frameId].push(infoPacket);
if (
this.infoPacketFrames[currentInfoPacketHeader.frame_id].length ===
currentInfoPacketHeader.frame_packet_count
this.infoPacketFrames[currentInfoPacketHeader.data.frameId].length ===
currentInfoPacketHeader.data.framePacketCount
) {
this.updateInfo(this.infoPacketFrames[currentInfoPacketHeader.frame_id]);
delete this.infoPacketFrames[currentInfoPacketHeader.frame_id];
this.updateInfo(this.infoPacketFrames[currentInfoPacketHeader.data.frameId]);
delete this.infoPacketFrames[currentInfoPacketHeader.data.frameId];
}
}
this.lastInfoPacketHeader = currentInfoPacketHeader;
}
} else if (packet.id === 0x6755) {
const dataPacket = packet as DataPacketChunk;
if (dataPacket.has_subchunks) {
const currentDataPacketHeader = dataPacket.packet_header;
} else if (packet.header.id === 0x6755) {
const dataPacket = Decoders.DataPacketChunk(packetBuf);
if (dataPacket.chunk.header.hasSubchunks) {
const currentDataPacketHeader = dataPacket.data.packetHeader;
if (!currentDataPacketHeader) {
// NOTE(jwetzell): not sure that info packets without a header subchunk are valid?
throw new Error('malformed packet');
}
if (currentDataPacketHeader.frame_id) {
if (this.dataPacketFrames[currentDataPacketHeader.frame_id] === undefined) {
this.dataPacketFrames[currentDataPacketHeader.frame_id] = [];
if (currentDataPacketHeader.data.frameId) {
if (this.dataPacketFrames[currentDataPacketHeader.data.frameId] === undefined) {
this.dataPacketFrames[currentDataPacketHeader.data.frameId] = [];
}
this.dataPacketFrames[currentDataPacketHeader.frame_id].push(dataPacket);
this.dataPacketFrames[currentDataPacketHeader.data.frameId].push(dataPacket);
if (
this.dataPacketFrames[currentDataPacketHeader.frame_id].length ===
currentDataPacketHeader.frame_packet_count
this.dataPacketFrames[currentDataPacketHeader.data.frameId].length ===
currentDataPacketHeader.data.framePacketCount
) {
this.updateData(this.dataPacketFrames[currentDataPacketHeader.frame_id]);
delete this.dataPacketFrames[currentDataPacketHeader.frame_id];
this.updateData(this.dataPacketFrames[currentDataPacketHeader.data.frameId]);
delete this.dataPacketFrames[currentDataPacketHeader.data.frameId];
}
}
this.lastDataPacketHeader = currentDataPacketHeader;
}
}
return packet;
}
// NOTE(jwetzell): gets merged set of tracker field keys minus the guaranteed properties
getTrackerFields(): Set<string> {
const keys = new Set(
Object.values(this.trackers)
.map((tracker) => Object.keys(tracker))
.flat(1)
);
// NOTE(jwetzell): remove fields that definitely exist
keys.delete('id');
keys.delete('has_subchunks');
keys.delete('data_len');
keys.delete('chunk_data');
return keys;
}
}
+24 -14
View File
@@ -1,19 +1,29 @@
import { Chunk } from '../models/chunk';
import { Chunk } from '../models/chunk.js';
export default (buffer: Uint8Array, dataDecoder: Function): Chunk => {
let offset = 0;
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
const chunk: Chunk = {};
chunk.id = view.getUint16(offset, true);
offset += 2;
export default (buffer: Uint8Array): Chunk => {
if (buffer.length < 4) {
throw new Error('Chunk buffer must be at least 4 bytes');
}
// NOTE(jwetzell): this data is split up as 1 bit for has_subchunks and 15 bits for the data_len
const combinedLengthAndFlag = view.getUint16(offset, true);
chunk.has_subchunks = combinedLengthAndFlag > 32768;
chunk.data_len = chunk.has_subchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
offset += 2;
chunk.chunk_data = buffer.slice(offset, offset + chunk.data_len);
const id = (buffer[1] << 8) + buffer[0];
// NOTE(jwetzell): this data is split up as 1 bit for hasSubchunks and 15 bits for the dataLen
const combinedLengthAndFlag = (buffer[3] << 8) + buffer[2];
const hasSubchunks = combinedLengthAndFlag > 32768;
const dataLen = hasSubchunks ? combinedLengthAndFlag - 32768 : combinedLengthAndFlag;
const header = {
id,
dataLen,
hasSubchunks,
};
const chunkData = buffer.subarray(4, 4 + header.dataLen);
const chunk = {
chunkData,
header,
};
dataDecoder(chunk);
return chunk;
};
+22 -21
View File
@@ -1,30 +1,29 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { DataPacketChunk } from '../../models/data/data-packet-chunk';
import { Constants } from '../../constants.js';
import { DataPacketChunk, DataPacketChunkData } from '../../models/data/data-packet-chunk.js';
import { Decoders } from '../index.js';
function decodeDataPacketChunk(dataPacketChunk: DataPacketChunk) {
if (dataPacketChunk.has_subchunks && dataPacketChunk.chunk_data && dataPacketChunk.data_len) {
export default (buffer: Uint8Array): DataPacketChunk => {
const chunk = Decoders.Chunk(buffer);
const data: DataPacketChunkData = {};
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < dataPacketChunk.data_len) {
const view = new DataView(
dataPacketChunk.chunk_data.buffer,
dataPacketChunk.chunk_data.byteOffset,
dataPacketChunk.chunk_data.byteLength
);
const chunkId = view.getUint16(offset, true);
while (offset < chunk.header.dataLen) {
const chunkId = (chunk.chunkData.subarray(offset)[1] << 8) + chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000:
dataPacketChunk.packet_header = Decoders.PacketHeaderChunk(dataPacketChunk.chunk_data.slice(offset));
data.packetHeader = Decoders.PacketHeaderChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (dataPacketChunk.packet_header?.data_len) {
offset += dataPacketChunk.packet_header.data_len;
if (data.packetHeader.chunk.header.dataLen) {
offset += data.packetHeader.chunk.header.dataLen;
}
break;
case 0x0001:
dataPacketChunk.tracker_list = Decoders.DataTrackerListChunk(dataPacketChunk.chunk_data.slice(offset));
data.trackerList = Decoders.DataTrackerListChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (dataPacketChunk.tracker_list.data_len) {
offset += dataPacketChunk.tracker_list.data_len;
if (data.trackerList.chunk.header.dataLen) {
offset += data.trackerList.chunk.header.dataLen;
}
break;
default:
@@ -32,7 +31,9 @@ function decodeDataPacketChunk(dataPacketChunk: DataPacketChunk) {
}
}
}
}
export default (buffer: Uint8Array): DataPacketChunk =>
Decoders.Chunk(buffer, decodeDataPacketChunk) as DataPacketChunk;
return {
chunk,
data,
};
};
+40 -37
View File
@@ -1,43 +1,46 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { DataTrackerChunk } from '../../models/data/data-tracker-chunk';
import { Constants } from '../../constants.js';
import { DataTrackerChunk, DataTrackerChunkData } from '../../models/data/data-tracker-chunk.js';
import { Decoders } from '../index.js';
function decodeTrackerChunk(trackerChunk: DataTrackerChunk) {
if (trackerChunk.chunk_data && trackerChunk.data_len) {
export default (buffer: Uint8Array): DataTrackerChunk => {
const chunk = Decoders.Chunk(buffer);
const data: DataTrackerChunkData = {};
if (chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < trackerChunk.data_len) {
const trackerFieldChunk = Decoders.DataTrackerFieldChunk(trackerChunk.chunk_data.slice(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (trackerFieldChunk.data_len) {
offset += trackerFieldChunk.data_len;
switch (trackerFieldChunk.id) {
case 0x0000:
trackerChunk.pos = trackerFieldChunk;
break;
case 0x0001:
trackerChunk.speed = trackerFieldChunk;
break;
case 0x0002:
trackerChunk.ori = trackerFieldChunk;
break;
case 0x0003:
trackerChunk.status = trackerFieldChunk;
break;
case 0x0004:
trackerChunk.accel = trackerFieldChunk;
break;
case 0x0005:
trackerChunk.trgtpos = trackerFieldChunk;
break;
case 0x0006:
trackerChunk.timestamp = trackerFieldChunk;
break;
default:
break;
}
while (offset < chunk.header.dataLen) {
const trackerFieldChunk = Decoders.Chunk(chunk.chunkData.subarray(offset));
switch (trackerFieldChunk.header.id) {
case 0x0000:
data.pos = Decoders.DataTrackerXYZChunk(chunk.chunkData.subarray(offset));
break;
case 0x0001:
data.speed = Decoders.DataTrackerXYZChunk(chunk.chunkData.subarray(offset));
break;
case 0x0002:
data.ori = Decoders.DataTrackerXYZChunk(chunk.chunkData.subarray(offset));
break;
case 0x0003:
data.status = Decoders.DataTrackerStatusChunk(chunk.chunkData.subarray(offset));
break;
case 0x0004:
data.accel = Decoders.DataTrackerXYZChunk(chunk.chunkData.subarray(offset));
break;
case 0x0005:
data.trgtpos = Decoders.DataTrackerXYZChunk(chunk.chunkData.subarray(offset));
break;
case 0x0006:
data.timestamp = Decoders.DataTrackerTimestampChunk(chunk.chunkData.subarray(offset));
break;
default:
break;
}
offset += Constants.CHUNK_HEADER_SIZE;
offset += trackerFieldChunk.header.dataLen;
}
}
}
export default (buffer: Uint8Array): DataTrackerChunk => Decoders.Chunk(buffer, decodeTrackerChunk) as DataTrackerChunk;
return {
chunk,
data,
};
};
@@ -1,63 +0,0 @@
/* eslint-disable no-case-declarations */
import { Decoders } from '..';
import { DataTrackerFieldChunk } from '../../models/data/data-tracker-field-chunk';
function readXYZ(trackerFieldChunk: DataTrackerFieldChunk, prefix: string = '') {
if (trackerFieldChunk.chunk_data) {
const view = new DataView(
trackerFieldChunk.chunk_data.buffer,
trackerFieldChunk.chunk_data.byteOffset,
trackerFieldChunk.chunk_data.byteLength
);
trackerFieldChunk[`${prefix}x`] = view.getFloat32(0, true);
trackerFieldChunk[`${prefix}y`] = view.getFloat32(4, true);
trackerFieldChunk[`${prefix}z`] = view.getFloat32(8, true);
}
}
function decodeTrackerFieldChunk(trackerFieldChunk: DataTrackerFieldChunk) {
if (trackerFieldChunk.id !== undefined) {
switch (trackerFieldChunk.id) {
case 0x0000:
readXYZ(trackerFieldChunk, 'pos_');
break;
case 0x0001:
readXYZ(trackerFieldChunk, 'speed_');
break;
case 0x0002:
readXYZ(trackerFieldChunk, 'ori_');
break;
case 0x0003:
if (trackerFieldChunk.chunk_data) {
const view = new DataView(
trackerFieldChunk.chunk_data.buffer,
trackerFieldChunk.chunk_data.byteOffset,
trackerFieldChunk.chunk_data.byteLength
);
trackerFieldChunk.validity = view.getFloat32(0, true);
}
break;
case 0x0004:
readXYZ(trackerFieldChunk, 'accel_');
break;
case 0x0005:
readXYZ(trackerFieldChunk, 'trgtpos_');
break;
case 0x0006:
if (trackerFieldChunk.chunk_data) {
const view = new DataView(
trackerFieldChunk.chunk_data.buffer,
trackerFieldChunk.chunk_data.byteOffset,
trackerFieldChunk.chunk_data.byteLength
);
trackerFieldChunk.tracker_timestamp = view.getBigUint64(0, true);
}
break;
default:
break;
}
}
}
export default (buffer: Uint8Array): DataTrackerFieldChunk =>
Decoders.Chunk(buffer, decodeTrackerFieldChunk) as DataTrackerFieldChunk;
+25 -16
View File
@@ -1,24 +1,33 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { DataTrackerListChunk } from '../../models/data/data-tracker-list-chunk';
import { Constants } from '../../constants.js';
import { DataTrackerListChunk, DataTrackerListChunkData } from '../../models/data/data-tracker-list-chunk.js';
import { DataTrackerChunk } from '../../models/index.js';
import { Decoders } from '../index.js';
function decodeDataTrackerListChunk(dataTrackerListChunk: DataTrackerListChunk) {
dataTrackerListChunk.trackers = {};
export default (buffer: Uint8Array): DataTrackerListChunk => {
const chunk = Decoders.Chunk(buffer);
const trackers: DataTrackerChunk[] = [];
// TODO(jwetzell): add error handling
let offset = 0;
if (dataTrackerListChunk.chunk_data) {
while (offset < dataTrackerListChunk.chunk_data.length) {
const trackerChunk = Decoders.DataTrackerChunk(dataTrackerListChunk.chunk_data.slice(offset));
if (chunk.chunkData) {
let offset = 0;
while (offset < chunk.chunkData.length) {
const trackerChunk = Decoders.DataTrackerChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (trackerChunk.data_len) {
offset += trackerChunk.data_len;
if (trackerChunk.chunk.header.dataLen) {
offset += trackerChunk.chunk.header.dataLen;
}
if (trackerChunk.id !== undefined) {
dataTrackerListChunk.trackers[trackerChunk.id] = trackerChunk;
if (trackerChunk.chunk.header.id !== undefined) {
trackers.push(trackerChunk);
}
}
}
}
export default (buffer: Uint8Array): DataTrackerListChunk =>
Decoders.Chunk(buffer, decodeDataTrackerListChunk) as DataTrackerListChunk;
const data: DataTrackerListChunkData = {
trackers,
};
return {
chunk,
data,
};
};
@@ -0,0 +1,18 @@
import { DataTrackerStatusChunk, DataTrackerStatusChunkData } from '../../models/data/data-tracker-status-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): DataTrackerStatusChunk => {
const chunk = Decoders.Chunk(buffer);
const view = new DataView(chunk.chunkData.buffer, chunk.chunkData.byteOffset, chunk.chunkData.byteLength);
const validity = view.getFloat32(0, true);
const data: DataTrackerStatusChunkData = {
validity,
};
return {
chunk,
data,
};
};
@@ -0,0 +1,21 @@
import {
DataTrackerTimestampChunk,
DataTrackerTimestampChunkData,
} from '../../models/data/data-tracker-timestamp-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): DataTrackerTimestampChunk => {
const chunk = Decoders.Chunk(buffer);
const view = new DataView(chunk.chunkData.buffer, chunk.chunkData.byteOffset, chunk.chunkData.byteLength);
const timestamp = view.getBigUint64(0, true);
const data: DataTrackerTimestampChunkData = {
timestamp,
};
return {
chunk,
data,
};
};
@@ -0,0 +1,20 @@
import { DataTrackerXYZChunk, DataTrackerXYZChunkData } from '../../models/data/data-tracker-xyz-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): DataTrackerXYZChunk => {
const chunk = Decoders.Chunk(buffer);
// TODO(jwetzell): add error handling
const view = new DataView(chunk.chunkData.buffer, chunk.chunkData.byteOffset, chunk.chunkData.byteLength);
const data: DataTrackerXYZChunkData = {
x: view.getFloat32(0, true),
y: view.getFloat32(4, true),
z: view.getFloat32(8, true),
};
return {
chunk,
data,
};
};
+16 -14
View File
@@ -1,25 +1,27 @@
import Chunk from './chunk';
import Packet from './packet';
import PacketHeaderChunk from './packet-header-chunk';
import Chunk from './chunk.js';
import PacketHeaderChunk from './packet-header-chunk.js';
import DataPacketChunk from './data/data-packet-chunk';
import DataTrackerChunk from './data/data-tracker-chunk';
import DataTrackerFieldChunk from './data/data-tracker-field-chunk';
import DataTrackerListChunk from './data/data-tracker-list-chunk';
import DataPacketChunk from './data/data-packet-chunk.js';
import DataTrackerChunk from './data/data-tracker-chunk.js';
import DataTrackerListChunk from './data/data-tracker-list-chunk.js';
import DataTrackerStatusChunk from './data/data-tracker-status-chunk.js';
import DataTrackerTimestampChunk from './data/data-tracker-timestamp-chunk.js';
import DataTrackerXYZChunk from './data/data-tracker-xyz-chunk.js';
import InfoPacketChunk from './info/info-packet-chunk';
import InfoSystemNameChunk from './info/info-system-name-chunk';
import InfoTrackerChunk from './info/info-tracker-chunk';
import InfoTrackerListChunk from './info/info-tracker-list-chunk';
import InfoTrackerNameChunk from './info/info-tracker-name-chunk';
import InfoPacketChunk from './info/info-packet-chunk.js';
import InfoSystemNameChunk from './info/info-system-name-chunk.js';
import InfoTrackerChunk from './info/info-tracker-chunk.js';
import InfoTrackerListChunk from './info/info-tracker-list-chunk.js';
import InfoTrackerNameChunk from './info/info-tracker-name-chunk.js';
export const Decoders = {
Chunk,
PacketHeaderChunk,
Packet,
DataPacketChunk,
DataTrackerChunk,
DataTrackerFieldChunk,
DataTrackerXYZChunk,
DataTrackerStatusChunk,
DataTrackerTimestampChunk,
DataTrackerListChunk,
InfoPacketChunk,
InfoSystemNameChunk,
+25 -24
View File
@@ -1,37 +1,36 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { InfoPacketChunk } from '../../models/info/info-packet-chunk';
import { Constants } from '../../constants.js';
import { InfoPacketChunk, InfoPacketChunkData } from '../../models/info/info-packet-chunk.js';
import { Decoders } from '../index.js';
function decodeInfoPacketChunk(infoPacketChunk: InfoPacketChunk) {
if (infoPacketChunk.has_subchunks && infoPacketChunk.chunk_data && infoPacketChunk.data_len) {
export default (buffer: Uint8Array): InfoPacketChunk => {
const chunk = Decoders.Chunk(buffer);
const data: InfoPacketChunkData = {};
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < infoPacketChunk.data_len) {
const view = new DataView(
infoPacketChunk.chunk_data.buffer,
infoPacketChunk.chunk_data.byteOffset,
infoPacketChunk.chunk_data.byteLength
);
const chunkId = view.getUint16(offset, true);
while (offset < chunk.header.dataLen) {
const chunkId = (chunk.chunkData.subarray(offset)[1] << 8) + chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000:
infoPacketChunk.packet_header = Decoders.PacketHeaderChunk(infoPacketChunk.chunk_data.slice(offset));
data.packetHeader = Decoders.PacketHeaderChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (infoPacketChunk.packet_header?.data_len) {
offset += infoPacketChunk.packet_header.data_len;
if (data.packetHeader?.chunk.header.dataLen) {
offset += data.packetHeader.chunk.header.dataLen;
}
break;
case 0x0001:
infoPacketChunk.system_name = Decoders.InfoSystemNameChunk(infoPacketChunk.chunk_data.slice(offset));
data.systemName = Decoders.InfoSystemNameChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (infoPacketChunk.system_name?.data_len) {
offset += infoPacketChunk.system_name.data_len;
if (data.systemName?.chunk.header.dataLen) {
offset += data.systemName?.chunk.header.dataLen;
}
break;
case 0x0002:
infoPacketChunk.tracker_list = Decoders.InfoTrackerListChunk(infoPacketChunk.chunk_data.slice(offset));
data.trackerList = Decoders.InfoTrackerListChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (infoPacketChunk.tracker_list?.data_len) {
offset += infoPacketChunk.tracker_list.data_len;
if (data.trackerList?.chunk.header.dataLen) {
offset += data.trackerList.chunk.header.dataLen;
}
break;
default:
@@ -39,7 +38,9 @@ function decodeInfoPacketChunk(infoPacketChunk: InfoPacketChunk) {
}
}
}
}
export default (buffer: Uint8Array): InfoPacketChunk =>
Decoders.Chunk(buffer, decodeInfoPacketChunk) as InfoPacketChunk;
return {
chunk,
data,
};
};
+14 -11
View File
@@ -1,13 +1,16 @@
import { Decoders } from '..';
import { InfoSystemNameChunk } from '../../models/info/info-system-name-chunk';
import { InfoSystemNameChunk, InfoSystemNameChunkData } from '../../models/info/info-system-name-chunk.js';
import { Decoders } from '../index.js';
function decodeSystemNameChunk(systemNameChunk: InfoSystemNameChunk) {
if (systemNameChunk.chunk_data !== undefined && systemNameChunk.data_len !== undefined) {
systemNameChunk.system_name = new TextDecoder().decode(
systemNameChunk.chunk_data.slice(0, systemNameChunk.data_len)
);
}
}
const nameDecoder = new TextDecoder();
export default (buffer: Uint8Array): InfoSystemNameChunk => {
const chunk = Decoders.Chunk(buffer);
export default (buffer: Uint8Array): InfoSystemNameChunk =>
Decoders.Chunk(buffer, decodeSystemNameChunk) as InfoSystemNameChunk;
const data: InfoSystemNameChunkData = {
systemName: nameDecoder.decode(chunk.chunkData.subarray(0, chunk.header.dataLen)),
};
return {
chunk,
data,
};
};
+24 -20
View File
@@ -1,31 +1,35 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { InfoTrackerChunk } from '../../models/info/info-tracker-chunk';
import { Constants } from '../../constants.js';
import { InfoTrackerChunk, InfoTrackerChunkData } from '../../models/info/info-tracker-chunk.js';
import { Decoders } from '../index.js';
function decodeInfoTrackerChunk(infoTrackerChunk: InfoTrackerChunk) {
if (infoTrackerChunk.has_subchunks && infoTrackerChunk.chunk_data && infoTrackerChunk.data_len) {
export default (buffer: Uint8Array): InfoTrackerChunk => {
const chunk = Decoders.Chunk(buffer);
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < infoTrackerChunk.data_len) {
const view = new DataView(
infoTrackerChunk.chunk_data.buffer,
infoTrackerChunk.chunk_data.byteOffset,
infoTrackerChunk.chunk_data.byteLength
);
const chunkId = view.getUint16(offset, true);
while (offset < chunk.header.dataLen) {
const chunkId = (chunk.chunkData.subarray(offset)[1] << 8) + chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000:
infoTrackerChunk.tracker_name = Decoders.InfoTrackerNameChunk(infoTrackerChunk.chunk_data.slice(offset));
case 0x0000: {
const data: InfoTrackerChunkData = {
trackerName: Decoders.InfoTrackerNameChunk(chunk.chunkData.subarray(offset)),
};
offset += Constants.CHUNK_HEADER_SIZE;
if (infoTrackerChunk.tracker_name?.data_len) {
offset += infoTrackerChunk?.tracker_name?.data_len;
if (data.trackerName.chunk.header.dataLen) {
offset += data.trackerName.chunk.header.dataLen;
}
break;
return {
chunk,
data,
};
}
default:
break;
}
}
}
}
export default (buffer: Uint8Array): InfoTrackerChunk => Decoders.Chunk(buffer, decodeInfoTrackerChunk);
return {
chunk,
};
};
+25 -16
View File
@@ -1,24 +1,33 @@
import { Decoders } from '..';
import { Constants } from '../../constants';
import { InfoTrackerListChunk } from '../../models/info/info-tracker-list-chunk';
import { Constants } from '../../constants.js';
import { InfoTrackerChunk } from '../../models/info/info-tracker-chunk.js';
import { InfoTrackerListChunk, InfoTrackerListChunkData } from '../../models/info/info-tracker-list-chunk.js';
import { Decoders } from '../index.js';
function decodeInfoTrackerListChunk(infoTrackerListChunk: InfoTrackerListChunk) {
infoTrackerListChunk.trackers = {};
if (infoTrackerListChunk.has_subchunks && infoTrackerListChunk.chunk_data) {
export default (buffer: Uint8Array): InfoTrackerListChunk => {
const chunk = Decoders.Chunk(buffer);
const trackers: InfoTrackerChunk[] = [];
if (chunk.header.hasSubchunks && chunk.chunkData) {
let offset = 0;
if (infoTrackerListChunk.data_len) {
while (offset < infoTrackerListChunk.data_len) {
const trackerChunk = Decoders.InfoTrackerChunk(infoTrackerListChunk.chunk_data.slice(offset));
if (chunk.header.dataLen) {
while (offset < chunk.header.dataLen) {
const trackerChunk = Decoders.InfoTrackerChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (trackerChunk.data_len) {
offset += trackerChunk.data_len;
if (trackerChunk.chunk.header.dataLen) {
offset += trackerChunk.chunk.header.dataLen;
}
if (trackerChunk.id !== undefined) {
infoTrackerListChunk.trackers[trackerChunk.id] = trackerChunk;
if (trackerChunk.chunk.header.id !== undefined) {
trackers.push(trackerChunk);
}
}
}
}
}
export default (buffer: Uint8Array): InfoTrackerListChunk =>
Decoders.Chunk(buffer, decodeInfoTrackerListChunk) as InfoTrackerListChunk;
const data: InfoTrackerListChunkData = {
trackers,
};
return {
chunk,
data,
};
};
+15 -11
View File
@@ -1,12 +1,16 @@
import { Decoders } from '..';
import { InfoTrackerNameChunk } from '../../models/info/info-tracker-name-chunk';
import { InfoTrackerNameChunk, InfoTrackerNameChunkData } from '../../models/info/info-tracker-name-chunk.js';
import { Decoders } from '../index.js';
function decodeTrackerNameChunk(trackerNameChunk: InfoTrackerNameChunk) {
if (trackerNameChunk.chunk_data !== undefined && trackerNameChunk.data_len !== undefined) {
trackerNameChunk.tracker_name = new TextDecoder().decode(
trackerNameChunk.chunk_data.slice(0, trackerNameChunk.data_len)
);
}
}
export default (buffer: Uint8Array): InfoTrackerNameChunk =>
Decoders.Chunk(buffer, decodeTrackerNameChunk) as InfoTrackerNameChunk;
const nameDecoder = new TextDecoder();
export default (buffer: Uint8Array): InfoTrackerNameChunk => {
const chunk = Decoders.Chunk(buffer);
const data: InfoTrackerNameChunkData = {
trackerName: nameDecoder.decode(chunk.chunkData.subarray(0, chunk.header.dataLen)),
};
return {
chunk,
data,
};
};
+24 -18
View File
@@ -1,21 +1,27 @@
import { Decoders } from '.';
import { PacketHeaderChunk } from '../models/packet-header-chunk';
function decodePacketHeaderChunk(packetHeaderChunk: PacketHeaderChunk) {
if (packetHeaderChunk.chunk_data) {
const view = new DataView(
packetHeaderChunk.chunk_data.buffer,
packetHeaderChunk.chunk_data.byteOffset,
packetHeaderChunk.chunk_data.byteLength
);
packetHeaderChunk.packet_timestamp = view.getBigUint64(0, true);
packetHeaderChunk.version_high = view.getUint8(8);
packetHeaderChunk.version_low = view.getUint8(9);
packetHeaderChunk.frame_id = view.getUint8(10);
packetHeaderChunk.frame_packet_count = view.getUint8(11);
}
}
import { PacketHeaderChunk, PacketHeaderChunkData } from '../models/packet-header-chunk.js';
import { Decoders } from './index.js';
export default (buffer: Uint8Array): PacketHeaderChunk => {
return Decoders.Chunk(buffer, decodePacketHeaderChunk);
const chunk = Decoders.Chunk(buffer);
let packetTimestamp = BigInt(chunk.chunkData[7]) << BigInt(56);
packetTimestamp += BigInt(chunk.chunkData[6]) << BigInt(48);
packetTimestamp += BigInt(chunk.chunkData[5]) << BigInt(40);
packetTimestamp += BigInt(chunk.chunkData[4]) << BigInt(32);
packetTimestamp += BigInt(chunk.chunkData[3]) << BigInt(24);
packetTimestamp += BigInt(chunk.chunkData[2]) << BigInt(16);
packetTimestamp += BigInt(chunk.chunkData[1]) << BigInt(8);
packetTimestamp += BigInt(chunk.chunkData[0]);
const data: PacketHeaderChunkData = {
packetTimestamp,
versionHigh: chunk.chunkData[8],
versionLow: chunk.chunkData[9],
frameId: chunk.chunkData[10],
framePacketCount: chunk.chunkData[11],
};
return {
chunk,
data,
};
};
-17
View File
@@ -1,17 +0,0 @@
import { Decoders } from '.';
import { DataPacketChunk } from '../models/data/data-packet-chunk';
import { InfoPacketChunk } from '../models/info/info-packet-chunk';
export default (buffer: Uint8Array): InfoPacketChunk | DataPacketChunk | undefined => {
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
const chunkId = view.getUint16(0, true);
switch (chunkId) {
case 0x6756:
return Decoders.InfoPacketChunk(buffer);
case 0x6755:
return Decoders.DataPacketChunk(buffer);
default:
return undefined;
}
};
+2 -2
View File
@@ -1,5 +1,5 @@
import { Encoders, Tracker } from '.';
import { Constants } from './constants';
import { Constants } from './constants.js';
import { Encoders, Tracker } from './index.js';
export class Encoder {
private systemName: string;
+1 -1
View File
@@ -1,3 +1,4 @@
const header = new DataView(new ArrayBuffer(4));
export default (id: number, chunkData: Uint8Array, hasSubchunks: boolean): Uint8Array => {
if (!Number.isInteger(id)) {
throw new Error('chunk id must be an integer');
@@ -11,7 +12,6 @@ export default (id: number, chunkData: Uint8Array, hasSubchunks: boolean): Uint8
throw new Error('chunkData can not be greater than 32767 bytes');
}
const header = new DataView(new ArrayBuffer(4));
header.setUint16(0, id, true);
const hasSubChunksBit = (hasSubchunks ? 1 : 0) << 15;
header.setUint16(2, hasSubChunksBit + chunkData.length, true);
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (packetHeaderChunk: Uint8Array, trackerListChunk: Uint8Array): Uint8Array => {
const chunkData = new Uint8Array(packetHeaderChunk.length + trackerListChunk.length);
chunkData.set(packetHeaderChunk);
@@ -1,9 +1,9 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(3);
export default (x: number, y: number, z: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(12));
buf.setFloat32(0, x, true);
buf.setFloat32(4, y, true);
buf.setFloat32(8, z, true);
return chunk(0x0004, new Uint8Array(buf.buffer), false);
floatArray[0] = x;
floatArray[1] = y;
floatArray[2] = z;
return chunk(0x0004, new Uint8Array(floatArray.buffer), false);
};
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (trackerId: number, fieldChunks: Uint8Array[]): Uint8Array => {
let fieldChunksTotalLength = 0;
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (trackerChunks: Uint8Array[]) => {
let trackerChunksTotalLength = 0;
+6 -7
View File
@@ -1,10 +1,9 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(3);
export default (x: number, y: number, z: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(12));
buf.setFloat32(0, x, true);
buf.setFloat32(4, y, true);
buf.setFloat32(8, z, true);
return chunk(0x0002, new Uint8Array(buf.buffer), false);
floatArray[0] = x;
floatArray[1] = y;
floatArray[2] = z;
return chunk(0x0002, new Uint8Array(floatArray.buffer), false);
};
+6 -7
View File
@@ -1,11 +1,10 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(3);
export default (x: number, y: number, z: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(12));
floatArray[0] = x;
floatArray[1] = y;
floatArray[2] = z;
buf.setFloat32(0, x, true);
buf.setFloat32(4, y, true);
buf.setFloat32(8, z, true);
return chunk(0x0000, new Uint8Array(buf.buffer), false);
return chunk(0x0000, new Uint8Array(floatArray.buffer), false);
};
@@ -1,11 +1,10 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(3);
export default (x: number, y: number, z: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(12));
floatArray[0] = x;
floatArray[1] = y;
floatArray[2] = z;
buf.setFloat32(0, x, true);
buf.setFloat32(4, y, true);
buf.setFloat32(8, z, true);
return chunk(0x0001, new Uint8Array(buf.buffer), false);
return chunk(0x0001, new Uint8Array(floatArray.buffer), false);
};
@@ -1,7 +1,7 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(1);
export default (validity: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(4));
buf.setFloat32(0, validity, true);
return chunk(0x0003, new Uint8Array(buf.buffer), false);
floatArray[0] = validity;
return chunk(0x0003, new Uint8Array(floatArray.buffer), false);
};
@@ -1,7 +1,7 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const buf = new DataView(new ArrayBuffer(8));
export default (timestamp: bigint): Uint8Array => {
const buf = new DataView(new ArrayBuffer(8));
buf.setBigUint64(0, BigInt(timestamp), true);
return chunk(0x0006, new Uint8Array(buf.buffer), false);
};
@@ -1,11 +1,10 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
const floatArray = new Float32Array(3);
export default (x: number, y: number, z: number): Uint8Array => {
const buf = new DataView(new ArrayBuffer(12));
floatArray[0] = x;
floatArray[1] = y;
floatArray[2] = z;
buf.setFloat32(0, x, true);
buf.setFloat32(4, y, true);
buf.setFloat32(8, z, true);
return chunk(0x0005, new Uint8Array(buf.buffer), false);
return chunk(0x0005, new Uint8Array(floatArray.buffer), false);
};
+17 -17
View File
@@ -1,21 +1,21 @@
import Chunk from './chunk';
import DataPacketChunk from './data/data-packet-chunk';
import DataTrackerAccelChunk from './data/data-tracker-accel-chunk';
import DataTrackerChunk from './data/data-tracker-chunk';
import DataTrackerListChunk from './data/data-tracker-list-chunk';
import DataTrackerOriChunk from './data/data-tracker-ori-chunk';
import DataTrackerPosChunk from './data/data-tracker-pos-chunk';
import DataTrackerSpeedChunk from './data/data-tracker-speed-chunk';
import DataTrackerStatusChunk from './data/data-tracker-status-chunk';
import DataTrackerTimestampChunk from './data/data-tracker-timestamp-chunk';
import DataTrackerTrgtposChunk from './data/data-tracker-trgtpos-chunk';
import PacketHeaderChunk from './packet-header-chunk';
import Chunk from './chunk.js';
import DataPacketChunk from './data/data-packet-chunk.js';
import DataTrackerAccelChunk from './data/data-tracker-accel-chunk.js';
import DataTrackerChunk from './data/data-tracker-chunk.js';
import DataTrackerListChunk from './data/data-tracker-list-chunk.js';
import DataTrackerOriChunk from './data/data-tracker-ori-chunk.js';
import DataTrackerPosChunk from './data/data-tracker-pos-chunk.js';
import DataTrackerSpeedChunk from './data/data-tracker-speed-chunk.js';
import DataTrackerStatusChunk from './data/data-tracker-status-chunk.js';
import DataTrackerTimestampChunk from './data/data-tracker-timestamp-chunk.js';
import DataTrackerTrgtposChunk from './data/data-tracker-trgtpos-chunk.js';
import PacketHeaderChunk from './packet-header-chunk.js';
import InfoPacketChunk from './info/info-packet-chunk';
import InfoSystemNameChunk from './info/info-system-name-chunk';
import InfoTrackerChunk from './info/info-tracker-chunk';
import InfoTrackerListChunk from './info/info-tracker-list-chunk';
import InfoTrackerNameChunk from './info/info-tracker-name-chunk';
import InfoPacketChunk from './info/info-packet-chunk.js';
import InfoSystemNameChunk from './info/info-system-name-chunk.js';
import InfoTrackerChunk from './info/info-tracker-chunk.js';
import InfoTrackerListChunk from './info/info-tracker-list-chunk.js';
import InfoTrackerNameChunk from './info/info-tracker-name-chunk.js';
export const Encoders = {
DataPacketChunk,
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (
packetHeaderChunk: Uint8Array,
+3 -3
View File
@@ -1,3 +1,3 @@
import chunk from '../chunk';
export default (systemName: string): Uint8Array => chunk(0x0001, new TextEncoder().encode(systemName), false);
import chunk from '../chunk.js';
const nameEncoder = new TextEncoder();
export default (systemName: string): Uint8Array => chunk(0x0001, nameEncoder.encode(systemName), false);
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (trackerId: number, trackerNameChunk: Uint8Array): Uint8Array =>
chunk(trackerId, trackerNameChunk, true);
+1 -1
View File
@@ -1,4 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (trackerChunks: Uint8Array[]): Uint8Array => {
let trackerChunksTotalLength = 0;
+3 -2
View File
@@ -1,3 +1,4 @@
import chunk from '../chunk';
import chunk from '../chunk.js';
export default (trackerName: string) => chunk(0x0000, new TextEncoder().encode(trackerName), false);
const nameEncoder = new TextEncoder();
export default (trackerName: string) => chunk(0x0000, nameEncoder.encode(trackerName), false);
+2 -2
View File
@@ -1,5 +1,6 @@
import chunk from './chunk';
import chunk from './chunk.js';
const packetHeader = new DataView(new ArrayBuffer(12));
export default (
timestamp: bigint,
versionHigh: number,
@@ -33,7 +34,6 @@ export default (
throw new Error('frame packet count must be >= 0 and <= 255');
}
const packetHeader = new DataView(new ArrayBuffer(12));
packetHeader.setBigUint64(0, BigInt(timestamp), true);
packetHeader.setUint8(8, versionHigh);
packetHeader.setUint8(9, versionLow);
+5 -5
View File
@@ -1,5 +1,5 @@
export { Decoder } from './decoder';
export * from './decoders';
export { Encoder } from './encoder';
export * from './encoders';
export * from './models';
export { Decoder } from './decoder.js';
export * from './decoders/index.js';
export { Encoder } from './encoder.js';
export * from './encoders/index.js';
export * from './models/index.js';
+9 -5
View File
@@ -1,6 +1,10 @@
export interface Chunk {
id?: number;
has_subchunks?: boolean;
data_len?: number;
chunk_data?: Uint8Array;
export interface ChunkHeader {
id: number;
dataLen: number;
hasSubchunks: boolean;
}
export interface Chunk {
chunkData: Uint8Array;
header: ChunkHeader;
}
+11 -6
View File
@@ -1,8 +1,13 @@
import { Chunk } from '../chunk';
import { PacketHeaderChunk } from '../packet-header-chunk';
import { DataTrackerListChunk } from './data-tracker-list-chunk';
import { Chunk } from '../chunk.js';
import { PacketHeaderChunk } from '../packet-header-chunk.js';
import { DataTrackerListChunk } from './data-tracker-list-chunk.js';
export interface DataPacketChunk extends Chunk {
packet_header: PacketHeaderChunk;
tracker_list: DataTrackerListChunk;
export interface DataPacketChunkData {
packetHeader?: PacketHeaderChunk;
trackerList?: DataTrackerListChunk;
}
export interface DataPacketChunk {
chunk: Chunk;
data: DataPacketChunkData;
}
+17 -10
View File
@@ -1,12 +1,19 @@
import { Chunk } from '../chunk';
import { DataTrackerFieldChunk } from './data-tracker-field-chunk';
import { Chunk } from '../chunk.js';
import { DataTrackerStatusChunk } from './data-tracker-status-chunk.js';
import { DataTrackerTimestampChunk } from './data-tracker-timestamp-chunk.js';
import { DataTrackerXYZChunk } from './data-tracker-xyz-chunk.js';
export interface DataTrackerChunk extends Chunk {
pos?: DataTrackerFieldChunk;
speed?: DataTrackerFieldChunk;
ori?: DataTrackerFieldChunk;
status?: DataTrackerFieldChunk;
accel?: DataTrackerFieldChunk;
trgtpos?: DataTrackerFieldChunk;
timestamp?: DataTrackerFieldChunk;
export interface DataTrackerChunkData {
pos?: DataTrackerXYZChunk;
speed?: DataTrackerXYZChunk;
ori?: DataTrackerXYZChunk;
status?: DataTrackerStatusChunk;
accel?: DataTrackerXYZChunk;
trgtpos?: DataTrackerXYZChunk;
timestamp?: DataTrackerTimestampChunk;
}
export interface DataTrackerChunk {
chunk: Chunk;
data: DataTrackerChunkData;
}
@@ -1,5 +0,0 @@
import { Chunk } from '../chunk';
export interface DataTrackerFieldChunk extends Chunk {
[key: string]: number | bigint | number[] | Uint8Array | undefined | boolean;
}
+9 -6
View File
@@ -1,8 +1,11 @@
import { Chunk } from '../chunk';
import { DataTrackerChunk } from './data-tracker-chunk';
import { Chunk } from '../chunk.js';
import { DataTrackerChunk } from './data-tracker-chunk.js';
export interface DataTrackerListChunk extends Chunk {
trackers: {
[key: number]: DataTrackerChunk;
};
export interface DataTrackerListChunkData {
trackers: DataTrackerChunk[];
}
export interface DataTrackerListChunk {
chunk: Chunk;
data: DataTrackerListChunkData;
}
@@ -0,0 +1,10 @@
import { Chunk } from '../chunk.js';
export interface DataTrackerStatusChunkData {
validity: number;
}
export interface DataTrackerStatusChunk {
chunk: Chunk;
data: DataTrackerStatusChunkData;
}
@@ -0,0 +1,10 @@
import { Chunk } from '../chunk.js';
export interface DataTrackerTimestampChunkData {
timestamp: bigint;
}
export interface DataTrackerTimestampChunk {
chunk: Chunk;
data: DataTrackerTimestampChunkData;
}
+12
View File
@@ -0,0 +1,12 @@
import { Chunk } from '../chunk.js';
export interface DataTrackerXYZChunkData {
x: number;
y: number;
z: number;
}
export interface DataTrackerXYZChunk {
chunk: Chunk;
data: DataTrackerXYZChunkData;
}
+11 -12
View File
@@ -1,12 +1,11 @@
export * from './chunk';
export * from './data/data-packet-chunk';
export * from './data/data-tracker-chunk';
export * from './data/data-tracker-field-chunk';
export * from './data/data-tracker-list-chunk';
export * from './info/info-packet-chunk';
export * from './info/info-system-name-chunk';
export * from './info/info-tracker-chunk';
export * from './info/info-tracker-list-chunk';
export * from './info/info-tracker-name-chunk';
export * from './packet-header-chunk';
export * from './tracker';
export * from './chunk.js';
export * from './data/data-packet-chunk.js';
export * from './data/data-tracker-chunk.js';
export * from './data/data-tracker-list-chunk.js';
export * from './info/info-packet-chunk.js';
export * from './info/info-system-name-chunk.js';
export * from './info/info-tracker-chunk.js';
export * from './info/info-tracker-list-chunk.js';
export * from './info/info-tracker-name-chunk.js';
export * from './packet-header-chunk.js';
export * from './tracker.js';
+12 -8
View File
@@ -1,10 +1,14 @@
import { Chunk } from '../chunk';
import { PacketHeaderChunk } from '../packet-header-chunk';
import { InfoSystemNameChunk } from './info-system-name-chunk';
import { InfoTrackerListChunk } from './info-tracker-list-chunk';
import { Chunk } from '../chunk.js';
import { PacketHeaderChunk } from '../packet-header-chunk.js';
import { InfoSystemNameChunk } from './info-system-name-chunk.js';
import { InfoTrackerListChunk } from './info-tracker-list-chunk.js';
export interface InfoPacketChunk extends Chunk {
packet_header: PacketHeaderChunk;
system_name: InfoSystemNameChunk;
tracker_list: InfoTrackerListChunk;
export interface InfoPacketChunkData {
packetHeader?: PacketHeaderChunk;
systemName?: InfoSystemNameChunk;
trackerList?: InfoTrackerListChunk;
}
export interface InfoPacketChunk {
chunk: Chunk;
data: InfoPacketChunkData;
}
+8 -3
View File
@@ -1,5 +1,10 @@
import { Chunk } from '../chunk';
import { Chunk } from '../chunk.js';
export interface InfoSystemNameChunk extends Chunk {
system_name: string;
export interface InfoSystemNameChunkData {
systemName: string;
}
export interface InfoSystemNameChunk {
chunk: Chunk;
data: InfoSystemNameChunkData;
}
+9 -4
View File
@@ -1,6 +1,11 @@
import { Chunk } from '../chunk';
import { InfoTrackerNameChunk } from './info-tracker-name-chunk';
import { Chunk } from '../chunk.js';
import { InfoTrackerNameChunk } from './info-tracker-name-chunk.js';
export interface InfoTrackerChunk extends Chunk {
tracker_name?: InfoTrackerNameChunk;
export interface InfoTrackerChunkData {
trackerName: InfoTrackerNameChunk;
}
export interface InfoTrackerChunk {
chunk: Chunk;
data?: InfoTrackerChunkData;
}
+9 -6
View File
@@ -1,8 +1,11 @@
import { Chunk } from '../chunk';
import { InfoTrackerChunk } from './info-tracker-chunk';
import { Chunk } from '../chunk.js';
import { InfoTrackerChunk } from './info-tracker-chunk.js';
export interface InfoTrackerListChunk extends Chunk {
trackers: {
[key: number]: InfoTrackerChunk;
};
export interface InfoTrackerListChunkData {
trackers: InfoTrackerChunk[];
}
export interface InfoTrackerListChunk {
chunk: Chunk;
data: InfoTrackerListChunkData;
}
+8 -3
View File
@@ -1,5 +1,10 @@
import { Chunk } from '../chunk';
import { Chunk } from '../chunk.js';
export interface InfoTrackerNameChunk extends Chunk {
tracker_name: string;
export interface InfoTrackerNameChunkData {
trackerName: string;
}
export interface InfoTrackerNameChunk {
chunk: Chunk;
data: InfoTrackerNameChunkData;
}
+12 -7
View File
@@ -1,9 +1,14 @@
import { Chunk } from './chunk';
import { Chunk } from './chunk.js';
export interface PacketHeaderChunk extends Chunk {
packet_timestamp?: bigint;
version_high?: number;
version_low?: number;
frame_id?: number;
frame_packet_count?: number;
export interface PacketHeaderChunkData {
packetTimestamp: bigint;
versionHigh: number;
versionLow: number;
frameId: number;
framePacketCount: number;
}
export interface PacketHeaderChunk {
chunk: Chunk;
data: PacketHeaderChunkData;
}
+147 -25
View File
@@ -1,23 +1,31 @@
import dataTrackerAccelChunk from '../encoders/data/data-tracker-accel-chunk';
import dataTrackerChunk from '../encoders/data/data-tracker-chunk';
import dataTrackerOriChunk from '../encoders/data/data-tracker-ori-chunk';
import dataTrackerPosChunk from '../encoders/data/data-tracker-pos-chunk';
import dataTrackerSpeedChunk from '../encoders/data/data-tracker-speed-chunk';
import dataTrackerStatusChunk from '../encoders/data/data-tracker-status-chunk';
import dataTrackerTimestampChunk from '../encoders/data/data-tracker-timestamp-chunk';
import dataTrackerTrgtposChunk from '../encoders/data/data-tracker-trgtpos-chunk';
import infoTrackerChunk from '../encoders/info/info-tracker-chunk';
import infoTrackerNameChunk from '../encoders/info/info-tracker-name-chunk';
import dataTrackerAccelChunk from '../encoders/data/data-tracker-accel-chunk.js';
import dataTrackerChunk from '../encoders/data/data-tracker-chunk.js';
import dataTrackerOriChunk from '../encoders/data/data-tracker-ori-chunk.js';
import dataTrackerPosChunk from '../encoders/data/data-tracker-pos-chunk.js';
import dataTrackerSpeedChunk from '../encoders/data/data-tracker-speed-chunk.js';
import dataTrackerStatusChunk from '../encoders/data/data-tracker-status-chunk.js';
import dataTrackerTimestampChunk from '../encoders/data/data-tracker-timestamp-chunk.js';
import dataTrackerTrgtposChunk from '../encoders/data/data-tracker-trgtpos-chunk.js';
import infoTrackerChunk from '../encoders/info/info-tracker-chunk.js';
import infoTrackerNameChunk from '../encoders/info/info-tracker-name-chunk.js';
import { DataTrackerChunk } from './data/data-tracker-chunk.js';
import { InfoTrackerChunk } from './info/info-tracker-chunk.js';
export type XYZData = {
x: number;
y: number;
z: number;
};
export class Tracker {
id: number;
name: string;
pos?: [number, number, number];
speed?: [number, number, number];
ori?: [number, number, number];
pos?: XYZData;
speed?: XYZData;
ori?: XYZData;
validity?: number;
accel?: [number, number, number];
trgtpos?: [number, number, number];
accel?: XYZData;
trgtpos?: XYZData;
timestamp?: bigint;
constructor(id: number, name: string) {
@@ -33,15 +41,45 @@ export class Tracker {
}
setPos(x: number, y: number, z: number) {
this.pos = [x, y, z];
if (this.pos === undefined) {
this.pos = {
x,
y,
z,
};
} else {
this.pos.x = x;
this.pos.y = y;
this.pos.z = z;
}
}
setSpeed(x: number, y: number, z: number) {
this.speed = [x, y, z];
if (this.speed === undefined) {
this.speed = {
x,
y,
z,
};
} else {
this.speed.x = x;
this.speed.y = y;
this.speed.z = z;
}
}
setOri(x: number, y: number, z: number) {
this.ori = [x, y, z];
if (this.ori === undefined) {
this.ori = {
x,
y,
z,
};
} else {
this.ori.x = x;
this.ori.y = y;
this.ori.z = z;
}
}
setStatus(validity: number) {
@@ -49,11 +87,31 @@ export class Tracker {
}
setAccel(x: number, y: number, z: number) {
this.accel = [x, y, z];
if (this.accel === undefined) {
this.accel = {
x,
y,
z,
};
} else {
this.accel.x = x;
this.accel.y = y;
this.accel.z = z;
}
}
setTrgtPos(x: number, y: number, z: number) {
this.trgtpos = [x, y, z];
if (this.trgtpos === undefined) {
this.trgtpos = {
x,
y,
z,
};
} else {
this.trgtpos.x = x;
this.trgtpos.y = y;
this.trgtpos.z = z;
}
}
setTimestamp(timestamp: bigint) {
@@ -64,15 +122,15 @@ export class Tracker {
const fieldChunks: Uint8Array[] = [];
if (this.pos) {
fieldChunks.push(dataTrackerPosChunk(...this.pos));
fieldChunks.push(dataTrackerPosChunk(this.pos.x, this.pos.y, this.pos.z));
}
if (this.speed) {
fieldChunks.push(dataTrackerSpeedChunk(...this.speed));
fieldChunks.push(dataTrackerSpeedChunk(this.speed.x, this.speed.y, this.speed.z));
}
if (this.ori) {
fieldChunks.push(dataTrackerOriChunk(...this.ori));
fieldChunks.push(dataTrackerOriChunk(this.ori.x, this.ori.y, this.ori.z));
}
if (this.validity) {
@@ -80,11 +138,11 @@ export class Tracker {
}
if (this.accel) {
fieldChunks.push(dataTrackerAccelChunk(...this.accel));
fieldChunks.push(dataTrackerAccelChunk(this.accel.x, this.accel.y, this.accel.z));
}
if (this.trgtpos) {
fieldChunks.push(dataTrackerTrgtposChunk(...this.trgtpos));
fieldChunks.push(dataTrackerTrgtposChunk(this.trgtpos.x, this.trgtpos.y, this.trgtpos.z));
}
if (this.timestamp) {
@@ -97,4 +155,68 @@ export class Tracker {
getInfoChunk() {
return infoTrackerChunk(this.id, infoTrackerNameChunk(this.name));
}
updateInfo(infoTrackerChunk: InfoTrackerChunk) {
if (infoTrackerChunk.data) {
this.name = infoTrackerChunk.data.trackerName.data.trackerName;
}
}
updateData(dataTrackerChunk: DataTrackerChunk) {
if (dataTrackerChunk.data.pos) {
this.setPos(dataTrackerChunk.data.pos.data.x, dataTrackerChunk.data.pos.data.y, dataTrackerChunk.data.pos.data.z);
}
if (dataTrackerChunk.data.speed) {
this.setSpeed(
dataTrackerChunk.data.speed.data.x,
dataTrackerChunk.data.speed.data.y,
dataTrackerChunk.data.speed.data.z
);
}
if (dataTrackerChunk.data.ori) {
this.setOri(dataTrackerChunk.data.ori.data.x, dataTrackerChunk.data.ori.data.y, dataTrackerChunk.data.ori.data.z);
}
if (dataTrackerChunk.data.status) {
this.setStatus(dataTrackerChunk.data.status.data.validity);
}
if (dataTrackerChunk.data.accel) {
this.setAccel(
dataTrackerChunk.data.accel.data.x,
dataTrackerChunk.data.accel.data.y,
dataTrackerChunk.data.accel.data.z
);
}
if (dataTrackerChunk.data.trgtpos) {
this.setTrgtPos(
dataTrackerChunk.data.trgtpos.data.x,
dataTrackerChunk.data.trgtpos.data.y,
dataTrackerChunk.data.trgtpos.data.z
);
}
if (dataTrackerChunk.data.timestamp) {
this.setTimestamp(dataTrackerChunk.data.timestamp.data.timestamp);
}
}
}
export function TrackerFromInfo(infoTrackerChunk: InfoTrackerChunk) {
if (infoTrackerChunk.data) {
return new Tracker(infoTrackerChunk.chunk.header.id, infoTrackerChunk.data.trackerName.data.trackerName);
}
return undefined;
}
export function TrackerFromData(dataTrackerChunk: DataTrackerChunk) {
if (dataTrackerChunk.data) {
const tracker = new Tracker(dataTrackerChunk.chunk.header.id, '');
tracker.updateData(dataTrackerChunk);
return tracker;
}
return undefined;
}
+647
View File
@@ -0,0 +1,647 @@
const { deepEqual, throws } = require('assert');
const { describe, it } = require('node:test');
const { Decoders } = require('../dist/cjs/decoders');
const goodTests = [
{
description: 'DataTrackerPosChunk',
bytes: new Uint8Array([0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
decoder: Decoders.DataTrackerXYZChunk,
},
{
description: 'DataTrackerSpeedChunk',
bytes: new Uint8Array([1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 1, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
decoder: Decoders.DataTrackerXYZChunk,
},
{
description: 'DataTrackerOriChunk',
bytes: new Uint8Array([2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 2, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
decoder: Decoders.DataTrackerXYZChunk,
},
{
description: 'DataTrackerStatusChunk',
bytes: new Uint8Array([3, 0, 4, 0, 0, 0, 128, 63]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63]),
header: { dataLen: 4, id: 3, hasSubchunks: false },
},
data: {
validity: 1.0,
},
},
decoder: Decoders.DataTrackerStatusChunk,
},
{
description: 'DataTrackerAccelChunk',
bytes: new Uint8Array([4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 4, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
decoder: Decoders.DataTrackerXYZChunk,
},
{
description: 'DataTrackerTrgtPosChunk',
bytes: new Uint8Array([5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 5, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
decoder: Decoders.DataTrackerXYZChunk,
},
{
description: 'DataTrackerTimestampChunk',
bytes: new Uint8Array([6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0]),
expected: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0]),
header: { dataLen: 8, id: 6, hasSubchunks: false },
},
data: {
timestamp: 1234567890n,
},
},
decoder: Decoders.DataTrackerTimestampChunk,
},
{
description: 'DataTrackerChunk',
bytes: new Uint8Array([
1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0,
0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0,
128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2,
150, 73, 0, 0, 0, 0,
]),
expected: {
chunk: {
chunkData: new Uint8Array([
0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64,
2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0, 128, 63,
0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2, 150, 73,
0, 0, 0, 0,
]),
header: { dataLen: 100, id: 1, hasSubchunks: true },
},
data: {
pos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
speed: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 1, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
ori: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 2, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
status: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63]),
header: { dataLen: 4, id: 3, hasSubchunks: false },
},
data: {
validity: 1.0,
},
},
accel: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 4, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
trgtpos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 5, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
timestamp: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0]),
header: { dataLen: 8, id: 6, hasSubchunks: false },
},
data: {
timestamp: 1234567890n,
},
},
},
},
decoder: Decoders.DataTrackerChunk,
},
{
description: 'DataTrackerListChunk',
bytes: new Uint8Array([
1, 0, 104, 128, 1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63,
0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0,
12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8,
0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
expected: {
chunk: {
chunkData: new Uint8Array([
1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0,
64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12,
0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8,
0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
header: { dataLen: 104, id: 1, hasSubchunks: true },
},
data: {
trackers: [
{
chunk: {
chunkData: new Uint8Array([
0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0,
64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0,
0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0,
8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
header: { dataLen: 100, id: 1, hasSubchunks: true },
},
data: {
pos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
speed: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 1, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
ori: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 2, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
status: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63]),
header: { dataLen: 4, id: 3, hasSubchunks: false },
},
data: {
validity: 1.0,
},
},
accel: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 4, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
trgtpos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 5, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
timestamp: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0]),
header: { dataLen: 8, id: 6, hasSubchunks: false },
},
data: {
timestamp: 1234567890n,
},
},
},
},
],
},
},
decoder: Decoders.DataTrackerListChunk,
},
{
description: 'DataPacketChunk',
bytes: new Uint8Array([
85, 103, 124, 128, 0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 104, 128, 1, 0, 100, 128, 0, 0,
12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12,
0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64,
0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
expected: {
chunk: {
chunkData: new Uint8Array([
0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 104, 128, 1, 0, 100, 128, 0, 0, 12, 0, 0, 0,
128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0,
128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0,
64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
header: { dataLen: 124, id: 26453, hasSubchunks: true },
},
data: {
packetHeader: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
packetTimestamp: 1234567890n,
versionHigh: 2,
versionLow: 3,
frameId: 1,
framePacketCount: 123,
},
},
trackerList: {
chunk: {
chunkData: new Uint8Array([
1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0,
0, 64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4,
0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64,
6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
header: { dataLen: 104, id: 1, hasSubchunks: true },
},
data: {
trackers: [
{
chunk: {
chunkData: new Uint8Array([
0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0,
0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0,
12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64,
64, 6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
header: { dataLen: 100, id: 1, hasSubchunks: true },
},
data: {
pos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
speed: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 1, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
ori: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 2, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
status: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63]),
header: { dataLen: 4, id: 3, hasSubchunks: false },
},
data: {
validity: 1.0,
},
},
accel: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 4, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
trgtpos: {
chunk: {
chunkData: new Uint8Array([0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
header: { dataLen: 12, id: 5, hasSubchunks: false },
},
data: {
x: 1.0,
y: 2.0,
z: 3.0,
},
},
timestamp: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0]),
header: { dataLen: 8, id: 6, hasSubchunks: false },
},
data: {
timestamp: 1234567890n,
},
},
},
},
],
},
},
},
},
decoder: Decoders.DataPacketChunk,
},
{
description: 'InfoTrackerNameChunk',
bytes: new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
expected: {
chunk: {
chunkData: new Uint8Array([84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 9, id: 0, hasSubchunks: false },
},
data: {
trackerName: 'Tracker 1',
},
},
decoder: Decoders.InfoTrackerNameChunk,
},
{
description: 'InfoSystemNameChunk',
bytes: new Uint8Array([1, 0, 10, 0, 80, 83, 78, 32, 83, 101, 114, 118, 101, 114]),
expected: {
chunk: {
chunkData: new Uint8Array([80, 83, 78, 32, 83, 101, 114, 118, 101, 114]),
header: { dataLen: 10, id: 1, hasSubchunks: false },
},
data: {
systemName: 'PSN Server',
},
},
decoder: Decoders.InfoSystemNameChunk,
},
{
description: 'InfoTrackerChunk',
bytes: new Uint8Array([1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
expected: {
chunk: {
chunkData: new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 13, id: 1, hasSubchunks: true },
},
data: {
trackerName: {
chunk: {
chunkData: new Uint8Array([84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 9, id: 0, hasSubchunks: false },
},
data: {
trackerName: 'Tracker 1',
},
},
},
},
decoder: Decoders.InfoTrackerChunk,
},
{
description: 'InfoTrackerListChunk',
bytes: new Uint8Array([2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
expected: {
chunk: {
chunkData: new Uint8Array([1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 17, id: 2, hasSubchunks: true },
},
data: {
trackers: [
{
chunk: {
chunkData: new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 13, id: 1, hasSubchunks: true },
},
data: {
trackerName: {
chunk: {
chunkData: new Uint8Array([84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 9, id: 0, hasSubchunks: false },
},
data: {
trackerName: 'Tracker 1',
},
},
},
},
],
},
},
decoder: Decoders.InfoTrackerListChunk,
},
{
description: 'PacketHeaderChunk',
bytes: new Uint8Array([0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
expected: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
packetTimestamp: 1234567890n,
versionHigh: 2,
versionLow: 3,
frameId: 1,
framePacketCount: 123,
},
},
decoder: Decoders.PacketHeaderChunk,
},
{
description: 'InfoPacketChunk',
bytes: new Uint8Array([
86, 103, 51, 128, 0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 10, 0, 80, 83, 78, 32, 83, 101,
114, 118, 101, 114, 2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49,
]),
expected: {
chunk: {
chunkData: new Uint8Array([
0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 10, 0, 80, 83, 78, 32, 83, 101, 114, 118, 101,
114, 2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49,
]),
header: { dataLen: 51, id: 26454, hasSubchunks: true },
},
data: {
packetHeader: {
chunk: {
chunkData: new Uint8Array([210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
header: { dataLen: 12, id: 0, hasSubchunks: false },
},
data: {
packetTimestamp: 1234567890n,
versionHigh: 2,
versionLow: 3,
frameId: 1,
framePacketCount: 123,
},
},
systemName: {
chunk: {
chunkData: new Uint8Array([80, 83, 78, 32, 83, 101, 114, 118, 101, 114]),
header: { dataLen: 10, id: 1, hasSubchunks: false },
},
data: {
systemName: 'PSN Server',
},
},
trackerList: {
chunk: {
chunkData: new Uint8Array([1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 17, id: 2, hasSubchunks: true },
},
data: {
trackers: [
{
chunk: {
chunkData: new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 13, id: 1, hasSubchunks: true },
},
data: {
trackerName: {
chunk: {
chunkData: new Uint8Array([84, 114, 97, 99, 107, 101, 114, 32, 49]),
header: { dataLen: 9, id: 0, hasSubchunks: false },
},
data: {
trackerName: 'Tracker 1',
},
},
},
},
],
},
},
},
},
decoder: Decoders.InfoPacketChunk,
},
];
describe('PSN Bytes Decoding', () => {
goodTests.forEach((bytesTest) => {
it(bytesTest.description, () => {
const decoded = bytesTest.decoder(bytesTest.bytes);
deepEqual(decoded, bytesTest.expected);
});
});
});
// TODO(jwetzell): add error tests
const badTests = [];
describe('PSN Bytes Decoding Throws', () => {
badTests.forEach((bytesTest) => {
it(bytesTest.description, () => {
throws(() => {
bytesTest.decoder(bytesTest.bytes);
}, bytesTest.throwsMessage);
});
});
});
+152
View File
@@ -0,0 +1,152 @@
const { deepEqual, throws, equal } = require('assert');
const { describe, it } = require('node:test');
const { Encoders } = require('../dist/cjs/encoders');
const goodTests = [
{
description: 'DataTrackerPosChunk',
expected: new Uint8Array([0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
bytes: Encoders.DataTrackerPosChunk(1.0, 2.0, 3.0),
},
{
description: 'DataTrackerSpeedChunk',
expected: new Uint8Array([1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
bytes: Encoders.DataTrackerSpeedChunk(1.0, 2.0, 3.0),
},
{
description: 'DataTrackerOriChunk',
expected: new Uint8Array([2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
bytes: Encoders.DataTrackerOriChunk(1.0, 2.0, 3.0),
},
{
description: 'DataTrackerStatusChunk',
expected: new Uint8Array([3, 0, 4, 0, 0, 0, 128, 63]),
bytes: Encoders.DataTrackerStatusChunk(1.0),
},
{
description: 'DataTrackerAccelChunk',
expected: new Uint8Array([4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
bytes: Encoders.DataTrackerAccelChunk(1.0, 2.0, 3.0),
},
{
description: 'DataTrackerTrgtposChunk',
expected: new Uint8Array([5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
bytes: Encoders.DataTrackerTrgtposChunk(1.0, 2.0, 3.0),
},
{
description: 'DataTrackerTimestampChunk',
expected: new Uint8Array([6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0]),
bytes: Encoders.DataTrackerTimestampChunk(1234567890n),
},
{
description: 'DataTrackerChunk',
expected: new Uint8Array([
1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0,
0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0,
128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2,
150, 73, 0, 0, 0, 0,
]),
bytes: Encoders.DataTrackerChunk(1, [
new Uint8Array([0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
new Uint8Array([1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
new Uint8Array([2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
new Uint8Array([3, 0, 4, 0, 0, 0, 128, 63]),
new Uint8Array([4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
new Uint8Array([5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64]),
new Uint8Array([6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0]),
]),
},
{
description: 'DataTrackerListChunk',
expected: new Uint8Array([
1, 0, 104, 128, 1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63,
0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0,
12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8,
0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
bytes: Encoders.DataTrackerListChunk([
new Uint8Array([
1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64,
0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0,
0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210,
2, 150, 73, 0, 0, 0, 0,
]),
]),
},
{
description: 'DataPacketChunk',
expected: new Uint8Array([
85, 103, 124, 128, 0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 104, 128, 1, 0, 100, 128, 0, 0,
12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12,
0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63, 4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64,
0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6, 0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
]),
bytes: Encoders.DataPacketChunk(
new Uint8Array([0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
new Uint8Array([
1, 0, 104, 128, 1, 0, 100, 128, 0, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 1, 0, 12, 0, 0, 0, 128,
63, 0, 0, 0, 64, 0, 0, 64, 64, 2, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 3, 0, 4, 0, 0, 0, 128, 63,
4, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 5, 0, 12, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 6,
0, 8, 0, 210, 2, 150, 73, 0, 0, 0, 0,
])
),
},
{
description: 'InfoTrackerNameChunk',
expected: new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
bytes: Encoders.InfoTrackerNameChunk('Tracker 1'),
},
{
description: 'InfoSystemNameChunk',
expected: new Uint8Array([1, 0, 10, 0, 80, 83, 78, 32, 83, 101, 114, 118, 101, 114]),
bytes: Encoders.InfoSystemNameChunk('PSN Server'),
},
{
description: 'InfoTrackerChunk',
expected: new Uint8Array([1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
bytes: Encoders.InfoTrackerChunk(1, new Uint8Array([0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49])),
},
{
description: 'InfoTrackerListChunk',
expected: new Uint8Array([2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
bytes: Encoders.InfoTrackerListChunk([
new Uint8Array([1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49]),
]),
},
{
description: 'PacketHeaderChunk',
expected: new Uint8Array([0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
bytes: Encoders.PacketHeaderChunk(1234567890n, 2, 3, 1, 123),
},
{
description: 'InfoPacketChunk',
expected: new Uint8Array([
86, 103, 51, 128, 0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123, 1, 0, 10, 0, 80, 83, 78, 32, 83, 101,
114, 118, 101, 114, 2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49,
]),
bytes: Encoders.InfoPacketChunk(
new Uint8Array([0, 0, 12, 0, 210, 2, 150, 73, 0, 0, 0, 0, 2, 3, 1, 123]),
new Uint8Array([1, 0, 10, 0, 80, 83, 78, 32, 83, 101, 114, 118, 101, 114]),
new Uint8Array([2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49])
),
},
];
describe('PSN Message Encoding', () => {
goodTests.forEach((messageTest) => {
it(messageTest.description, () => {
deepEqual(messageTest.bytes, messageTest.expected);
});
});
});
//TODO(jwetzell): add tests that handle errors
const badTests = [];
describe('PSN Message Encoding Throws', () => {
badTests.forEach((messageTest) => {
it(messageTest.description, () => {
throws(() => {}, messageTest.throwsMessage);
});
});
});