Skip to content

Commit

Permalink
NORSUB-eMRU: v1.1.0
Browse files Browse the repository at this point in the history
NORSUB-eMRU: v1.1.0 Update deps isolating from validators like Valibot
  • Loading branch information
crisconru authored Jul 9, 2024
2 parents b1c0282 + 9941864 commit 3971074
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 67 deletions.
9 changes: 5 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions packages/norsub-emru/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@coremarine/norsub-emru",
"version": "1.0.9",
"version": "1.1.0",
"description": "Library to work with eMRU devices of NorSub company",
"author": "Core Marine",
"license": "MIT",
Expand Down Expand Up @@ -52,11 +52,12 @@
"test:coverage": "vitest run --coverage"
},
"dependencies": {
"@coremarine/nmea-parser": ">=1.6.14",
"@schemasjs/valibot-numbers": "^1.0.8"
"@coremarine/nmea-parser": "^1.7.0",
"@schemasjs/valibot-numbers": "^1.0.13",
"@schemasjs/validator": "^1.0.1"
},
"peerDependencies": {
"valibot": ">=0.30.0"
"valibot": ">=0.31.0"
},
"ts-standard": {
"ignore": [
Expand Down
16 changes: 7 additions & 9 deletions packages/norsub-emru/src/parser.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
import * as v from 'valibot'
import { MAX_CHARACTERS, NMEAParser, ProtocolsInputSchema } from '@coremarine/nmea-parser'
import type { FieldParsed, NMEALike, NMEASentence, ProtocolOutput, ProtocolsInput, Sentence } from '@coremarine/nmea-parser'
import { getUint32 } from './utils'
import { MAX_CHARACTERS, NMEAParser, ProtocolsInputSchema } from '@coremarine/nmea-parser'
import { PROTOCOLS } from './norsub'
import { BooleanSchema, UnsignedIntegerSchema } from './schemas'
import { getStatus } from './status'
import { NorsubSentence } from './types'
import { BooleanSchema } from './schemas'
import { UnsignedIntegerSchema } from '@schemasjs/valibot-numbers'
import { PROTOCOLS } from './norsub'
import { getUint32 } from './utils'

export class NorsubParser {
// Parser
protected _parser: NMEAParser = new NMEAParser()
// Memory - Buffer
get memory (): typeof this._parser.memory { return this._parser.memory }
set memory (mem: boolean) { this._parser.memory = v.parse(BooleanSchema, mem) }
set memory (mem: boolean) { this._parser.memory = BooleanSchema.parse(mem) }
get bufferLimit (): typeof this._parser.bufferLimit { return this._parser.bufferLimit }
set bufferLimit (limit: number) { this._parser.bufferLimit = v.parse(UnsignedIntegerSchema, limit) }
set bufferLimit (limit: number) { this._parser.bufferLimit = UnsignedIntegerSchema.parse(limit) }

constructor (memory: boolean = true, limit: number = MAX_CHARACTERS) {
this.memory = memory
this.bufferLimit = limit
const parsed = v.parse(ProtocolsInputSchema, PROTOCOLS)
const parsed = ProtocolsInputSchema.parse(PROTOCOLS)
this.addProtocols(parsed)
}

Expand Down
90 changes: 50 additions & 40 deletions packages/norsub-emru/src/schemas.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
import * as v from 'valibot'
import { Uint16Schema, Uint32Schema } from '@schemasjs/valibot-numbers'
import { ValibotValidator } from '@schemasjs/validator'
import {
UnsignedIntegerSchema as ValibotUnsignedIntegerSchema,
Uint16Schema as ValibotUint16Schema,
Uint32Schema as ValibotUint32Schema
} from '@schemasjs/valibot-numbers'

const ValibotBooleanSchema = v.boolean()
export const BooleanSchema = ValibotValidator<v.InferInput<typeof ValibotBooleanSchema>>(ValibotBooleanSchema)

export const UnsignedIntegerSchema = ValibotValidator<v.InferInput<typeof ValibotUnsignedIntegerSchema>>(ValibotUnsignedIntegerSchema)

export const BooleanSchema = v.boolean()
// STATUS
export const StatusInputSchema = v.object({
status: v.optional(Uint32Schema),
status_a: v.optional(Uint16Schema),
status_b: v.optional(Uint16Schema)
const ValibotStatusInputSchema = v.object({
status: v.optional(ValibotUint32Schema),
status_a: v.optional(ValibotUint16Schema),
status_b: v.optional(ValibotUint16Schema)
})

export const StatusInputSchema = ValibotValidator<v.InferInput<typeof ValibotStatusInputSchema>>(ValibotStatusInputSchema)
/** STATUS
* Bit - Parameter - Description
* 00 - MAIN_OK - 1 = no errors or warnings, initialization done. Everything OK.
Expand Down Expand Up @@ -44,65 +53,66 @@ export const StatusInputSchema = v.object({
* 30 - AID_VERTICAL_VALID - 1 = vertical position is valid and used in the observer.
* 31 - AID_HORIZONTAL_VALID - 1 = horizontal position is valid and used in the observer.
**/
export const StatusSchema = v.object({
const ValibotStatusSchema = v.object({
main: v.object({
ok: BooleanSchema,
health: BooleanSchema
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema
}),
system: v.object({
ok: BooleanSchema,
health: BooleanSchema,
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema,
synchronized: v.object({
time: BooleanSchema,
clock: BooleanSchema
time: ValibotBooleanSchema,
clock: ValibotBooleanSchema
}),
cpu: BooleanSchema
cpu: ValibotBooleanSchema
}),
sensor: v.object({
ok: BooleanSchema,
health: BooleanSchema,
limits: BooleanSchema,
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema,
limits: ValibotBooleanSchema,
environmental: v.object({
vibration: BooleanSchema,
temperature: BooleanSchema
vibration: ValibotBooleanSchema,
temperature: ValibotBooleanSchema
})
}),
algorithms: v.object({
ok: BooleanSchema,
health: BooleanSchema,
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema,
initialization: v.object({
observer: BooleanSchema,
heading: BooleanSchema
observer: ValibotBooleanSchema,
heading: ValibotBooleanSchema
}),
roll_pitch: v.object({
ok: BooleanSchema,
health: BooleanSchema
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema
}),
heading: v.object({
ok: BooleanSchema,
health: BooleanSchema
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema
}),
surge_sway: v.object({
ok: BooleanSchema,
health: BooleanSchema
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema
}),
heave: v.object({
ok: BooleanSchema,
health: BooleanSchema
ok: ValibotBooleanSchema,
health: ValibotBooleanSchema
})
}),
aiding: v.object({
received: v.object({
position: BooleanSchema,
velocity: BooleanSchema,
heading: BooleanSchema
position: ValibotBooleanSchema,
velocity: ValibotBooleanSchema,
heading: ValibotBooleanSchema
}),
valid: v.object({
position: BooleanSchema,
velocity: BooleanSchema,
heading: BooleanSchema,
vertical: BooleanSchema,
horizontal: BooleanSchema
position: ValibotBooleanSchema,
velocity: ValibotBooleanSchema,
heading: ValibotBooleanSchema,
vertical: ValibotBooleanSchema,
horizontal: ValibotBooleanSchema
})
})
})
export const StatusSchema = ValibotValidator<v.InferInput<typeof ValibotStatusSchema>>(ValibotStatusSchema)
3 changes: 1 addition & 2 deletions packages/norsub-emru/src/status.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Uint32 } from '@schemasjs/valibot-numbers'
import * as v from 'valibot'
import { StatusInputSchema } from './schemas'
import { Status, StatusInput } from './types'
import { getBit, getUint32 } from './utils'
Expand Down Expand Up @@ -105,7 +104,7 @@ const _getStatus = (input: Uint32): Status => {
}

export const getStatus = (input: StatusInput): Status | null => {
if (!v.is(StatusInputSchema, input)) { return null }
if (!StatusInputSchema.is(input)) { return null }
const { status, status_a: statusA, status_b: statusB } = input
if (status !== undefined) { return _getStatus(status) }
if (statusA !== undefined && statusB !== undefined) {
Expand Down
7 changes: 3 additions & 4 deletions packages/norsub-emru/src/types.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import * as v from 'valibot'
import { StatusInputSchema, StatusSchema } from './schemas'
import type { Data, FieldParsed, NMEASentence } from '@coremarine/nmea-parser'
import { StatusInputSchema, StatusSchema } from './schemas'

/** STATUS
* Bit - Parameter - Description
Expand Down Expand Up @@ -37,8 +36,8 @@ import type { Data, FieldParsed, NMEASentence } from '@coremarine/nmea-parser'
* 30 - AID_VERTICAL_VALID - 1 = vertical position is valid and used in the observer.
* 31 - AID_HORIZONTAL_VALID - 1 = horizontal position is valid and used in the observer.
**/
export type Status = v.Input<typeof StatusSchema>
export type StatusInput = v.Input<typeof StatusInputSchema>
export type Status = ReturnType<typeof StatusSchema.parse>
export type StatusInput = ReturnType<typeof StatusInputSchema.parse>

export type NorsubFieldData = Data | Status

Expand Down
3 changes: 1 addition & 2 deletions packages/norsub-emru/tests/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { describe, test, expect } from 'vitest'
import * as v from 'valibot'
import type { ProtocolOutput, Sentence } from '@coremarine/nmea-parser'
import { NorsubParser } from '../src'
import { StatusSchema } from '../src/schemas'
Expand Down Expand Up @@ -34,7 +33,7 @@ describe('Parser', () => {
const norsub = parsed[0]
if (norsub.sentence.includes('PNORSUB')) {
const statusField = (norsub.fields.slice(-1))[0].metadata
expect(v.is(StatusSchema, statusField)).toBeTruthy()
expect(StatusSchema.is(statusField)).toBeTruthy()
}
}
}
Expand Down
3 changes: 1 addition & 2 deletions packages/norsub-emru/tests/status.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { test, expect } from 'vitest'
import * as v from 'valibot'
import { Status } from '../src/types'
import { getStatus } from '../src/status'
import { StatusSchema } from '../src/schemas'
Expand Down Expand Up @@ -78,7 +77,7 @@ test('get Status from status full', () => {
}
const result = getStatus({ status })
expect(result).not.toBeNull()
expect(v.is(StatusSchema, result)).toBeTruthy()
expect(StatusSchema.is(result)).toBeTruthy()
expect(result).toEqual(expected)
})

Expand Down

0 comments on commit 3971074

Please sign in to comment.