@slackwater/database 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/NOTICE +23 -0
- package/README.md +190 -0
- package/dist/browser/index.d.ts +283 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +2 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/generated/slackwater.tcdb +0 -0
- package/dist/node/index.d.ts +283 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +2 -0
- package/dist/node/index.js.map +1 -0
- package/dist/worker/index.d.ts +283 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +2 -0
- package/dist/worker/index.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/attribution.ts","../../src/generated/fbs/slackwater/constituent.ts","../../src/generated/fbs/slackwater/current-offsets.ts","../../src/generated/fbs/slackwater/tide-derived-current.ts","../../src/generated/fbs/slackwater/current.ts","../../src/generated/fbs/slackwater/datum.ts","../../src/generated/fbs/slackwater/epoch.ts","../../src/generated/fbs/slackwater/license.ts","../../src/generated/fbs/slackwater/quality-factors.ts","../../src/generated/fbs/slackwater/quality.ts","../../src/generated/fbs/slackwater/source.ts","../../src/generated/fbs/slackwater/tide-offsets.ts","../../src/generated/fbs/slackwater/station.ts","../../src/generated/fbs/slackwater/station-route.ts","../../src/generated/fbs/slackwater/root.ts","../../src/database/bytes.browser.ts","../../src/database/reader.ts","../../src/stations.ts","../../src/routes.ts","../../src/search/geo.ts","../../src/search/text.ts","../../src/search/index.ts","../../../../node_modules/country-code-lookup/index.js","../../src/database/builder.ts"],"sourcesContent":["/**\n * The project half of every notice. A station's full notice opens with this,\n * then adds whatever its source and licence require.\n */\nexport const PROJECT_CREDIT =\n \"Slackwater database (https://github.com/openwatersio/slackwater-database)\";\n\n/** Where a redistributor is pointed to find what this project changed. */\nexport const MODIFICATIONS_URL =\n \"https://github.com/openwatersio/slackwater-database#modifications-to-source-data\";\n\n/**\n * Keyed by `source.name`; `null` means the source requires no credit of its\n * own. Sources that add nothing are listed anyway so that a new source is a\n * decision rather than an omission — test/attribution.test.ts fails on one\n * that is missing. These strings are the README's Attribution section, and the\n * two must not drift.\n */\nconst SOURCE_CREDITS: Record<string, string | null> = {\n \"Kartverket / Norwegian Mapping Authority, Hydrographic Service\":\n \"Source: Kartverket / Norwegian Mapping Authority, Hydrographic Service\",\n \"TICON-4\":\n \"Source: Hart-Davis, M., Dettmering, D., Seitz, F. (2025), TICON-4: TIdal CONstants based on GESLA-4 sea-level records, SEANOE, https://doi.org/10.17882/109129\",\n // Public domain: credit is welcome, so not imposed on consumers.\n \"US National Oceanic and Atmospheric Administration\": null,\n // Names the operating agency of a record authored here under MIT, not a\n // licensor of redistributed data. See metadata/PROVENANCE.md.\n \"Canadian Hydrographic Service\": null,\n};\n\n/**\n * Display names for the licences that oblige a redistributor to pass the\n * licence on. A licence absent here (public domain, this project's own MIT\n * records) imposes no notice, so it adds nothing to the station's credit.\n */\nconst LICENSE_NAMES: Record<string, string> = {\n \"cc-by-4.0\": \"CC BY 4.0\",\n \"cc-by-nc-4.0\": \"CC BY-NC 4.0\",\n};\n\n/** Whether a source name has a credit decision recorded. */\nexport function isKnownSource(sourceName: string): boolean {\n return sourceName in SOURCE_CREDITS;\n}\n\n/**\n * Assemble a station's complete notice, so displaying it is the whole of a\n * consumer's obligation. Under a Creative Commons licence that means the\n * creator credit, the licence and its URI, and an indication that the material\n * was modified — the three things CC BY 4.0 section 3(a)(1) requires be passed\n * on. Licence is taken per station rather than per source because it varies\n * within one source: TICON stations relayed from CMEMS are CC BY-NC while the\n * rest are CC BY.\n */\nexport function attributionFor(\n sourceName: string | undefined,\n license: { type: string; url: string } | undefined,\n): string {\n const parts = [PROJECT_CREDIT];\n\n const credit = sourceName ? SOURCE_CREDITS[sourceName] : null;\n if (credit) parts.push(credit);\n\n const licenseName = license && LICENSE_NAMES[license.type];\n if (licenseName) {\n parts.push(`Licensed ${licenseName} (${license!.url})`);\n parts.push(`Modified: see ${MODIFICATIONS_URL}`);\n }\n\n return parts.join(\". \");\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n/**\n * 12 bytes, contiguous per station. Amplitude in metres (tides) or knots\n * (currents); phase in degrees. float32 keeps 7 significant digits, more\n * than any publisher's millimetre / 0.1° precision.\n */\nexport class Constituent {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Constituent {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nname():number {\n return this.bb!.readUint16(this.bb_pos);\n}\n\namplitude():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nphase():number {\n return this.bb!.readFloat32(this.bb_pos + 8);\n}\n\nstatic sizeOf():number {\n return 12;\n}\n\nstatic createConstituent(builder:flatbuffers.Builder, name: number, amplitude: number, phase: number):flatbuffers.Offset {\n builder.prep(4, 12);\n builder.writeFloat32(phase);\n builder.writeFloat32(amplitude);\n builder.pad(2);\n builder.writeInt16(name);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n/**\n * Subordinate current station: NOAA-style corrections against `reference`.\n * Offsets in minutes, ratios dimensionless.\n */\nexport class CurrentOffsets {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):CurrentOffsets {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCurrentOffsets(bb:flatbuffers.ByteBuffer, obj?:CurrentOffsets):CurrentOffsets {\n return (obj || new CurrentOffsets()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCurrentOffsets(bb:flatbuffers.ByteBuffer, obj?:CurrentOffsets):CurrentOffsets {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new CurrentOffsets()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nreference():string|null\nreference(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nreference(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nslackBeforeFlood():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nslackBeforeEbb():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nfloodTime():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nebbTime():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nfloodSpeedRatio():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nebbSpeedRatio():number {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nslackBeforeFloodMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nslackBeforeEbbMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nfloodTimeMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nebbTimeMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nfloodSpeedRatioMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 26);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nebbSpeedRatioMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startCurrentOffsets(builder:flatbuffers.Builder) {\n builder.startObject(13);\n}\n\nstatic addReference(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, referenceOffset, 0);\n}\n\nstatic addSlackBeforeFlood(builder:flatbuffers.Builder, slackBeforeFlood:number) {\n builder.addFieldInt32(1, slackBeforeFlood, 0);\n}\n\nstatic addSlackBeforeEbb(builder:flatbuffers.Builder, slackBeforeEbb:number) {\n builder.addFieldInt32(2, slackBeforeEbb, 0);\n}\n\nstatic addFloodTime(builder:flatbuffers.Builder, floodTime:number) {\n builder.addFieldInt32(3, floodTime, 0);\n}\n\nstatic addEbbTime(builder:flatbuffers.Builder, ebbTime:number) {\n builder.addFieldInt32(4, ebbTime, 0);\n}\n\nstatic addFloodSpeedRatio(builder:flatbuffers.Builder, floodSpeedRatio:number) {\n builder.addFieldFloat32(5, floodSpeedRatio, 0.0);\n}\n\nstatic addEbbSpeedRatio(builder:flatbuffers.Builder, ebbSpeedRatio:number) {\n builder.addFieldFloat32(6, ebbSpeedRatio, 0.0);\n}\n\nstatic addSlackBeforeFloodMissing(builder:flatbuffers.Builder, slackBeforeFloodMissing:boolean) {\n builder.addFieldInt8(7, +slackBeforeFloodMissing, +false);\n}\n\nstatic addSlackBeforeEbbMissing(builder:flatbuffers.Builder, slackBeforeEbbMissing:boolean) {\n builder.addFieldInt8(8, +slackBeforeEbbMissing, +false);\n}\n\nstatic addFloodTimeMissing(builder:flatbuffers.Builder, floodTimeMissing:boolean) {\n builder.addFieldInt8(9, +floodTimeMissing, +false);\n}\n\nstatic addEbbTimeMissing(builder:flatbuffers.Builder, ebbTimeMissing:boolean) {\n builder.addFieldInt8(10, +ebbTimeMissing, +false);\n}\n\nstatic addFloodSpeedRatioMissing(builder:flatbuffers.Builder, floodSpeedRatioMissing:boolean) {\n builder.addFieldInt8(11, +floodSpeedRatioMissing, +false);\n}\n\nstatic addEbbSpeedRatioMissing(builder:flatbuffers.Builder, ebbSpeedRatioMissing:boolean) {\n builder.addFieldInt8(12, +ebbSpeedRatioMissing, +false);\n}\n\nstatic endCurrentOffsets(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // reference\n return offset;\n}\n\nstatic createCurrentOffsets(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset, slackBeforeFlood:number, slackBeforeEbb:number, floodTime:number, ebbTime:number, floodSpeedRatio:number, ebbSpeedRatio:number, slackBeforeFloodMissing:boolean, slackBeforeEbbMissing:boolean, floodTimeMissing:boolean, ebbTimeMissing:boolean, floodSpeedRatioMissing:boolean, ebbSpeedRatioMissing:boolean):flatbuffers.Offset {\n CurrentOffsets.startCurrentOffsets(builder);\n CurrentOffsets.addReference(builder, referenceOffset);\n CurrentOffsets.addSlackBeforeFlood(builder, slackBeforeFlood);\n CurrentOffsets.addSlackBeforeEbb(builder, slackBeforeEbb);\n CurrentOffsets.addFloodTime(builder, floodTime);\n CurrentOffsets.addEbbTime(builder, ebbTime);\n CurrentOffsets.addFloodSpeedRatio(builder, floodSpeedRatio);\n CurrentOffsets.addEbbSpeedRatio(builder, ebbSpeedRatio);\n CurrentOffsets.addSlackBeforeFloodMissing(builder, slackBeforeFloodMissing);\n CurrentOffsets.addSlackBeforeEbbMissing(builder, slackBeforeEbbMissing);\n CurrentOffsets.addFloodTimeMissing(builder, floodTimeMissing);\n CurrentOffsets.addEbbTimeMissing(builder, ebbTimeMissing);\n CurrentOffsets.addFloodSpeedRatioMissing(builder, floodSpeedRatioMissing);\n CurrentOffsets.addEbbSpeedRatioMissing(builder, ebbSpeedRatioMissing);\n return CurrentOffsets.endCurrentOffsets(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n/**\n * Present only when Kind == Current.\n */\nexport class TideDerivedCurrent {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):TideDerivedCurrent {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsTideDerivedCurrent(bb:flatbuffers.ByteBuffer, obj?:TideDerivedCurrent):TideDerivedCurrent {\n return (obj || new TideDerivedCurrent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsTideDerivedCurrent(bb:flatbuffers.ByteBuffer, obj?:TideDerivedCurrent):TideDerivedCurrent {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new TideDerivedCurrent()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nreference():string|null\nreference(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nreference(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nhighWaterLagMinutes():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nlowWaterLagMinutes():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nstatic startTideDerivedCurrent(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addReference(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, referenceOffset, 0);\n}\n\nstatic addHighWaterLagMinutes(builder:flatbuffers.Builder, highWaterLagMinutes:number) {\n builder.addFieldInt32(1, highWaterLagMinutes, 0);\n}\n\nstatic addLowWaterLagMinutes(builder:flatbuffers.Builder, lowWaterLagMinutes:number) {\n builder.addFieldInt32(2, lowWaterLagMinutes, 0);\n}\n\nstatic endTideDerivedCurrent(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // reference\n return offset;\n}\n\nstatic createTideDerivedCurrent(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset, highWaterLagMinutes:number, lowWaterLagMinutes:number):flatbuffers.Offset {\n TideDerivedCurrent.startTideDerivedCurrent(builder);\n TideDerivedCurrent.addReference(builder, referenceOffset);\n TideDerivedCurrent.addHighWaterLagMinutes(builder, highWaterLagMinutes);\n TideDerivedCurrent.addLowWaterLagMinutes(builder, lowWaterLagMinutes);\n return TideDerivedCurrent.endTideDerivedCurrent(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { CurrentOffsets } from '../slackwater/current-offsets.ts';\nimport { TideDerivedCurrent } from '../slackwater/tide-derived-current.ts';\n\n\nexport class Current {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Current {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsCurrent(bb:flatbuffers.ByteBuffer, obj?:Current):Current {\n return (obj || new Current()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsCurrent(bb:flatbuffers.ByteBuffer, obj?:Current):Current {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Current()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nfloodDirection():number {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nebbDirection():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nmeanFlow():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\n/**\n * Station.id of the tide station whose extremes pair with this current, if any.\n */\ntideReference():string|null\ntideReference(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ntideReference(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\noffsets(obj?:CurrentOffsets):CurrentOffsets|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new CurrentOffsets()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nmagnitudeNote():string|null\nmagnitudeNote(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nmagnitudeNote(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nderived(obj?:TideDerivedCurrent):TideDerivedCurrent|null {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? (obj || new TideDerivedCurrent()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nfloodDirectionMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nebbDirectionMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nmeanFlowMissing():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startCurrent(builder:flatbuffers.Builder) {\n builder.startObject(10);\n}\n\nstatic addFloodDirection(builder:flatbuffers.Builder, floodDirection:number) {\n builder.addFieldFloat32(0, floodDirection, 0.0);\n}\n\nstatic addEbbDirection(builder:flatbuffers.Builder, ebbDirection:number) {\n builder.addFieldFloat32(1, ebbDirection, 0.0);\n}\n\nstatic addMeanFlow(builder:flatbuffers.Builder, meanFlow:number) {\n builder.addFieldFloat32(2, meanFlow, 0.0);\n}\n\nstatic addTideReference(builder:flatbuffers.Builder, tideReferenceOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, tideReferenceOffset, 0);\n}\n\nstatic addOffsets(builder:flatbuffers.Builder, offsetsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, offsetsOffset, 0);\n}\n\nstatic addMagnitudeNote(builder:flatbuffers.Builder, magnitudeNoteOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, magnitudeNoteOffset, 0);\n}\n\nstatic addDerived(builder:flatbuffers.Builder, derivedOffset:flatbuffers.Offset) {\n builder.addFieldOffset(6, derivedOffset, 0);\n}\n\nstatic addFloodDirectionMissing(builder:flatbuffers.Builder, floodDirectionMissing:boolean) {\n builder.addFieldInt8(7, +floodDirectionMissing, +false);\n}\n\nstatic addEbbDirectionMissing(builder:flatbuffers.Builder, ebbDirectionMissing:boolean) {\n builder.addFieldInt8(8, +ebbDirectionMissing, +false);\n}\n\nstatic addMeanFlowMissing(builder:flatbuffers.Builder, meanFlowMissing:boolean) {\n builder.addFieldInt8(9, +meanFlowMissing, +false);\n}\n\nstatic endCurrent(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Datum {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Datum {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nname():number {\n return this.bb!.readUint16(this.bb_pos);\n}\n\nvalue():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nstatic sizeOf():number {\n return 8;\n}\n\nstatic createDatum(builder:flatbuffers.Builder, name: number, value: number):flatbuffers.Offset {\n builder.prep(4, 8);\n builder.writeFloat32(value);\n builder.pad(2);\n builder.writeInt16(name);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Epoch {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Epoch {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsEpoch(bb:flatbuffers.ByteBuffer, obj?:Epoch):Epoch {\n return (obj || new Epoch()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsEpoch(bb:flatbuffers.ByteBuffer, obj?:Epoch):Epoch {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Epoch()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstart():string|null\nstart(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nstart(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nend():string|null\nend(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nend(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startEpoch(builder:flatbuffers.Builder) {\n builder.startObject(2);\n}\n\nstatic addStart(builder:flatbuffers.Builder, startOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, startOffset, 0);\n}\n\nstatic addEnd(builder:flatbuffers.Builder, endOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, endOffset, 0);\n}\n\nstatic endEpoch(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createEpoch(builder:flatbuffers.Builder, startOffset:flatbuffers.Offset, endOffset:flatbuffers.Offset):flatbuffers.Offset {\n Epoch.startEpoch(builder);\n Epoch.addStart(builder, startOffset);\n Epoch.addEnd(builder, endOffset);\n return Epoch.endEpoch(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class License {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):License {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsLicense(bb:flatbuffers.ByteBuffer, obj?:License):License {\n return (obj || new License()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsLicense(bb:flatbuffers.ByteBuffer, obj?:License):License {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new License()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\ntype():string|null\ntype(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ntype(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nurl():string|null\nurl(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nurl(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nnotes():string|null\nnotes(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nnotes(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncommercialUse():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startLicense(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addType(builder:flatbuffers.Builder, typeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, typeOffset, 0);\n}\n\nstatic addUrl(builder:flatbuffers.Builder, urlOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, urlOffset, 0);\n}\n\nstatic addNotes(builder:flatbuffers.Builder, notesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, notesOffset, 0);\n}\n\nstatic addCommercialUse(builder:flatbuffers.Builder, commercialUse:boolean) {\n builder.addFieldInt8(3, +commercialUse, +false);\n}\n\nstatic endLicense(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createLicense(builder:flatbuffers.Builder, typeOffset:flatbuffers.Offset, urlOffset:flatbuffers.Offset, notesOffset:flatbuffers.Offset, commercialUse:boolean):flatbuffers.Offset {\n License.startLicense(builder);\n License.addType(builder, typeOffset);\n License.addUrl(builder, urlOffset);\n License.addNotes(builder, notesOffset);\n License.addCommercialUse(builder, commercialUse);\n return License.endLicense(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\n/**\n * Scoring factors, each 0–1. A struct rather than scalar fields so presence\n * is exact: scalars can't distinguish an omitted factor from a real 0, while\n * a struct field reads back null when it was never written.\n */\nexport class QualityFactors {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):QualityFactors {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nepoch():number {\n return this.bb!.readFloat32(this.bb_pos);\n}\n\nrecency():number {\n return this.bb!.readFloat32(this.bb_pos + 4);\n}\n\nsource():number {\n return this.bb!.readFloat32(this.bb_pos + 8);\n}\n\nquality():number {\n return this.bb!.readFloat32(this.bb_pos + 12);\n}\n\namplitude():number {\n return this.bb!.readFloat32(this.bb_pos + 16);\n}\n\ncoverage():number {\n return this.bb!.readFloat32(this.bb_pos + 20);\n}\n\nstatic sizeOf():number {\n return 24;\n}\n\nstatic createQualityFactors(builder:flatbuffers.Builder, epoch: number, recency: number, source: number, quality: number, amplitude: number, coverage: number):flatbuffers.Offset {\n builder.prep(4, 24);\n builder.writeFloat32(coverage);\n builder.writeFloat32(amplitude);\n builder.writeFloat32(quality);\n builder.writeFloat32(source);\n builder.writeFloat32(recency);\n builder.writeFloat32(epoch);\n return builder.offset();\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { QualityFactors } from '../slackwater/quality-factors.ts';\n\n\n/**\n * Quality-evaluation detail (packages/stations/evaluate-quality.ts). The gate itself —\n * `accepted` and `score` — lives inline on Station so an identity scan can\n * filter and rank without touching this table; the builder writes Quality\n * tables at the tail of the file with the other lookup data.\n */\nexport class Quality {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Quality {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsQuality(bb:flatbuffers.ByteBuffer, obj?:Quality):Quality {\n return (obj || new Quality()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsQuality(bb:flatbuffers.ByteBuffer, obj?:Quality):Quality {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Quality()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nfactors(obj?:QualityFactors):QualityFactors|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? (obj || new QualityFactors()).__init(this.bb_pos + offset, this.bb!) : null;\n}\n\n/**\n * Human-readable findings, e.g. \"MLW (3.827) < LAT (3.831)\".\n */\nissues(index: number):string\nissues(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nissues(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nissuesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\n/**\n * Rejection category (\"duplicate\", \"datum\", \"constituents\", ...), if rejected.\n */\nreason():string|null\nreason(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nreason(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\n/**\n * Station.id of the station that makes this one redundant, if any.\n */\nredundant():string|null\nredundant(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nredundant(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstatic startQuality(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addFactors(builder:flatbuffers.Builder, factorsOffset:flatbuffers.Offset) {\n builder.addFieldStruct(0, factorsOffset, 0);\n}\n\nstatic addIssues(builder:flatbuffers.Builder, issuesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, issuesOffset, 0);\n}\n\nstatic createIssuesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startIssuesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addReason(builder:flatbuffers.Builder, reasonOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, reasonOffset, 0);\n}\n\nstatic addRedundant(builder:flatbuffers.Builder, redundantOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, redundantOffset, 0);\n}\n\nstatic endQuality(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createQuality(builder:flatbuffers.Builder, factorsOffset:flatbuffers.Offset, issuesOffset:flatbuffers.Offset, reasonOffset:flatbuffers.Offset, redundantOffset:flatbuffers.Offset):flatbuffers.Offset {\n Quality.startQuality(builder);\n Quality.addFactors(builder, factorsOffset);\n Quality.addIssues(builder, issuesOffset);\n Quality.addReason(builder, reasonOffset);\n Quality.addRedundant(builder, redundantOffset);\n return Quality.endQuality(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class Source {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Source {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsSource(bb:flatbuffers.ByteBuffer, obj?:Source):Source {\n return (obj || new Source()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsSource(bb:flatbuffers.ByteBuffer, obj?:Source):Source {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Source()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nid():string|null\nid(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nid(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nurl():string|null\nurl(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nurl(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\npublishedHarmonics():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nstatic startSource(builder:flatbuffers.Builder) {\n builder.startObject(4);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, nameOffset, 0);\n}\n\nstatic addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, idOffset, 0);\n}\n\nstatic addUrl(builder:flatbuffers.Builder, urlOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, urlOffset, 0);\n}\n\nstatic addPublishedHarmonics(builder:flatbuffers.Builder, publishedHarmonics:boolean) {\n builder.addFieldInt8(3, +publishedHarmonics, +false);\n}\n\nstatic endSource(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic createSource(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset, idOffset:flatbuffers.Offset, urlOffset:flatbuffers.Offset, publishedHarmonics:boolean):flatbuffers.Offset {\n Source.startSource(builder);\n Source.addName(builder, nameOffset);\n Source.addId(builder, idOffset);\n Source.addUrl(builder, urlOffset);\n Source.addPublishedHarmonics(builder, publishedHarmonics);\n return Source.endSource(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { HeightOffsetType } from '../slackwater/height-offset-type.ts';\n\n\n/**\n * Subordinate tide station: NOAA-style corrections against `reference`.\n */\nexport class TideOffsets {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):TideOffsets {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsTideOffsets(bb:flatbuffers.ByteBuffer, obj?:TideOffsets):TideOffsets {\n return (obj || new TideOffsets()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsTideOffsets(bb:flatbuffers.ByteBuffer, obj?:TideOffsets):TideOffsets {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new TideOffsets()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nreference():string|null\nreference(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nreference(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ntimeHigh():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\ntimeLow():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readInt32(this.bb_pos + offset) : 0;\n}\n\nheightType():HeightOffsetType {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : HeightOffsetType.Ratio;\n}\n\nheightHigh():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nheightLow():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readFloat32(this.bb_pos + offset) : 0.0;\n}\n\nstatic startTideOffsets(builder:flatbuffers.Builder) {\n builder.startObject(6);\n}\n\nstatic addReference(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, referenceOffset, 0);\n}\n\nstatic addTimeHigh(builder:flatbuffers.Builder, timeHigh:number) {\n builder.addFieldInt32(1, timeHigh, 0);\n}\n\nstatic addTimeLow(builder:flatbuffers.Builder, timeLow:number) {\n builder.addFieldInt32(2, timeLow, 0);\n}\n\nstatic addHeightType(builder:flatbuffers.Builder, heightType:HeightOffsetType) {\n builder.addFieldInt8(3, heightType, HeightOffsetType.Ratio);\n}\n\nstatic addHeightHigh(builder:flatbuffers.Builder, heightHigh:number) {\n builder.addFieldFloat32(4, heightHigh, 0.0);\n}\n\nstatic addHeightLow(builder:flatbuffers.Builder, heightLow:number) {\n builder.addFieldFloat32(5, heightLow, 0.0);\n}\n\nstatic endTideOffsets(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // reference\n return offset;\n}\n\nstatic createTideOffsets(builder:flatbuffers.Builder, referenceOffset:flatbuffers.Offset, timeHigh:number, timeLow:number, heightType:HeightOffsetType, heightHigh:number, heightLow:number):flatbuffers.Offset {\n TideOffsets.startTideOffsets(builder);\n TideOffsets.addReference(builder, referenceOffset);\n TideOffsets.addTimeHigh(builder, timeHigh);\n TideOffsets.addTimeLow(builder, timeLow);\n TideOffsets.addHeightType(builder, heightType);\n TideOffsets.addHeightHigh(builder, heightHigh);\n TideOffsets.addHeightLow(builder, heightLow);\n return TideOffsets.endTideOffsets(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Constituent } from '../slackwater/constituent.ts';\nimport { Current } from '../slackwater/current.ts';\nimport { Datum } from '../slackwater/datum.ts';\nimport { DatumsSource } from '../slackwater/datums-source.ts';\nimport { Epoch } from '../slackwater/epoch.ts';\nimport { Kind } from '../slackwater/kind.ts';\nimport { License } from '../slackwater/license.ts';\nimport { Quality } from '../slackwater/quality.ts';\nimport { Source } from '../slackwater/source.ts';\nimport { StationType } from '../slackwater/station-type.ts';\nimport { TideOffsets } from '../slackwater/tide-offsets.ts';\n\n\nexport class Station {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Station {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsStation(bb:flatbuffers.ByteBuffer, obj?:Station):Station {\n return (obj || new Station()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsStation(bb:flatbuffers.ByteBuffer, obj?:Station):Station {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Station()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nid():string|null\nid(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nid(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nname():string|null\nname(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nname(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nkind():Kind {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : Kind.Tide;\n}\n\ntype():StationType {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : StationType.Reference;\n}\n\nlatitude():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.readFloat64(this.bb_pos + offset) : 0.0;\n}\n\nlongitude():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.readFloat64(this.bb_pos + offset) : 0.0;\n}\n\ntimezone():string|null\ntimezone(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ntimezone(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 16);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\n/**\n * Upstream's region as published (\"NJ\", \"Nova Scotia\"). Readers that want a\n * display line derive it from region and country at read time.\n */\nregion():string|null\nregion(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nregion(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 18);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncountry():string|null\ncountry(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncountry(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 20);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncontinent():string|null\ncontinent(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncontinent(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 22);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\n/**\n * Alternate names and slugs for search. Lower-cased, deduplicated.\n */\naliases(index: number):string\naliases(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\naliases(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\naliasesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 24);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\n/**\n * Quality gate: whether the station passes the default filter, and its\n * 0–100 score. Inline so an identity scan reads them from head pages;\n * the detail behind them is in `quality`.\n */\naccepted():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 26);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\nscore():number {\n const offset = this.bb!.__offset(this.bb_pos, 28);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : 0;\n}\n\n/**\n * Empty for subordinates; predict from `offsets.reference`.\n */\nconstituents(index: number, obj?:Constituent):Constituent|null {\n const offset = this.bb!.__offset(this.bb_pos, 30);\n return offset ? (obj || new Constituent()).__init(this.bb!.__vector(this.bb_pos + offset) + index * 12, this.bb!) : null;\n}\n\nconstituentsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 30);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\n/**\n * Vertical datums relative to the station's zero. Chart-datum shift for\n * heights is `datums[MSL] - datums[chart_datum]`, computed by the reader.\n */\ndatums(index: number, obj?:Datum):Datum|null {\n const offset = this.bb!.__offset(this.bb_pos, 32);\n return offset ? (obj || new Datum()).__init(this.bb!.__vector(this.bb_pos + offset) + index * 8, this.bb!) : null;\n}\n\ndatumsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 32);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ndatumsSource():DatumsSource {\n const offset = this.bb!.__offset(this.bb_pos, 34);\n return offset ? this.bb!.readUint8(this.bb_pos + offset) : DatumsSource.Unknown;\n}\n\nchartDatum():string|null\nchartDatum(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nchartDatum(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 36);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\noffsets(obj?:TideOffsets):TideOffsets|null {\n const offset = this.bb!.__offset(this.bb_pos, 38);\n return offset ? (obj || new TideOffsets()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\ncurrent(obj?:Current):Current|null {\n const offset = this.bb!.__offset(this.bb_pos, 40);\n return offset ? (obj || new Current()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nepoch(obj?:Epoch):Epoch|null {\n const offset = this.bb!.__offset(this.bb_pos, 42);\n return offset ? (obj || new Epoch()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nquality(obj?:Quality):Quality|null {\n const offset = this.bb!.__offset(this.bb_pos, 44);\n return offset ? (obj || new Quality()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nsource(obj?:Source):Source|null {\n const offset = this.bb!.__offset(this.bb_pos, 46);\n return offset ? (obj || new Source()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\nlicense(obj?:License):License|null {\n const offset = this.bb!.__offset(this.bb_pos, 48);\n return offset ? (obj || new License()).__init(this.bb!.__indirect(this.bb_pos + offset), this.bb!) : null;\n}\n\ndisclaimers():string|null\ndisclaimers(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ndisclaimers(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 50);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\n/**\n * The complete notice to display for this station, assembled by the builder\n * so no reader has to hold its own table of sources or know what a licence\n * requires. Carries the creator credit and, where a Creative Commons licence\n * applies, the licence and a pointer to what was modified — everything\n * CC BY 4.0 section 3(a)(1) asks a redistributor to pass on. Derived from\n * `source` and `license`, and per station because licence varies within a\n * single source.\n */\nattribution():string|null\nattribution(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nattribution(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 52);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nlocality():string|null\nlocality(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nlocality(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 54);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nregionCode():string|null\nregionCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nregionCode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 56);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncountryCode():string|null\ncountryCode(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncountryCode(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 58);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncontext():string|null\ncontext(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\ncontext(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 60);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\ncontextDerived():boolean {\n const offset = this.bb!.__offset(this.bb_pos, 62);\n return offset ? !!this.bb!.readInt8(this.bb_pos + offset) : false;\n}\n\ncities(index: number):string\ncities(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\ncities(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 64);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\ncitiesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 64);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startStation(builder:flatbuffers.Builder) {\n builder.startObject(31);\n}\n\nstatic addId(builder:flatbuffers.Builder, idOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, idOffset, 0);\n}\n\nstatic addName(builder:flatbuffers.Builder, nameOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, nameOffset, 0);\n}\n\nstatic addKind(builder:flatbuffers.Builder, kind:Kind) {\n builder.addFieldInt8(2, kind, Kind.Tide);\n}\n\nstatic addType(builder:flatbuffers.Builder, type:StationType) {\n builder.addFieldInt8(3, type, StationType.Reference);\n}\n\nstatic addLatitude(builder:flatbuffers.Builder, latitude:number) {\n builder.addFieldFloat64(4, latitude, 0.0);\n}\n\nstatic addLongitude(builder:flatbuffers.Builder, longitude:number) {\n builder.addFieldFloat64(5, longitude, 0.0);\n}\n\nstatic addTimezone(builder:flatbuffers.Builder, timezoneOffset:flatbuffers.Offset) {\n builder.addFieldOffset(6, timezoneOffset, 0);\n}\n\nstatic addRegion(builder:flatbuffers.Builder, regionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(7, regionOffset, 0);\n}\n\nstatic addCountry(builder:flatbuffers.Builder, countryOffset:flatbuffers.Offset) {\n builder.addFieldOffset(8, countryOffset, 0);\n}\n\nstatic addContinent(builder:flatbuffers.Builder, continentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(9, continentOffset, 0);\n}\n\nstatic addAliases(builder:flatbuffers.Builder, aliasesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(10, aliasesOffset, 0);\n}\n\nstatic createAliasesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startAliasesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addAccepted(builder:flatbuffers.Builder, accepted:boolean) {\n builder.addFieldInt8(11, +accepted, +false);\n}\n\nstatic addScore(builder:flatbuffers.Builder, score:number) {\n builder.addFieldInt8(12, score, 0);\n}\n\nstatic addConstituents(builder:flatbuffers.Builder, constituentsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(13, constituentsOffset, 0);\n}\n\nstatic startConstituentsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(12, numElems, 4);\n}\n\nstatic addDatums(builder:flatbuffers.Builder, datumsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(14, datumsOffset, 0);\n}\n\nstatic startDatumsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(8, numElems, 4);\n}\n\nstatic addDatumsSource(builder:flatbuffers.Builder, datumsSource:DatumsSource) {\n builder.addFieldInt8(15, datumsSource, DatumsSource.Unknown);\n}\n\nstatic addChartDatum(builder:flatbuffers.Builder, chartDatumOffset:flatbuffers.Offset) {\n builder.addFieldOffset(16, chartDatumOffset, 0);\n}\n\nstatic addOffsets(builder:flatbuffers.Builder, offsetsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(17, offsetsOffset, 0);\n}\n\nstatic addCurrent(builder:flatbuffers.Builder, currentOffset:flatbuffers.Offset) {\n builder.addFieldOffset(18, currentOffset, 0);\n}\n\nstatic addEpoch(builder:flatbuffers.Builder, epochOffset:flatbuffers.Offset) {\n builder.addFieldOffset(19, epochOffset, 0);\n}\n\nstatic addQuality(builder:flatbuffers.Builder, qualityOffset:flatbuffers.Offset) {\n builder.addFieldOffset(20, qualityOffset, 0);\n}\n\nstatic addSource(builder:flatbuffers.Builder, sourceOffset:flatbuffers.Offset) {\n builder.addFieldOffset(21, sourceOffset, 0);\n}\n\nstatic addLicense(builder:flatbuffers.Builder, licenseOffset:flatbuffers.Offset) {\n builder.addFieldOffset(22, licenseOffset, 0);\n}\n\nstatic addDisclaimers(builder:flatbuffers.Builder, disclaimersOffset:flatbuffers.Offset) {\n builder.addFieldOffset(23, disclaimersOffset, 0);\n}\n\nstatic addAttribution(builder:flatbuffers.Builder, attributionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(24, attributionOffset, 0);\n}\n\nstatic addLocality(builder:flatbuffers.Builder, localityOffset:flatbuffers.Offset) {\n builder.addFieldOffset(25, localityOffset, 0);\n}\n\nstatic addRegionCode(builder:flatbuffers.Builder, regionCodeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(26, regionCodeOffset, 0);\n}\n\nstatic addCountryCode(builder:flatbuffers.Builder, countryCodeOffset:flatbuffers.Offset) {\n builder.addFieldOffset(27, countryCodeOffset, 0);\n}\n\nstatic addContext(builder:flatbuffers.Builder, contextOffset:flatbuffers.Offset) {\n builder.addFieldOffset(28, contextOffset, 0);\n}\n\nstatic addContextDerived(builder:flatbuffers.Builder, contextDerived:boolean) {\n builder.addFieldInt8(29, +contextDerived, +false);\n}\n\nstatic addCities(builder:flatbuffers.Builder, citiesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(30, citiesOffset, 0);\n}\n\nstatic createCitiesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startCitiesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic endStation(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // id\n builder.requiredField(offset, 6) // name\n builder.requiredField(offset, 20) // country\n builder.requiredField(offset, 58) // country_code\n return offset;\n}\n\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nexport class StationRoute {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):StationRoute {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsStationRoute(bb:flatbuffers.ByteBuffer, obj?:StationRoute):StationRoute {\n return (obj || new StationRoute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsStationRoute(bb:flatbuffers.ByteBuffer, obj?:StationRoute):StationRoute {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new StationRoute()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nslug():string|null\nslug(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nslug(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\nstationIds(index: number):string\nstationIds(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nstationIds(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nstationIdsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nformerPaths(index: number):string\nformerPaths(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nformerPaths(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nformerPathsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startStationRoute(builder:flatbuffers.Builder) {\n builder.startObject(3);\n}\n\nstatic addSlug(builder:flatbuffers.Builder, slugOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, slugOffset, 0);\n}\n\nstatic addStationIds(builder:flatbuffers.Builder, stationIdsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, stationIdsOffset, 0);\n}\n\nstatic createStationIdsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startStationIdsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addFormerPaths(builder:flatbuffers.Builder, formerPathsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, formerPathsOffset, 0);\n}\n\nstatic createFormerPathsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startFormerPathsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic endStationRoute(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n builder.requiredField(offset, 4) // slug\n builder.requiredField(offset, 6) // station_ids\n return offset;\n}\n\nstatic createStationRoute(builder:flatbuffers.Builder, slugOffset:flatbuffers.Offset, stationIdsOffset:flatbuffers.Offset, formerPathsOffset:flatbuffers.Offset):flatbuffers.Offset {\n StationRoute.startStationRoute(builder);\n StationRoute.addSlug(builder, slugOffset);\n StationRoute.addStationIds(builder, stationIdsOffset);\n StationRoute.addFormerPaths(builder, formerPathsOffset);\n return StationRoute.endStationRoute(builder);\n}\n}\n","// automatically generated by the FlatBuffers compiler, do not modify\n\n/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */\n\nimport * as flatbuffers from 'flatbuffers';\n\nimport { Station } from '../slackwater/station.ts';\nimport { StationRoute } from '../slackwater/station-route.ts';\n\n\n/**\n * Datum names and constituent names live once, at the root; records refer to\n * them by index. Constituent records repeat ~23 names across ~110k entries.\n */\nexport class Root {\n bb: flatbuffers.ByteBuffer|null = null;\n bb_pos = 0;\n __init(i:number, bb:flatbuffers.ByteBuffer):Root {\n this.bb_pos = i;\n this.bb = bb;\n return this;\n}\n\nstatic getRootAsRoot(bb:flatbuffers.ByteBuffer, obj?:Root):Root {\n return (obj || new Root()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic getSizePrefixedRootAsRoot(bb:flatbuffers.ByteBuffer, obj?:Root):Root {\n bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);\n return (obj || new Root()).__init(bb.readInt32(bb.position()) + bb.position(), bb);\n}\n\nstatic bufferHasIdentifier(bb:flatbuffers.ByteBuffer):boolean {\n return bb.__has_identifier('TCDB');\n}\n\n/**\n * Release tag of the database that produced this file, e.g. \"0.9.20260801\".\n */\nversion():string|null\nversion(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null\nversion(optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 4);\n return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;\n}\n\n/**\n * Sorted by `id` (strcmp order) so `lookupByKey` binary-searches.\n */\nstations(index: number, obj?:Station):Station|null {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? (obj || new Station()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\nstationsLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 6);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\n/**\n * Indexed by `Constituent.name`. Names as the predictor catalogue spells them (\"M2\", \"K1\").\n */\nconstituentNames(index: number):string\nconstituentNames(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\nconstituentNames(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\nconstituentNamesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 8);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\n/**\n * Indexed by `Datum.name` (\"MLLW\", \"MSL\", \"LAT\", ...).\n */\ndatumNames(index: number):string\ndatumNames(index: number,optionalEncoding:flatbuffers.Encoding):string|Uint8Array\ndatumNames(index: number,optionalEncoding?:any):string|Uint8Array|null {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__string(this.bb!.__vector(this.bb_pos + offset) + index * 4, optionalEncoding) : null;\n}\n\ndatumNamesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 10);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ntideRoutes(index: number, obj?:StationRoute):StationRoute|null {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? (obj || new StationRoute()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\ntideRoutesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 12);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\ncurrentRoutes(index: number, obj?:StationRoute):StationRoute|null {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? (obj || new StationRoute()).__init(this.bb!.__indirect(this.bb!.__vector(this.bb_pos + offset) + index * 4), this.bb!) : null;\n}\n\ncurrentRoutesLength():number {\n const offset = this.bb!.__offset(this.bb_pos, 14);\n return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;\n}\n\nstatic startRoot(builder:flatbuffers.Builder) {\n builder.startObject(6);\n}\n\nstatic addVersion(builder:flatbuffers.Builder, versionOffset:flatbuffers.Offset) {\n builder.addFieldOffset(0, versionOffset, 0);\n}\n\nstatic addStations(builder:flatbuffers.Builder, stationsOffset:flatbuffers.Offset) {\n builder.addFieldOffset(1, stationsOffset, 0);\n}\n\nstatic createStationsVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startStationsVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addConstituentNames(builder:flatbuffers.Builder, constituentNamesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(2, constituentNamesOffset, 0);\n}\n\nstatic createConstituentNamesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startConstituentNamesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addDatumNames(builder:flatbuffers.Builder, datumNamesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(3, datumNamesOffset, 0);\n}\n\nstatic createDatumNamesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startDatumNamesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addTideRoutes(builder:flatbuffers.Builder, tideRoutesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(4, tideRoutesOffset, 0);\n}\n\nstatic createTideRoutesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startTideRoutesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic addCurrentRoutes(builder:flatbuffers.Builder, currentRoutesOffset:flatbuffers.Offset) {\n builder.addFieldOffset(5, currentRoutesOffset, 0);\n}\n\nstatic createCurrentRoutesVector(builder:flatbuffers.Builder, data:flatbuffers.Offset[]):flatbuffers.Offset {\n builder.startVector(4, data.length, 4);\n for (let i = data.length - 1; i >= 0; i--) {\n builder.addOffset(data[i]!);\n }\n return builder.endVector();\n}\n\nstatic startCurrentRoutesVector(builder:flatbuffers.Builder, numElems:number) {\n builder.startVector(4, numElems, 4);\n}\n\nstatic endRoot(builder:flatbuffers.Builder):flatbuffers.Offset {\n const offset = builder.endObject();\n return offset;\n}\n\nstatic finishRootBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset, 'TCDB');\n}\n\nstatic finishSizePrefixedRootBuffer(builder:flatbuffers.Builder, offset:flatbuffers.Offset) {\n builder.finish(offset, 'TCDB', true);\n}\n\nstatic createRoot(builder:flatbuffers.Builder, versionOffset:flatbuffers.Offset, stationsOffset:flatbuffers.Offset, constituentNamesOffset:flatbuffers.Offset, datumNamesOffset:flatbuffers.Offset, tideRoutesOffset:flatbuffers.Offset, currentRoutesOffset:flatbuffers.Offset):flatbuffers.Offset {\n Root.startRoot(builder);\n Root.addVersion(builder, versionOffset);\n Root.addStations(builder, stationsOffset);\n Root.addConstituentNames(builder, constituentNamesOffset);\n Root.addDatumNames(builder, datumNamesOffset);\n Root.addTideRoutes(builder, tideRoutesOffset);\n Root.addCurrentRoutes(builder, currentRoutesOffset);\n return Root.endRoot(builder);\n}\n}\n","// Browser source for the \"#slackwater.tcdb\" subpath import. Browsers have no\n// filesystem, so the same file the Node build reads from disk is fetched over\n// the network; bundlers that understand `new URL(..., import.meta.url)` copy\n// the asset and rewrite the URL.\n//\n// The fetch resolves with top-level await, so this module alone is\n// asynchronous — importers just see the bytes, and the Node bundle's module\n// graph stays synchronous and therefore require()-able.\nconst url = new URL(\"../generated/slackwater.tcdb\", import.meta.url);\nconst response = await fetch(url);\nif (!response.ok) {\n throw new Error(`Failed to fetch tide database ${url}: ${response.status}`);\n}\n\nexport default new Uint8Array(await response.arrayBuffer());\n","import { Root, StationType } from \"../generated/fbs/slackwater.ts\";\nimport * as flatbuffers from \"flatbuffers\";\nimport type { StationMeta } from \"../types.js\";\n\n/**\n * Open a database buffer. The only place a consumer should touch the\n * FlatBuffers root; everything else in src/database/ speaks this format so the\n * rest of the package doesn't have to.\n */\nexport function openDatabase(bytes: Uint8Array): Root {\n return Root.getRootAsRoot(new flatbuffers.ByteBuffer(bytes));\n}\n\n/**\n * Station identity in database order, as plain objects. What the build-time\n * search-index generators consume: coordinates for the geo index; id, name,\n * place fields, and source.id for the text index.\n */\nexport function readStationMeta(bytes: Uint8Array): StationMeta[] {\n const db = openDatabase(bytes);\n\n return Array.from({ length: db.stationsLength() }, (_, i) => {\n const t = db.stations(i)!;\n const id = t.id()!;\n // The text index keys on source.id, so a station without a source table\n // can't be indexed. Name the station rather than failing on a null deref\n // deeper in the build.\n const source = t.source();\n if (!source) throw new Error(`Station ${id} has no source`);\n const meta: StationMeta = {\n id,\n name: t.name()!,\n latitude: t.latitude(),\n longitude: t.longitude(),\n country: t.country()!,\n country_code: t.countryCode()!,\n continent: t.continent()!,\n timezone: t.timezone()!,\n type: t.type() === StationType.Subordinate ? \"subordinate\" : \"reference\",\n source: {\n name: source.name()!,\n id: source.id()!,\n published_harmonics: source.publishedHarmonics(),\n url: source.url()!,\n },\n };\n const region = t.region();\n if (region !== null) meta.region = region;\n const locality = t.locality();\n if (locality !== null) meta.locality = locality;\n const regionCode = t.regionCode();\n if (regionCode !== null) meta.region_code = regionCode;\n const context = t.context();\n if (context !== null) {\n meta.context = context;\n meta.context_derived = t.contextDerived();\n }\n if (t.citiesLength() > 0) {\n meta.cities = Array.from({ length: t.citiesLength() }, (_, index) =>\n t.cities(index),\n );\n }\n if (t.aliasesLength() > 0) {\n meta.aliases = Array.from({ length: t.aliasesLength() }, (_, index) =>\n t.aliases(index),\n );\n }\n return meta;\n });\n}\n","import {\n Constituent,\n Datum,\n DatumsSource,\n HeightOffsetType,\n Kind,\n StationType,\n} from \"./generated/fbs/slackwater.ts\";\nimport databaseBytes from \"#slackwater.tcdb\";\nimport { PROJECT_CREDIT } from \"./attribution.js\";\nimport { openDatabase } from \"./database/reader.js\";\nimport type {\n AstronomicalBounds,\n CurrentData,\n HarmonicConstituent,\n Station,\n StationData,\n StationQuality,\n} from \"./types.js\";\n\n// The whole database is one FlatBuffers file (schemas/database.fbs). On\n// Node the bytes are a Buffer — external memory, off the V8 heap; in the\n// browser an ArrayBuffer from fetch. Identity fields are materialized into\n// plain objects once, below; the prediction data (harmonic_constituents,\n// datums, epoch) is decoded from the buffer only when a station's fields are\n// accessed, so importing this module holds no prediction data on the heap.\n// No await here: the browser byte source resolves its fetch with top-level\n// await in its own module, so this graph — and the Node bundle — stays\n// synchronous and require()-able.\nconst db = openDatabase(databaseBytes);\n\nconst constituentNames: string[] = Array.from(\n { length: db.constituentNamesLength() },\n (_, i) => db.constituentNames(i),\n);\n\n/** All datum keys present across the database (e.g. \"MLLW\", \"MSL\", \"NAVD88\"). */\nexport const datums: string[] = Array.from(\n { length: db.datumNamesLength() },\n (_, i) => db.datumNames(i),\n);\n\nconst indexById = new Map<string, number>();\n\n// Stations that predict from another station's harmonics (subordinates use\n// their reference station); resolve an id to the buffer index of its record.\nfunction dataIndex(station: Station): number {\n const id =\n station.type === \"subordinate\" && station.offsets\n ? station.offsets.reference\n : station.id;\n const index = indexById.get(id);\n if (index === undefined) throw new Error(`No data record for station ${id}`);\n return index;\n}\n\nfunction readConstituents(index: number): HarmonicConstituent[] {\n const table = db.stations(index)!;\n const constituent = new Constituent();\n return Array.from({ length: table.constituentsLength() }, (_, i) => {\n table.constituents(i, constituent);\n return {\n name: constituentNames[constituent.name()]!,\n amplitude: constituent.amplitude(),\n phase: constituent.phase(),\n };\n });\n}\n\nfunction readDatums(index: number): Record<string, number> {\n const table = db.stations(index)!;\n const datum = new Datum();\n const result: Record<string, number> = {};\n for (let i = 0; i < table.datumsLength(); i++) {\n table.datums(i, datum);\n result[datums[datum.name()]!] = datum.value();\n }\n return result;\n}\n\n// The quality gate (accepted, score) is inline on the station table, so the\n// identity scan reads it from head pages; the detail behind it lives in a\n// Quality table at the tail and decodes only on access, like prediction data.\nfunction readQuality(\n index: number,\n id: string,\n accepted: boolean,\n score: number,\n): StationQuality {\n const detail = () => db.stations(index)!.quality();\n // id comes from station identity rather than a second copy in the database.\n const quality = { id, accepted, score } as StationQuality;\n Object.defineProperties(quality, {\n factors: {\n enumerable: true,\n configurable: true,\n get: () => {\n const f = detail()?.factors();\n if (!f) return undefined;\n return {\n epoch: f.epoch(),\n recency: f.recency(),\n source: f.source(),\n quality: f.quality(),\n amplitude: f.amplitude(),\n coverage: f.coverage(),\n };\n },\n },\n issues: {\n enumerable: true,\n configurable: true,\n get: () => {\n const t = detail();\n if (!t) return undefined;\n return Array.from({ length: t.issuesLength() }, (_, i) => t.issues(i));\n },\n },\n reason: {\n enumerable: true,\n configurable: true,\n get: () => detail()?.reason() ?? undefined,\n },\n redundant: {\n enumerable: true,\n configurable: true,\n get: () => detail()?.redundant() ?? undefined,\n },\n });\n return quality;\n}\n\n// `index` is the record that holds the datums — the reference's, for a\n// subordinate — so its own chart_datum is the zero the LAT/HAT sit above.\nfunction readOwnBounds(index: number): AstronomicalBounds | undefined {\n const chartDatum = db.stations(index)!.chartDatum();\n if (chartDatum === null) return undefined;\n const values = readDatums(index);\n const zero = values[chartDatum];\n const lat = values[\"LAT\"];\n const hat = values[\"HAT\"];\n if (zero === undefined || lat === undefined || hat === undefined)\n return undefined;\n return { lat: lat - zero, hat: hat - zero };\n}\n\nfunction readAstronomicalBounds(\n station: Station,\n): AstronomicalBounds | undefined {\n const bounds = readOwnBounds(dataIndex(station));\n // The same guard dataIndex uses, so the reduction runs exactly when the\n // bounds above came from another station's record.\n const offsets = station.type === \"subordinate\" ? station.offsets : undefined;\n if (!bounds || !offsets) return bounds;\n // Exact for both kinds: a ratio scales the height above chart datum, a fixed\n // offset translates it, and both are monotonic in the reference height.\n const { type, high, low } = offsets.height;\n return type === \"ratio\"\n ? { lat: bounds.lat * low, hat: bounds.hat * high }\n : { lat: bounds.lat + low, hat: bounds.hat + high };\n}\n\nfunction readEpoch(index: number): StationData[\"epoch\"] {\n const epoch = db.stations(index)!.epoch();\n if (!epoch) return undefined;\n return { start: epoch.start()!, end: epoch.end()! };\n}\n\nfunction readCurrent(index: number): CurrentData | undefined {\n const table = db.stations(index)!.current();\n if (!table) return undefined;\n const current: CurrentData = {};\n if (!table.floodDirectionMissing())\n current.flood_direction = table.floodDirection();\n if (!table.ebbDirectionMissing())\n current.ebb_direction = table.ebbDirection();\n if (!table.meanFlowMissing()) current.mean_flow = table.meanFlow();\n const tideReference = table.tideReference();\n if (tideReference) current.tide_reference = tideReference;\n const offsets = table.offsets();\n if (offsets) {\n const values: NonNullable<CurrentData[\"offsets\"]> = {\n reference: offsets.reference()!,\n };\n if (!offsets.slackBeforeFloodMissing())\n values.slack_before_flood = offsets.slackBeforeFlood();\n if (!offsets.slackBeforeEbbMissing())\n values.slack_before_ebb = offsets.slackBeforeEbb();\n if (!offsets.floodTimeMissing()) values.flood_time = offsets.floodTime();\n if (!offsets.ebbTimeMissing()) values.ebb_time = offsets.ebbTime();\n if (!offsets.floodSpeedRatioMissing())\n values.flood_speed_ratio = offsets.floodSpeedRatio();\n if (!offsets.ebbSpeedRatioMissing())\n values.ebb_speed_ratio = offsets.ebbSpeedRatio();\n current.offsets = values;\n }\n const magnitudeNote = table.magnitudeNote();\n if (magnitudeNote) current.magnitude_note = magnitudeNote;\n const derived = table.derived();\n if (derived) {\n current.derived = {\n reference: derived.reference()!,\n high_water_lag_minutes: derived.highWaterLagMinutes(),\n low_water_lag_minutes: derived.lowWaterLagMinutes(),\n };\n }\n return current;\n}\n\nfunction readStation(index: number): Station {\n const t = db.stations(index)!;\n\n const station = { id: t.id()! } as Station;\n station.name = t.name()!;\n station.kind = t.kind() === Kind.Current ? \"current\" : \"tide\";\n station.latitude = t.latitude();\n station.longitude = t.longitude();\n const locality = t.locality();\n if (locality !== null) station.locality = locality;\n const region = t.region();\n if (region !== null) station.region = region;\n const regionCode = t.regionCode();\n if (regionCode !== null) station.region_code = regionCode;\n station.country = t.country()!;\n station.country_code = t.countryCode()!;\n station.continent = t.continent()!;\n station.timezone = t.timezone()!;\n const context = t.context();\n if (context !== null) {\n station.context = context;\n station.context_derived = t.contextDerived();\n }\n station.type =\n t.type() === StationType.Subordinate ? \"subordinate\" : \"reference\";\n // Optional in the data (many subordinates omit it); keep the key absent\n // rather than surfacing FlatBuffers' null.\n const disclaimers = t.disclaimers();\n if (disclaimers !== null) station.disclaimers = disclaimers;\n\n const chartDatum = t.chartDatum();\n if (chartDatum !== null) station.chart_datum = chartDatum;\n if (t.datumsSource() === DatumsSource.Observed)\n station.datums_source = \"observed\";\n else if (t.datumsSource() === DatumsSource.Harmonic)\n station.datums_source = \"harmonic\";\n\n const source = t.source();\n if (source) {\n station.source = {\n name: source.name()!,\n id: source.id()!,\n published_harmonics: source.publishedHarmonics(),\n url: source.url()!,\n };\n }\n // Written into the file by the builder, so a reader never needs its own\n // table of sources. Older files predating the field fall back to the\n // project credit.\n station.attribution = t.attribution() ?? PROJECT_CREDIT;\n\n const license = t.license();\n if (license) {\n station.license = {\n type: license.type()!,\n commercial_use: license.commercialUse(),\n url: license.url()!,\n };\n const notes = license.notes();\n if (notes !== null) station.license.notes = notes;\n }\n\n const offsets = t.offsets();\n if (offsets) {\n station.offsets = {\n reference: offsets.reference()!,\n time: { high: offsets.timeHigh(), low: offsets.timeLow() },\n height: {\n high: offsets.heightHigh(),\n low: offsets.heightLow(),\n type:\n offsets.heightType() === HeightOffsetType.Fixed ? \"fixed\" : \"ratio\",\n },\n };\n }\n\n if (t.aliasesLength() > 0) {\n station.aliases = Array.from({ length: t.aliasesLength() }, (_, i) =>\n t.aliases(i),\n );\n }\n if (t.citiesLength() > 0) {\n station.cities = Array.from({ length: t.citiesLength() }, (_, i) =>\n t.cities(i),\n );\n }\n if (station.kind === \"current\") {\n Object.defineProperty(station, \"current\", {\n enumerable: true,\n configurable: true,\n get: () => readCurrent(index),\n });\n }\n\n // Presence check only: following the field offset stays on head pages.\n if (t.quality() !== null) {\n station.quality = readQuality(index, station.id, t.accepted(), t.score());\n }\n\n // Getters keep the sync API: reading these fields decodes one station's data\n // from the buffer. No caching — a persistent cache on these module-level\n // objects would pull the heavy data back onto the heap.\n Object.defineProperties(station, {\n harmonic_constituents: {\n enumerable: true,\n configurable: true,\n get: () => readConstituents(dataIndex(station)),\n },\n datums: {\n enumerable: true,\n configurable: true,\n get: () => readDatums(dataIndex(station)),\n },\n astronomical_bounds: {\n enumerable: true,\n configurable: true,\n get: () => readAstronomicalBounds(station),\n },\n epoch: {\n enumerable: true,\n configurable: true,\n // A station's own epoch wins; a subordinate without one reports the\n // period its inherited constituents were computed over. Same precedence\n // the quality evaluation uses, so a read/write round-trip is lossless.\n get: () => readEpoch(index) ?? readEpoch(dataIndex(station)),\n },\n });\n\n return station;\n}\n\nexport const allStations: Station[] = Array.from(\n { length: db.stationsLength() },\n (_, i) => readStation(i),\n);\n\nallStations.forEach((station, i) => indexById.set(station.id, i));\n\nexport const stationsById = new Map(allStations.map((s) => [s.id, s]));\n\nexport const qualityMap = new Map<string, StationQuality>(\n allStations.flatMap((s) => (s.quality ? [[s.id, s.quality]] : [])),\n);\n\nexport function qualityFilter(station: Station): boolean {\n return qualityMap.get(station.id)?.accepted ?? true;\n}\n\nexport const stations: Station[] = allStations.filter(qualityFilter);\n","import databaseBytes from \"#slackwater.tcdb\";\nimport { openDatabase } from \"./database/reader.js\";\nimport { StationRoute as StationRouteTable } from \"./generated/fbs/slackwater.ts\";\nimport type { StationRoute } from \"./types.js\";\n\nconst db = openDatabase(databaseBytes);\n\nfunction readRoute(table: StationRouteTable): StationRoute {\n return {\n slug: table.slug()!,\n stationIds: Array.from({ length: table.stationIdsLength() }, (_, index) =>\n table.stationIds(index),\n ),\n formerPaths: Array.from({ length: table.formerPathsLength() }, (_, index) =>\n table.formerPaths(index),\n ),\n };\n}\n\nexport function stationRouteBySlug(\n kind: \"tide\" | \"current\",\n slug: string,\n): StationRoute | undefined {\n const length =\n kind === \"tide\" ? db.tideRoutesLength() : db.currentRoutesLength();\n let low = 0;\n let high = length - 1;\n while (low <= high) {\n const index = (low + high) >>> 1;\n const table = (\n kind === \"tide\" ? db.tideRoutes(index) : db.currentRoutes(index)\n )!;\n const candidate = table.slug()!;\n if (candidate === slug) return readRoute(table);\n if (candidate < slug) low = index + 1;\n else high = index - 1;\n }\n return undefined;\n}\n\nexport function stationRoutes(kind: \"tide\" | \"current\"): StationRoute[] {\n const length =\n kind === \"tide\" ? db.tideRoutesLength() : db.currentRoutesLength();\n return Array.from({ length }, (_, index) =>\n readRoute(\n (kind === \"tide\" ? db.tideRoutes(index) : db.currentRoutes(index))!,\n ),\n );\n}\n","import KDBush from \"kdbush\";\n\n/**\n * Create a search index for stations and return it as a base64 string, which can be\n * inlinted at build time by using the `macro` import type:\n *\n * import { createGeoIndex } from \"./search-index.js\" with { type: \"macro\" };\n */\nexport async function createGeoIndex() {\n const { loadStationMeta } = await import(\"../station-bundle.js\");\n const stations = loadStationMeta();\n\n const index = new KDBush(stations.length);\n\n for (const { longitude, latitude } of stations) {\n index.add(longitude, latitude);\n }\n index.finish();\n\n // @ts-ignore: Buffer is available at build time\n return Buffer.from(index.data).toString(\"base64\");\n}\n\nexport function loadGeoIndex(data: string): KDBush {\n return KDBush.from(base64ToArrayBuffer(data));\n}\n\nfunction base64ToArrayBuffer(b64: string): ArrayBuffer {\n const bin = atob(b64);\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes.buffer;\n}\n","import MiniSearch, { type Options } from \"minisearch\";\nimport type { StationMeta } from \"../types.js\";\n\n// Only metadata fields are indexed, so this operates on StationMeta and never\n// touches the lazily-loaded harmonics/datums.\nconst textSearchIndexOptions: Options<StationMeta> = {\n fields: [\n \"name\",\n \"locality\",\n \"region\",\n \"region_code\",\n \"country\",\n \"country_code\",\n \"context\",\n \"cities\",\n \"aliases\",\n \"continent\",\n \"source.id\",\n ],\n extractField: (station, fieldName) => {\n if (fieldName === \"source.id\") return station.source?.id;\n if (fieldName in station) return (station as any)[fieldName];\n },\n searchOptions: {\n boost: {\n name: 3,\n },\n fuzzy: 0.2,\n prefix: true,\n },\n};\n\n/**\n * Create a text search index for stations and return it as a JSON string, which can be\n * inlined at build time by using the `macro` import type:\n *\n * import { createTextIndex } from \"./text-search-index.js\" with { type: \"macro\" };\n */\nexport async function createTextIndex() {\n const { loadStationMeta } = await import(\"../station-bundle.js\");\n const stations = loadStationMeta();\n\n const index = new MiniSearch<StationMeta>(textSearchIndexOptions);\n index.addAll(stations);\n\n return JSON.stringify(index.toJSON());\n}\n\nexport function loadTextIndex(data: string): MiniSearch<StationMeta> {\n return MiniSearch.loadJSON<StationMeta>(data, textSearchIndexOptions);\n}\n","import { around, distance } from \"geokdbush\";\nimport { allStations, qualityFilter, stationsById } from \"../stations.js\";\nimport { createGeoIndex } from \"./geo.js\" with { type: \"macro\" };\nimport { loadGeoIndex } from \"./geo.js\";\nimport { createTextIndex } from \"./text.js\" with { type: \"macro\" };\nimport { loadTextIndex } from \"./text.js\";\nimport type { Station } from \"../types.js\";\n\nexport type Position = Latitude & Longitude;\ntype Latitude = { latitude: number } | { lat: number };\ntype Longitude = { longitude: number } | { lon: number } | { lng: number };\n\nexport type Filter = (station: Station) => boolean;\n\nexport type NearestOptions = Position & {\n maxDistance?: number;\n /** Include all stations, not just quality-filtered ones. */\n includeAll?: boolean;\n filter?: Filter;\n};\n\nexport type NearOptions = NearestOptions & {\n maxResults?: number;\n};\n\nexport type BboxOptions = {\n /** Include all stations, not just quality-filtered ones. */\n includeAll?: boolean;\n filter?: Filter;\n};\n\nexport type TextSearchOptions = {\n /** Include all stations, not just quality-filtered ones. */\n includeAll?: boolean;\n filter?: Filter;\n maxResults?: number;\n};\n\n/**\n * A tuple of a station and its distance from a given point, in kilometers.\n */\nexport type StationWithDistance = [Station, number];\n\n// The geo index is small and used by near/nearest/bbox, so load it eagerly.\nconst geoIndex = loadGeoIndex(await createGeoIndex());\n\n// The text index costs ~15 MB of heap to build. Consumers that only do geo/id\n// lookups (e.g. the signalk-tides plugin on constrained hardware) never call\n// search(), so defer building it until the first text search. The serialized\n// index string (~1.5 MB) is still inlined at build time; only the expensive\n// loadTextIndex build is deferred.\nlet textIndexData: string | undefined = await createTextIndex();\nlet textIndex: ReturnType<typeof loadTextIndex> | undefined;\nfunction getTextIndex() {\n if (!textIndex) {\n textIndex = loadTextIndex(textIndexData!);\n textIndexData = undefined; // free the ~1.5 MB serialized string for GC\n }\n return textIndex;\n}\n\nfunction createFilter(\n includeAll?: boolean,\n filter?: Filter,\n): Filter | undefined {\n const qf = includeAll ? undefined : qualityFilter;\n if (qf && filter) return (s) => qf(s) && filter(s);\n return qf ?? filter;\n}\n\n/**\n * Find stations near a given position.\n */\nexport function near({\n maxDistance = Infinity,\n maxResults = 10,\n includeAll,\n filter,\n ...position\n}: NearOptions): StationWithDistance[] {\n const point = positionToPoint(position);\n const combined = createFilter(includeAll, filter);\n\n const ids: number[] = around(\n geoIndex,\n ...point,\n maxResults,\n maxDistance,\n combined ? (id: number) => combined(allStations[id]!) : undefined,\n );\n return ids.map((id) => {\n const station = allStations[id]!;\n\n return [station, distance(...point, ...positionToPoint(station))] as const;\n });\n}\n\n/**\n * Find the single nearest station to a given position.\n */\nexport function nearest(options: NearestOptions): StationWithDistance | null {\n const results = near({ ...options, maxResults: 1 });\n return results[0] ?? null;\n}\n\n/**\n * Find stations within a bounding box.\n */\nexport function bbox(\n [minLon, minLat, maxLon, maxLat]: [number, number, number, number],\n { includeAll = false, filter }: BboxOptions = {},\n): Station[] {\n const combined = createFilter(includeAll, filter);\n const ids: number[] = geoIndex.range(minLon, minLat, maxLon, maxLat);\n const results = ids.map((id) => allStations[id]!);\n return combined ? results.filter(combined) : results;\n}\n\nexport function positionToPoint(options: Position): [number, number] {\n const longitude =\n \"longitude\" in options\n ? options.longitude\n : \"lon\" in options\n ? options.lon\n : options.lng;\n const latitude = \"latitude\" in options ? options.latitude : options.lat;\n return [longitude, latitude];\n}\n\n/**\n * Search for stations by text across name, region, country, and continent.\n * Supports fuzzy matching and prefix search.\n */\nexport function search(\n query: string,\n { includeAll, filter, maxResults = 20 }: TextSearchOptions = {},\n): Station[] {\n const combined = createFilter(includeAll, filter);\n const index = getTextIndex();\n\n const searchOptions: Parameters<typeof index.search>[1] = {};\n\n if (combined) {\n searchOptions.filter = (result) => {\n const station = stationsById.get(result.id);\n return station ? combined(station) : false;\n };\n }\n\n const results = index.search(query, searchOptions);\n\n return results\n .slice(0, maxResults)\n .map((result) => stationsById.get(result.id)!)\n .filter(Boolean);\n}\n","module.exports.byFips = function(code) {\n if (typeof code !== 'string') return null\n return search('fips', code.toUpperCase())\n}\n\nmodule.exports.byIso = function(code) {\n if (code === null || code === undefined) return null\n if (typeof code === 'number' || /^\\d+$/.test(code)) {\n return search('isoNo', (\"00\" + parseInt(code).toString()).slice(-3) )\n }\n\n if (typeof code !== 'string') return null\n\n if (code.length === 2) {\n return search('iso2', code.toUpperCase())\n }\n\n if (code.length === 3) {\n return search('iso3', code.toUpperCase())\n }\n\n throw new Error('cannot determine ISO code type')\n}\n\nmodule.exports.byInternet = function(code) {\n if (typeof code !== 'string') return null\n return search('internet', code.toUpperCase())\n}\n\nmodule.exports.byCountry = function(country) {\n if (typeof country !== 'string') return null\n return search('country', country)\n}\n\nfunction search(field, code) {\n for (var i = 0; i < countries.length; i++) {\n if (countries[i][field] === code) {\n return countries[i]\n }\n }\n return null\n}\n\nvar countries = [\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Afghanistan',\n capital: 'Kabul',\n fips: 'AF',\n iso2: 'AF',\n iso3: 'AFG',\n isoNo: '004',\n internet: 'AF'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Albania',\n capital: 'Tirana',\n fips: 'AL',\n iso2: 'AL',\n iso3: 'ALB',\n isoNo: '008',\n internet: 'AL'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Algeria',\n capital: 'Algiers',\n fips: 'AG',\n iso2: 'DZ',\n iso3: 'DZA',\n isoNo: '012',\n internet: 'DZ'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'American Samoa',\n capital: 'Pago Pago',\n fips: 'AQ',\n iso2: 'AS',\n iso3: 'ASM',\n isoNo: '016',\n internet: 'AS'\n },\n {\n continent: 'Europe',\n region: 'South West Europe',\n country: 'Andorra',\n capital: 'Andorra la Vella',\n fips: 'AN',\n iso2: 'AD',\n iso3: 'AND',\n isoNo: '020',\n internet: 'AD'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Angola',\n capital: 'Luanda',\n fips: 'AO',\n iso2: 'AO',\n iso3: 'AGO',\n isoNo: '024',\n internet: 'AO'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Anguilla',\n capital: 'The Valley',\n fips: 'AV',\n iso2: 'AI',\n iso3: 'AIA',\n isoNo: '660',\n internet: 'AI'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Antigua and Barbuda',\n capital: \"Saint John's\",\n fips: 'AC',\n iso2: 'AG',\n iso3: 'ATG',\n isoNo: '028',\n internet: 'AG'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Argentina',\n capital: 'Buenos Aires',\n fips: 'AR',\n iso2: 'AR',\n iso3: 'ARG',\n isoNo: '032',\n internet: 'AR'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Armenia',\n capital: 'Yerevan',\n fips: 'AM',\n iso2: 'AM',\n iso3: 'ARM',\n isoNo: '051',\n internet: 'AM'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Aruba',\n capital: 'Oranjestad',\n fips: 'AA',\n iso2: 'AW',\n iso3: 'ABW',\n isoNo: '533',\n internet: 'AW'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Australia',\n capital: 'Canberra',\n fips: 'AS',\n iso2: 'AU',\n iso3: 'AUS',\n isoNo: '036',\n internet: 'AU'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Austria',\n capital: 'Vienna',\n fips: 'AU',\n iso2: 'AT',\n iso3: 'AUT',\n isoNo: '040',\n internet: 'AT'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Azerbaijan',\n capital: 'Baku (Baki)',\n fips: 'AJ',\n iso2: 'AZ',\n iso3: 'AZE',\n isoNo: '031',\n internet: 'AZ'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'The Bahamas',\n capital: 'Nassau',\n fips: 'BF',\n iso2: 'BS',\n iso3: 'BHS',\n isoNo: '044',\n internet: 'BS'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Bahrain',\n capital: 'Manama',\n fips: 'BA',\n iso2: 'BH',\n iso3: 'BHR',\n isoNo: '048',\n internet: 'BH'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Bangladesh',\n capital: 'Dhaka',\n fips: 'BG',\n iso2: 'BD',\n iso3: 'BGD',\n isoNo: '050',\n internet: 'BD'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Barbados',\n capital: 'Bridgetown',\n fips: 'BB',\n iso2: 'BB',\n iso3: 'BRB',\n isoNo: '052',\n internet: 'BB'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Belarus',\n capital: 'Minsk',\n fips: 'BO',\n iso2: 'BY',\n iso3: 'BLR',\n isoNo: '112',\n internet: 'BY'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Belgium',\n capital: 'Brussels',\n fips: 'BE',\n iso2: 'BE',\n iso3: 'BEL',\n isoNo: '056',\n internet: 'BE'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Belize',\n capital: 'Belmopan',\n fips: 'BH',\n iso2: 'BZ',\n iso3: 'BLZ',\n isoNo: '084',\n internet: 'BZ'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Benin',\n capital: 'Porto-Novo',\n fips: 'BN',\n iso2: 'BJ',\n iso3: 'BEN',\n isoNo: '204',\n internet: 'BJ'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Bermuda',\n capital: 'Hamilton',\n fips: 'BD',\n iso2: 'BM',\n iso3: 'BMU',\n isoNo: '060',\n internet: 'BM'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Bhutan',\n capital: 'Thimphu',\n fips: 'BT',\n iso2: 'BT',\n iso3: 'BTN',\n isoNo: '064',\n internet: 'BT'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Bolivia',\n capital: 'La Paz / Sucre',\n fips: 'BL',\n iso2: 'BO',\n iso3: 'BOL',\n isoNo: '068',\n internet: 'BO'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Bosnia and Herzegovina',\n capital: 'Sarajevo',\n fips: 'BK',\n iso2: 'BA',\n iso3: 'BIH',\n isoNo: '070',\n internet: 'BA'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Botswana',\n capital: 'Gaborone',\n fips: 'BC',\n iso2: 'BW',\n iso3: 'BWA',\n isoNo: '072',\n internet: 'BW'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Brazil',\n capital: 'Brasilia',\n fips: 'BR',\n iso2: 'BR',\n iso3: 'BRA',\n isoNo: '076',\n internet: 'BR'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'British Virgin Islands',\n capital: 'Road Town',\n fips: 'VI',\n iso2: 'VG',\n iso3: 'VGB',\n isoNo: '092',\n internet: 'VG'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Brunei',\n capital: 'Bandar Seri Begawan',\n fips: 'BX',\n iso2: 'BN',\n iso3: 'BRN',\n isoNo: '096',\n internet: 'BN'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Bulgaria',\n capital: 'Sofia',\n fips: 'BU',\n iso2: 'BG',\n iso3: 'BGR',\n isoNo: '100',\n internet: 'BG'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Burkina Faso',\n capital: 'Ouagadougou',\n fips: 'UV',\n iso2: 'BF',\n iso3: 'BFA',\n isoNo: '854',\n internet: 'BF'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Burundi',\n capital: 'Bujumbura',\n fips: 'BY',\n iso2: 'BI',\n iso3: 'BDI',\n isoNo: '108',\n internet: 'BI'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Cambodia',\n capital: 'Phnom Penh',\n fips: 'CB',\n iso2: 'KH',\n iso3: 'KHM',\n isoNo: '116',\n internet: 'KH'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Cameroon',\n capital: 'Yaounde',\n fips: 'CM',\n iso2: 'CM',\n iso3: 'CMR',\n isoNo: '120',\n internet: 'CM'\n },\n {\n continent: 'Americas',\n region: 'North America',\n country: 'Canada',\n capital: 'Ottawa',\n fips: 'CA',\n iso2: 'CA',\n iso3: 'CAN',\n isoNo: '124',\n internet: 'CA'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Cape Verde',\n capital: 'Praia',\n fips: 'CV',\n iso2: 'CV',\n iso3: 'CPV',\n isoNo: '132',\n internet: 'CV'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Cayman Islands',\n capital: 'George Town',\n fips: 'CJ',\n iso2: 'KY',\n iso3: 'CYM',\n isoNo: '136',\n internet: 'KY'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Central African Republic',\n capital: 'Bangui',\n fips: 'CT',\n iso2: 'CF',\n iso3: 'CAF',\n isoNo: '140',\n internet: 'CF'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Chad',\n capital: \"N'Djamena\",\n fips: 'CD',\n iso2: 'TD',\n iso3: 'TCD',\n isoNo: '148',\n internet: 'TD'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Chile',\n capital: 'Santiago',\n fips: 'CI',\n iso2: 'CL',\n iso3: 'CHL',\n isoNo: '152',\n internet: 'CL'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'China',\n capital: 'Beijing',\n fips: 'CH',\n iso2: 'CN',\n iso3: 'CHN',\n isoNo: '156',\n internet: 'CN'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Christmas Island',\n capital: 'The Settlement',\n fips: 'KT',\n iso2: 'CX',\n iso3: 'CXR',\n isoNo: '162',\n internet: 'CX'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Cocos (Keeling) Islands',\n capital: 'West Island',\n fips: 'CK',\n iso2: 'CC',\n iso3: 'CCK',\n isoNo: '166',\n internet: 'CC'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Colombia',\n capital: 'Bogota',\n fips: 'CO',\n iso2: 'CO',\n iso3: 'COL',\n isoNo: '170',\n internet: 'CO'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Comoros',\n capital: 'Moroni',\n fips: 'CN',\n iso2: 'KM',\n iso3: 'COM',\n isoNo: '174',\n internet: 'KM'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Republic of the Congo',\n capital: 'Brazzaville',\n fips: 'CF',\n iso2: 'CG',\n iso3: 'COG',\n isoNo: '178',\n internet: 'CG'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Cook Islands',\n capital: 'Avarua',\n fips: 'CW',\n iso2: 'CK',\n iso3: 'COK',\n isoNo: '184',\n internet: 'CK'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Costa Rica',\n capital: 'San Jose',\n fips: 'CS',\n iso2: 'CR',\n iso3: 'CRI',\n isoNo: '188',\n internet: 'CR'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: \"Cote d'Ivoire\",\n capital: 'Yamoussoukro',\n fips: 'IV',\n iso2: 'CI',\n iso3: 'CIV',\n isoNo: '384',\n internet: 'CI'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Croatia',\n capital: 'Zagreb',\n fips: 'HR',\n iso2: 'HR',\n iso3: 'HRV',\n isoNo: '191',\n internet: 'HR'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Cuba',\n capital: 'Havana',\n fips: 'CU',\n iso2: 'CU',\n iso3: 'CUB',\n isoNo: '192',\n internet: 'CU'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Cyprus',\n capital: 'Nicosia',\n fips: 'CY',\n iso2: 'CY',\n iso3: 'CYP',\n isoNo: '196',\n internet: 'CY'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Czechia',\n capital: 'Prague',\n fips: 'EZ',\n iso2: 'CZ',\n iso3: 'CZE',\n isoNo: '203',\n internet: 'CZ'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Denmark',\n capital: 'Copenhagen',\n fips: 'DA',\n iso2: 'DK',\n iso3: 'DNK',\n isoNo: '208',\n internet: 'DK'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Djibouti',\n capital: 'Djibouti',\n fips: 'DJ',\n iso2: 'DJ',\n iso3: 'DJI',\n isoNo: '262',\n internet: 'DJ'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Dominica',\n capital: 'Roseau',\n fips: 'DO',\n iso2: 'DM',\n iso3: 'DMA',\n isoNo: '212',\n internet: 'DM'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Dominican Republic',\n capital: 'Santo Domingo',\n fips: 'DR',\n iso2: 'DO',\n iso3: 'DOM',\n isoNo: '214',\n internet: 'DO'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Ecuador',\n capital: 'Quito',\n fips: 'EC',\n iso2: 'EC',\n iso3: 'ECU',\n isoNo: '218',\n internet: 'EC'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Egypt',\n capital: 'Cairo',\n fips: 'EG',\n iso2: 'EG',\n iso3: 'EGY',\n isoNo: '818',\n internet: 'EG'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'El Salvador',\n capital: 'San Salvador',\n fips: 'ES',\n iso2: 'SV',\n iso3: 'SLV',\n isoNo: '222',\n internet: 'SV'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Equatorial Guinea',\n capital: 'Malabo',\n fips: 'EK',\n iso2: 'GQ',\n iso3: 'GNQ',\n isoNo: '226',\n internet: 'GQ'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Eritrea',\n capital: 'Asmara',\n fips: 'ER',\n iso2: 'ER',\n iso3: 'ERI',\n isoNo: '232',\n internet: 'ER'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Estonia',\n capital: 'Tallinn',\n fips: 'EN',\n iso2: 'EE',\n iso3: 'EST',\n isoNo: '233',\n internet: 'EE'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Ethiopia',\n capital: 'Addis Ababa',\n fips: 'ET',\n iso2: 'ET',\n iso3: 'ETH',\n isoNo: '231',\n internet: 'ET'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Falkland Islands (Islas Malvinas)',\n capital: 'Stanley',\n fips: 'FA',\n iso2: 'FK',\n iso3: 'FLK',\n isoNo: '238',\n internet: 'FK'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Faroe Islands',\n capital: 'Torshavn',\n fips: 'FO',\n iso2: 'FO',\n iso3: 'FRO',\n isoNo: '234',\n internet: 'FO'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Fiji',\n capital: 'Suva',\n fips: 'FJ',\n iso2: 'FJ',\n iso3: 'FJI',\n isoNo: '242',\n internet: 'FJ'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Finland',\n capital: 'Helsinki',\n fips: 'FI',\n iso2: 'FI',\n iso3: 'FIN',\n isoNo: '246',\n internet: 'FI'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'France',\n capital: 'Paris',\n fips: 'FR',\n iso2: 'FR',\n iso3: 'FRA',\n isoNo: '250',\n internet: 'FR'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'French Guiana',\n capital: 'Cayenne',\n fips: 'FG',\n iso2: 'GF',\n iso3: 'GUF',\n isoNo: '254',\n internet: 'GF'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'French Polynesia',\n capital: 'Papeete',\n fips: 'FP',\n iso2: 'PF',\n iso3: 'PYF',\n isoNo: '258',\n internet: 'PF'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Gabon',\n capital: 'Libreville',\n fips: 'GB',\n iso2: 'GA',\n iso3: 'GAB',\n isoNo: '266',\n internet: 'GA'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'The Gambia',\n capital: 'Banjul',\n fips: 'GA',\n iso2: 'GM',\n iso3: 'GMB',\n isoNo: '270',\n internet: 'GM'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Georgia',\n capital: \"T'bilisi\",\n fips: 'GG',\n iso2: 'GE',\n iso3: 'GEO',\n isoNo: '268',\n internet: 'GE'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Germany',\n capital: 'Berlin',\n fips: 'GM',\n iso2: 'DE',\n iso3: 'DEU',\n isoNo: '276',\n internet: 'DE'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Ghana',\n capital: 'Accra',\n fips: 'GH',\n iso2: 'GH',\n iso3: 'GHA',\n isoNo: '288',\n internet: 'GH'\n },\n {\n continent: 'Europe',\n region: 'South West Europe',\n country: 'Gibraltar',\n capital: 'Gibraltar',\n fips: 'GI',\n iso2: 'GI',\n iso3: 'GIB',\n isoNo: '292',\n internet: 'GI'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Greece',\n capital: 'Athens',\n fips: 'GR',\n iso2: 'GR',\n iso3: 'GRC',\n isoNo: '300',\n internet: 'GR'\n },\n {\n continent: 'Americas',\n region: 'North America',\n country: 'Greenland',\n capital: 'Nuuk (Godthab)',\n fips: 'GL',\n iso2: 'GL',\n iso3: 'GRL',\n isoNo: '304',\n internet: 'GL'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Grenada',\n capital: \"Saint George's\",\n fips: 'GJ',\n iso2: 'GD',\n iso3: 'GRD',\n isoNo: '308',\n internet: 'GD'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Guadeloupe',\n capital: 'Basse-Terre',\n fips: 'GP',\n iso2: 'GP',\n iso3: 'GLP',\n isoNo: '312',\n internet: 'GP'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Guam',\n capital: 'Hagatna (Agana)',\n fips: 'GQ',\n iso2: 'GU',\n iso3: 'GUM',\n isoNo: '316',\n internet: 'GU'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Guatemala',\n capital: 'Guatemala',\n fips: 'GT',\n iso2: 'GT',\n iso3: 'GTM',\n isoNo: '320',\n internet: 'GT'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Guinea',\n capital: 'Conakry',\n fips: 'GV',\n iso2: 'GN',\n iso3: 'GIN',\n isoNo: '324',\n internet: 'GN'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Guinea-Bissau',\n capital: 'Bissau',\n fips: 'PU',\n iso2: 'GW',\n iso3: 'GNB',\n isoNo: '624',\n internet: 'GW'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Guyana',\n capital: 'Georgetown',\n fips: 'GY',\n iso2: 'GY',\n iso3: 'GUY',\n isoNo: '328',\n internet: 'GY'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Haiti',\n capital: 'Port-au-Prince',\n fips: 'HA',\n iso2: 'HT',\n iso3: 'HTI',\n isoNo: '332',\n internet: 'HT'\n },\n {\n continent: 'Europe',\n region: 'Southern Europe',\n country: 'Holy See (Vatican City)',\n capital: 'Vatican City',\n fips: 'VT',\n iso2: 'VA',\n iso3: 'VAT',\n isoNo: '336',\n internet: 'VA'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Honduras',\n capital: 'Tegucigalpa',\n fips: 'HO',\n iso2: 'HN',\n iso3: 'HND',\n isoNo: '340',\n internet: 'HN'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Hungary',\n capital: 'Budapest',\n fips: 'HU',\n iso2: 'HU',\n iso3: 'HUN',\n isoNo: '348',\n internet: 'HU'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Iceland',\n capital: 'Reykjavik',\n fips: 'IC',\n iso2: 'IS',\n iso3: 'ISL',\n isoNo: '352',\n internet: 'IS'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'India',\n capital: 'New Delhi',\n fips: 'IN',\n iso2: 'IN',\n iso3: 'IND',\n isoNo: '356',\n internet: 'IN'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Indonesia',\n capital: 'Jakarta',\n fips: 'ID',\n iso2: 'ID',\n iso3: 'IDN',\n isoNo: '360',\n internet: 'ID'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Iran',\n capital: 'Tehran',\n fips: 'IR',\n iso2: 'IR',\n iso3: 'IRN',\n isoNo: '364',\n internet: 'IR'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Iraq',\n capital: 'Baghdad',\n fips: 'IZ',\n iso2: 'IQ',\n iso3: 'IRQ',\n isoNo: '368',\n internet: 'IQ'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Ireland',\n capital: 'Dublin',\n fips: 'EI',\n iso2: 'IE',\n iso3: 'IRL',\n isoNo: '372',\n internet: 'IE'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Israel',\n capital: 'Jerusalem',\n fips: 'IS',\n iso2: 'IL',\n iso3: 'ISR',\n isoNo: '376',\n internet: 'IL'\n },\n {\n continent: 'Europe',\n region: 'Southern Europe',\n country: 'Italy',\n capital: 'Rome',\n fips: 'IT',\n iso2: 'IT',\n iso3: 'ITA',\n isoNo: '380',\n internet: 'IT'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Jamaica',\n capital: 'Kingston',\n fips: 'JM',\n iso2: 'JM',\n iso3: 'JAM',\n isoNo: '388',\n internet: 'JM'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'Japan',\n capital: 'Tokyo',\n fips: 'JA',\n iso2: 'JP',\n iso3: 'JPN',\n isoNo: '392',\n internet: 'JP'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Jordan',\n capital: 'Amman',\n fips: 'JO',\n iso2: 'JO',\n iso3: 'JOR',\n isoNo: '400',\n internet: 'JO'\n },\n {\n continent: 'Asia',\n region: 'Central Asia',\n country: 'Kazakhstan',\n capital: 'Astana (Akmola)',\n fips: 'KZ',\n iso2: 'KZ',\n iso3: 'KAZ',\n isoNo: '398',\n internet: 'KZ'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Kenya',\n capital: 'Nairobi',\n fips: 'KE',\n iso2: 'KE',\n iso3: 'KEN',\n isoNo: '404',\n internet: 'KE'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Kiribati',\n capital: 'Tarawa',\n fips: 'KR',\n iso2: 'KI',\n iso3: 'KIR',\n isoNo: '296',\n internet: 'KI'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'North Korea',\n capital: \"P'yongyang\",\n fips: 'KN',\n iso2: 'KP',\n iso3: 'PRK',\n isoNo: '408',\n internet: 'KP'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'South Korea',\n capital: 'Seoul',\n fips: 'KS',\n iso2: 'KR',\n iso3: 'KOR',\n isoNo: '410',\n internet: 'KR'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Kuwait',\n capital: 'Kuwait',\n fips: 'KU',\n iso2: 'KW',\n iso3: 'KWT',\n isoNo: '414',\n internet: 'KW'\n },\n {\n continent: 'Asia',\n region: 'Central Asia',\n country: 'Kyrgyzstan',\n capital: 'Bishkek',\n fips: 'KG',\n iso2: 'KG',\n iso3: 'KGZ',\n isoNo: '417',\n internet: 'KG'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Laos',\n capital: 'Vientiane',\n fips: 'LA',\n iso2: 'LA',\n iso3: 'LAO',\n isoNo: '418',\n internet: 'LA'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Latvia',\n capital: 'Riga',\n fips: 'LG',\n iso2: 'LV',\n iso3: 'LVA',\n isoNo: '428',\n internet: 'LV'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Lebanon',\n capital: 'Beirut',\n fips: 'LE',\n iso2: 'LB',\n iso3: 'LBN',\n isoNo: '422',\n internet: 'LB'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Lesotho',\n capital: 'Maseru',\n fips: 'LT',\n iso2: 'LS',\n iso3: 'LSO',\n isoNo: '426',\n internet: 'LS'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Liberia',\n capital: 'Monrovia',\n fips: 'LI',\n iso2: 'LR',\n iso3: 'LBR',\n isoNo: '430',\n internet: 'LR'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Libya',\n capital: 'Tripoli',\n fips: 'LY',\n iso2: 'LY',\n iso3: 'LBY',\n isoNo: '434',\n internet: 'LY'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Liechtenstein',\n capital: 'Vaduz',\n fips: 'LS',\n iso2: 'LI',\n iso3: 'LIE',\n isoNo: '438',\n internet: 'LI'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Lithuania',\n capital: 'Vilnius',\n fips: 'LH',\n iso2: 'LT',\n iso3: 'LTU',\n isoNo: '440',\n internet: 'LT'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Luxembourg',\n capital: 'Luxembourg',\n fips: 'LU',\n iso2: 'LU',\n iso3: 'LUX',\n isoNo: '442',\n internet: 'LU'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'North Macedonia',\n capital: 'Skopje',\n fips: 'MK',\n iso2: 'MK',\n iso3: 'MKD',\n isoNo: '807',\n internet: 'MK'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Madagascar',\n capital: 'Antananarivo',\n fips: 'MA',\n iso2: 'MG',\n iso3: 'MDG',\n isoNo: '450',\n internet: 'MG'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Malawi',\n capital: 'Lilongwe',\n fips: 'MI',\n iso2: 'MW',\n iso3: 'MWI',\n isoNo: '454',\n internet: 'MW'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Malaysia',\n capital: 'Kuala Lumpur',\n fips: 'MY',\n iso2: 'MY',\n iso3: 'MYS',\n isoNo: '458',\n internet: 'MY'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Maldives',\n capital: 'Male (Maale)',\n fips: 'MV',\n iso2: 'MV',\n iso3: 'MDV',\n isoNo: '462',\n internet: 'MV'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Mali',\n capital: 'Bamako',\n fips: 'ML',\n iso2: 'ML',\n iso3: 'MLI',\n isoNo: '466',\n internet: 'ML'\n },\n {\n continent: 'Europe',\n region: 'Southern Europe',\n country: 'Malta',\n capital: 'Valletta',\n fips: 'MT',\n iso2: 'MT',\n iso3: 'MLT',\n isoNo: '470',\n internet: 'MT'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Isle of Man',\n capital: 'Douglas',\n fips: 'IM',\n iso2: 'IM',\n iso3: 'IMN',\n isoNo: '833',\n internet: 'IM'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Marshall Islands',\n capital: 'Majuro',\n fips: 'RM',\n iso2: 'MH',\n iso3: 'MHL',\n isoNo: '584',\n internet: 'MH'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Martinique',\n capital: 'Fort-de-France',\n fips: 'MB',\n iso2: 'MQ',\n iso3: 'MTQ',\n isoNo: '474',\n internet: 'MQ'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Mauritania',\n capital: 'Nouakchott',\n fips: 'MR',\n iso2: 'MR',\n iso3: 'MRT',\n isoNo: '478',\n internet: 'MR'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Mauritius',\n capital: 'Port Louis',\n fips: 'MP',\n iso2: 'MU',\n iso3: 'MUS',\n isoNo: '480',\n internet: 'MU'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Mayotte',\n capital: 'Mamoutzou',\n fips: 'MF',\n iso2: 'YT',\n iso3: 'MYT',\n isoNo: '175',\n internet: 'YT'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Mexico',\n capital: 'Mexico',\n fips: 'MX',\n iso2: 'MX',\n iso3: 'MEX',\n isoNo: '484',\n internet: 'MX'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Federated States of Micronesia',\n capital: 'Palikir',\n fips: '',\n iso2: 'FM',\n iso3: 'FSM',\n isoNo: '583',\n internet: 'FM'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Moldova',\n capital: 'Chisinau',\n fips: 'MD',\n iso2: 'MD',\n iso3: 'MDA',\n isoNo: '498',\n internet: 'MD'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Monaco',\n capital: 'Monaco',\n fips: 'MN',\n iso2: 'MC',\n iso3: 'MCO',\n isoNo: '492',\n internet: 'MC'\n },\n {\n continent: 'Asia',\n region: 'Northern Asia',\n country: 'Mongolia',\n capital: 'Ulaanbaatar',\n fips: 'MG',\n iso2: 'MN',\n iso3: 'MNG',\n isoNo: '496',\n internet: 'MN'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Montserrat',\n capital: 'Plymouth',\n fips: 'MH',\n iso2: 'MS',\n iso3: 'MSR',\n isoNo: '500',\n internet: 'MS'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Morocco',\n capital: 'Rabat',\n fips: 'MO',\n iso2: 'MA',\n iso3: 'MAR',\n isoNo: '504',\n internet: 'MA'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Mozambique',\n capital: 'Maputo',\n fips: 'MZ',\n iso2: 'MZ',\n iso3: 'MOZ',\n isoNo: '508',\n internet: 'MZ'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Myanmar (Burma)',\n capital: 'Rangoon (Yangon)',\n fips: 'BM',\n iso2: 'MM',\n iso3: 'MMR',\n isoNo: '104',\n internet: 'MM'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Namibia',\n capital: 'Windhoek',\n fips: 'WA',\n iso2: 'NA',\n iso3: 'NAM',\n isoNo: '516',\n internet: 'NA'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Nauru',\n capital: 'no official capital',\n fips: 'NR',\n iso2: 'NR',\n iso3: 'NRU',\n isoNo: '520',\n internet: 'NR'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Nepal',\n capital: 'Kathmandu',\n fips: 'NP',\n iso2: 'NP',\n iso3: 'NPL',\n isoNo: '524',\n internet: 'NP'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Netherlands',\n capital: 'Amsterdam',\n fips: 'NL',\n iso2: 'NL',\n iso3: 'NLD',\n isoNo: '528',\n internet: 'NL'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Netherlands Antilles',\n capital: 'Willemstad',\n fips: 'NT',\n iso2: 'AN',\n iso3: 'ANT',\n isoNo: '530',\n internet: 'AN'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'New Caledonia',\n capital: 'Noumea',\n fips: 'NC',\n iso2: 'NC',\n iso3: 'NCL',\n isoNo: '540',\n internet: 'NC'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'New Zealand',\n capital: 'Wellington',\n fips: 'NZ',\n iso2: 'NZ',\n iso3: 'NZL',\n isoNo: '554',\n internet: 'NZ'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Nicaragua',\n capital: 'Managua',\n fips: 'NU',\n iso2: 'NI',\n iso3: 'NIC',\n isoNo: '558',\n internet: 'NI'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Niger',\n capital: 'Niamey',\n fips: 'NG',\n iso2: 'NE',\n iso3: 'NER',\n isoNo: '562',\n internet: 'NE'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Nigeria',\n capital: 'Abuja',\n fips: 'NI',\n iso2: 'NG',\n iso3: 'NGA',\n isoNo: '566',\n internet: 'NG'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Niue',\n capital: 'Alofi',\n fips: 'NE',\n iso2: 'NU',\n iso3: 'NIU',\n isoNo: '570',\n internet: 'NU'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Norfolk Island',\n capital: 'Kingston',\n fips: 'NF',\n iso2: 'NF',\n iso3: 'NFK',\n isoNo: '574',\n internet: 'NF'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Northern Mariana Islands',\n capital: 'Saipan',\n fips: 'CQ',\n iso2: 'MP',\n iso3: 'MNP',\n isoNo: '580',\n internet: 'MP'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Norway',\n capital: 'Oslo',\n fips: 'NO',\n iso2: 'NO',\n iso3: 'NOR',\n isoNo: '578',\n internet: 'NO'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Oman',\n capital: 'Muscat',\n fips: 'MU',\n iso2: 'OM',\n iso3: 'OMN',\n isoNo: '512',\n internet: 'OM'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Pakistan',\n capital: 'Islamabad',\n fips: 'PK',\n iso2: 'PK',\n iso3: 'PAK',\n isoNo: '586',\n internet: 'PK'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Palau',\n capital: 'Koror',\n fips: 'PS',\n iso2: 'PW',\n iso3: 'PLW',\n isoNo: '585',\n internet: 'PW'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Palestinian Territory',\n capital: 'East Jerusalem',\n fips: 'WE',\n iso2: 'PS',\n iso3: 'PSE',\n isoNo: '275',\n internet: 'PS'\n },\n {\n continent: 'Americas',\n region: 'Central America',\n country: 'Panama',\n capital: 'Panama',\n fips: 'PM',\n iso2: 'PA',\n iso3: 'PAN',\n isoNo: '591',\n internet: 'PA'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Papua New Guinea',\n capital: 'Port Moresby',\n fips: 'PP',\n iso2: 'PG',\n iso3: 'PNG',\n isoNo: '598',\n internet: 'PG'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Paraguay',\n capital: 'Asuncion',\n fips: 'PA',\n iso2: 'PY',\n iso3: 'PRY',\n isoNo: '600',\n internet: 'PY'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Peru',\n capital: 'Lima',\n fips: 'PE',\n iso2: 'PE',\n iso3: 'PER',\n isoNo: '604',\n internet: 'PE'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Philippines',\n capital: 'Manila',\n fips: 'RP',\n iso2: 'PH',\n iso3: 'PHL',\n isoNo: '608',\n internet: 'PH'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Pitcairn Islands',\n capital: 'Adamstown',\n fips: 'PC',\n iso2: 'PN',\n iso3: 'PCN',\n isoNo: '612',\n internet: 'PN'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Poland',\n capital: 'Warsaw',\n fips: 'PL',\n iso2: 'PL',\n iso3: 'POL',\n isoNo: '616',\n internet: 'PL'\n },\n {\n continent: 'Europe',\n region: 'South West Europe',\n country: 'Portugal',\n capital: 'Lisbon',\n fips: 'PO',\n iso2: 'PT',\n iso3: 'PRT',\n isoNo: '620',\n internet: 'PT'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Puerto Rico',\n capital: 'San Juan',\n fips: 'RQ',\n iso2: 'PR',\n iso3: 'PRI',\n isoNo: '630',\n internet: 'PR'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Qatar',\n capital: 'Doha',\n fips: 'QA',\n iso2: 'QA',\n iso3: 'QAT',\n isoNo: '634',\n internet: 'QA'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Reunion',\n capital: 'Saint-Denis',\n fips: 'RE',\n iso2: 'RE',\n iso3: 'REU',\n isoNo: '638',\n internet: 'RE'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Romania',\n capital: 'Bucharest',\n fips: 'RO',\n iso2: 'RO',\n iso3: 'ROU',\n isoNo: '642',\n internet: 'RO'\n },\n {\n continent: 'Asia',\n region: 'Northern Asia',\n country: 'Russia',\n capital: 'Moscow',\n fips: 'RS',\n iso2: 'RU',\n iso3: 'RUS',\n isoNo: '643',\n internet: 'RU'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Rwanda',\n capital: 'Kigali',\n fips: 'RW',\n iso2: 'RW',\n iso3: 'RWA',\n isoNo: '646',\n internet: 'RW'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Saint Kitts and Nevis',\n capital: 'Basseterre',\n fips: 'SC',\n iso2: 'KN',\n iso3: 'KNA',\n isoNo: '659',\n internet: 'KN'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Saint Lucia',\n capital: 'Castries',\n fips: 'ST',\n iso2: 'LC',\n iso3: 'LCA',\n isoNo: '662',\n internet: 'LC'\n },\n {\n continent: 'Americas',\n region: 'North America',\n country: 'Saint Pierre and Miquelon',\n capital: 'Saint-Pierre',\n fips: 'SB',\n iso2: 'PM',\n iso3: 'SPM',\n isoNo: '666',\n internet: 'PM'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Saint Vincent and the Grenadines',\n capital: 'Kingstown',\n fips: 'VC',\n iso2: 'VC',\n iso3: 'VCT',\n isoNo: '670',\n internet: 'VC'\n },\n {\n continent: 'Europe',\n region: 'Southern Europe',\n country: 'San Marino',\n capital: 'San Marino',\n fips: 'SM',\n iso2: 'SM',\n iso3: 'SMR',\n isoNo: '674',\n internet: 'SM'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Sao Tome and Principe',\n capital: 'Sao Tome',\n fips: 'TP',\n iso2: 'ST',\n iso3: 'STP',\n isoNo: '678',\n internet: 'ST'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Saudi Arabia',\n capital: 'Riyadh',\n fips: 'SA',\n iso2: 'SA',\n iso3: 'SAU',\n isoNo: '682',\n internet: 'SA'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Senegal',\n capital: 'Dakar',\n fips: 'SG',\n iso2: 'SN',\n iso3: 'SEN',\n isoNo: '686',\n internet: 'SN'\n },\n {\n continent: 'Africa',\n region: 'Indian Ocean',\n country: 'Seychelles',\n capital: 'Victoria',\n fips: 'SE',\n iso2: 'SC',\n iso3: 'SYC',\n isoNo: '690',\n internet: 'SC'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Sierra Leone',\n capital: 'Freetown',\n fips: 'SL',\n iso2: 'SL',\n iso3: 'SLE',\n isoNo: '694',\n internet: 'SL'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Singapore',\n capital: 'Singapore',\n fips: 'SN',\n iso2: 'SG',\n iso3: 'SGP',\n isoNo: '702',\n internet: 'SG'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Slovakia',\n capital: 'Bratislava',\n fips: 'LO',\n iso2: 'SK',\n iso3: 'SVK',\n isoNo: '703',\n internet: 'SK'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Slovenia',\n capital: 'Ljubljana',\n fips: 'SI',\n iso2: 'SI',\n iso3: 'SVN',\n isoNo: '705',\n internet: 'SI'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Solomon Islands',\n capital: 'Honiara',\n fips: 'BP',\n iso2: 'SB',\n iso3: 'SLB',\n isoNo: '090',\n internet: 'SB'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Somalia',\n capital: 'Mogadishu',\n fips: 'SO',\n iso2: 'SO',\n iso3: 'SOM',\n isoNo: '706',\n internet: 'SO'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'South Africa',\n capital: 'Pretoria��',\n fips: 'SF',\n iso2: 'ZA',\n iso3: 'ZAF',\n isoNo: '710',\n internet: 'ZA'\n },\n {\n continent: 'Europe',\n region: 'South West Europe',\n country: 'Spain',\n capital: 'Madrid',\n fips: 'SP',\n iso2: 'ES',\n iso3: 'ESP',\n isoNo: '724',\n internet: 'ES'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'Sri Lanka',\n capital: 'Colombo',\n fips: 'CE',\n iso2: 'LK',\n iso3: 'LKA',\n isoNo: '144',\n internet: 'LK'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Sudan',\n capital: 'Khartoum',\n fips: 'SU',\n iso2: 'SD',\n iso3: 'SDN',\n isoNo: '729',\n internet: 'SD'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Suriname',\n capital: 'Paramaribo',\n fips: 'NS',\n iso2: 'SR',\n iso3: 'SUR',\n isoNo: '740',\n internet: 'SR'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Svalbard',\n capital: 'Longyearbyen',\n fips: 'SV',\n iso2: 'SJ',\n iso3: 'SJM',\n isoNo: '744',\n internet: 'SJ'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Eswatini',\n capital: 'Mbabane',\n fips: 'WZ',\n iso2: 'SZ',\n iso3: 'SWZ',\n isoNo: '748',\n internet: 'SZ'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Sweden',\n capital: 'Stockholm',\n fips: 'SW',\n iso2: 'SE',\n iso3: 'SWE',\n isoNo: '752',\n internet: 'SE'\n },\n {\n continent: 'Europe',\n region: 'Central Europe',\n country: 'Switzerland',\n capital: 'Bern',\n fips: 'SZ',\n iso2: 'CH',\n iso3: 'CHE',\n isoNo: '756',\n internet: 'CH'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Syria',\n capital: 'Damascus',\n fips: 'SY',\n iso2: 'SY',\n iso3: 'SYR',\n isoNo: '760',\n internet: 'SY'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'Taiwan',\n capital: 'Taipei',\n fips: 'TW',\n iso2: 'TW',\n iso3: 'TWN',\n isoNo: '158',\n internet: 'TW'\n },\n {\n continent: 'Asia',\n region: 'Central Asia',\n country: 'Tajikistan',\n capital: 'Dushanbe',\n fips: 'TI',\n iso2: 'TJ',\n iso3: 'TJK',\n isoNo: '762',\n internet: 'TJ'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Tanzania',\n capital: 'Dar es Salaam',\n fips: 'TZ',\n iso2: 'TZ',\n iso3: 'TZA',\n isoNo: '834',\n internet: 'TZ'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Thailand',\n capital: 'Bangkok',\n fips: 'TH',\n iso2: 'TH',\n iso3: 'THA',\n isoNo: '764',\n internet: 'TH'\n },\n {\n continent: 'Africa',\n region: 'Western Africa',\n country: 'Togo',\n capital: 'Lome',\n fips: 'TO',\n iso2: 'TG',\n iso3: 'TGO',\n isoNo: '768',\n internet: 'TG'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Tokelau',\n capital: 'none',\n fips: 'TL',\n iso2: 'TK',\n iso3: 'TKL',\n isoNo: '772',\n internet: 'TK'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Tonga',\n capital: \"Nuku'alofa\",\n fips: 'TN',\n iso2: 'TO',\n iso3: 'TON',\n isoNo: '776',\n internet: 'TO'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Trinidad and Tobago',\n capital: 'Port-of-Spain',\n fips: 'TD',\n iso2: 'TT',\n iso3: 'TTO',\n isoNo: '780',\n internet: 'TT'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Tunisia',\n capital: 'Tunis',\n fips: 'TS',\n iso2: 'TN',\n iso3: 'TUN',\n isoNo: '788',\n internet: 'TN'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Turkiye',\n capital: 'Ankara',\n fips: 'TU',\n iso2: 'TR',\n iso3: 'TUR',\n isoNo: '792',\n internet: 'TR'\n },\n {\n continent: 'Asia',\n region: 'Central Asia',\n country: 'Turkmenistan',\n capital: 'Ashgabat',\n fips: 'TX',\n iso2: 'TM',\n iso3: 'TKM',\n isoNo: '795',\n internet: 'TM'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Turks and Caicos Islands',\n capital: 'Grand Turk',\n fips: 'TK',\n iso2: 'TC',\n iso3: 'TCA',\n isoNo: '796',\n internet: 'TC'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Tuvalu',\n capital: 'Funafuti',\n fips: 'TV',\n iso2: 'TV',\n iso3: 'TUV',\n isoNo: '798',\n internet: 'TV'\n },\n {\n continent: 'Africa',\n region: 'Eastern Africa',\n country: 'Uganda',\n capital: 'Kampala',\n fips: 'UG',\n iso2: 'UG',\n iso3: 'UGA',\n isoNo: '800',\n internet: 'UG'\n },\n {\n continent: 'Europe',\n region: 'Eastern Europe',\n country: 'Ukraine',\n capital: 'Kyiv',\n fips: 'UP',\n iso2: 'UA',\n iso3: 'UKR',\n isoNo: '804',\n internet: 'UA'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'United Arab Emirates',\n capital: 'Abu Dhabi',\n fips: 'TC',\n iso2: 'AE',\n iso3: 'ARE',\n isoNo: '784',\n internet: 'AE'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'United Kingdom',\n capital: 'London',\n fips: 'UK',\n iso2: 'GB',\n iso3: 'GBR',\n isoNo: '826',\n internet: 'UK'\n },\n {\n continent: 'Americas',\n region: 'North America',\n country: 'United States',\n capital: 'Washington DC',\n fips: 'US',\n iso2: 'US',\n iso3: 'USA',\n isoNo: '840',\n internet: 'US'\n },\n {\n continent: 'Americas',\n region: 'North America',\n country: 'United States Minor Outlying Islands',\n capital: 'Washington DC',\n fips: '',\n iso2: 'UM',\n iso3: 'UMI',\n isoNo: '581',\n internet: 'US'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Uruguay',\n capital: 'Montevideo',\n fips: 'UY',\n iso2: 'UY',\n iso3: 'URY',\n isoNo: '858',\n internet: 'UY'\n },\n {\n continent: 'Asia',\n region: 'Central Asia',\n country: 'Uzbekistan',\n capital: 'Tashkent (Toshkent)',\n fips: 'UZ',\n iso2: 'UZ',\n iso3: 'UZB',\n isoNo: '860',\n internet: 'UZ'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Vanuatu',\n capital: 'Port-Vila',\n fips: 'NH',\n iso2: 'VU',\n iso3: 'VUT',\n isoNo: '548',\n internet: 'VU'\n },\n {\n continent: 'Americas',\n region: 'South America',\n country: 'Venezuela',\n capital: 'Caracas',\n fips: 'VE',\n iso2: 'VE',\n iso3: 'VEN',\n isoNo: '862',\n internet: 'UE'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Vietnam',\n capital: 'Hanoi',\n fips: 'VN',\n iso2: 'VN',\n iso3: 'VNM',\n isoNo: '704',\n internet: 'VN'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Virgin Islands',\n capital: 'Charlotte Amalie',\n fips: 'VQ',\n iso2: 'VI',\n iso3: 'VIR',\n isoNo: '850',\n internet: 'VI'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Wallis and Futuna',\n capital: 'Mata-Utu (on Ile Uvea)',\n fips: 'WF',\n iso2: 'WF',\n iso3: 'WLF',\n isoNo: '876',\n internet: 'WF'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'Western Sahara',\n capital: 'none',\n fips: 'WI',\n iso2: 'EH',\n iso3: 'ESH',\n isoNo: '732',\n internet: 'EH'\n },\n {\n continent: 'Oceania',\n region: 'Pacific',\n country: 'Western Samoa',\n capital: 'Apia',\n fips: 'WS',\n iso2: 'WS',\n iso3: 'WSM',\n isoNo: '882',\n internet: 'WS'\n },\n {\n continent: 'Asia',\n region: 'South West Asia',\n country: 'Yemen',\n capital: 'Sanaa',\n fips: 'YM',\n iso2: 'YE',\n iso3: 'YEM',\n isoNo: '887',\n internet: 'YE'\n },\n {\n continent: 'Africa',\n region: 'Central Africa',\n country: 'Democratic Republic of the Congo',\n capital: 'Kinshasa',\n fips: 'CG',\n iso2: 'CD',\n iso3: 'COD',\n isoNo: '180',\n internet: 'ZR'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Zambia',\n capital: 'Lusaka',\n fips: 'ZA',\n iso2: 'ZM',\n iso3: 'ZMB',\n isoNo: '894',\n internet: 'ZM'\n },\n {\n continent: 'Africa',\n region: 'Southern Africa',\n country: 'Zimbabwe',\n capital: 'Harare',\n fips: 'ZI',\n iso2: 'ZW',\n iso3: 'ZWE',\n isoNo: '716',\n internet: 'ZW'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'Hong Kong',\n capital: 'Victoria',\n fips: 'HK',\n iso2: 'HK',\n iso3: 'HKG',\n isoNo: '344',\n internet: 'HK'\n },\n {\n continent: 'Asia',\n region: 'East Asia',\n country: 'Macau',\n capital: 'Macau',\n fips: 'MC',\n iso2: 'MO',\n iso3: 'MAC',\n isoNo: '446',\n internet: 'MO'\n },\n {\n continent: 'Antarctica',\n region: 'Antarctica',\n country: 'Antarctica',\n capital: '',\n fips: 'AY',\n iso2: 'AQ',\n iso3: 'ATA',\n isoNo: '010',\n internet: 'AQ'\n },\n {\n continent: 'Atlantic Ocean',\n region: 'South Atlantic Ocean',\n country: 'Bouvet Island',\n capital: '',\n fips: 'BV',\n iso2: 'BV',\n iso3: 'BVT',\n isoNo: '074',\n internet: 'BV'\n },\n {\n continent: 'Asia',\n region: 'South Asia',\n country: 'British Indian Ocean Territory',\n capital: '',\n fips: 'IO',\n iso2: 'IO',\n iso3: 'IOT',\n isoNo: '086',\n internet: 'IO'\n },\n {\n continent: 'Indian Ocean',\n region: 'Southern Indian Ocean',\n country: 'French Southern and Antarctic Lands',\n capital: '',\n fips: 'FS',\n iso2: 'TF',\n iso3: 'ATF',\n isoNo: '260',\n internet: '--'\n },\n {\n continent: 'Indian Ocean',\n region: 'Southern Indian Ocean',\n country: 'Heard Island and McDonald Islands',\n capital: '',\n fips: 'HM',\n iso2: 'HM',\n iso3: 'HMD',\n isoNo: '334',\n internet: 'HM'\n },\n {\n continent: 'Atlantic Ocean',\n region: 'South Atlantic Ocean',\n country: 'Saint Helena',\n capital: '',\n fips: 'SH',\n iso2: 'SH',\n iso3: 'SHN',\n isoNo: '654',\n internet: 'SH'\n },\n {\n continent: 'Atlantic Ocean',\n region: 'South Atlantic Ocean',\n country: 'South Georgia and the South Sandwich Islands',\n capital: '',\n fips: 'SX',\n iso2: 'GS',\n iso3: 'SGS',\n isoNo: '239',\n internet: 'GS'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Guernsey',\n capital: 'Saint Peter Port',\n fips: 'GK',\n iso2: 'GG',\n iso3: 'GGY',\n isoNo: '831',\n internet: 'GG'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Serbia',\n capital: 'Belgrade',\n fips: 'RI',\n iso2: 'RS',\n iso3: 'SRB',\n isoNo: '688',\n internet: 'RS'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Saint Barthélemy',\n capital: 'Gustavia',\n fips: 'TB',\n iso2: 'BL',\n iso3: 'BLM',\n isoNo: '652',\n internet: 'BL'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Montenegro',\n capital: 'Podgorica',\n fips: 'MJ',\n iso2: 'ME',\n iso3: 'MNE',\n isoNo: '499',\n internet: 'ME'\n },\n {\n continent: 'Europe',\n region: 'Western Europe',\n country: 'Jersey',\n capital: 'Saint Helier',\n fips: 'JE',\n iso2: 'JE',\n iso3: 'JEY',\n isoNo: '832',\n internet: 'JE'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Curaçao',\n capital: 'Willemstad',\n fips: 'UC',\n iso2: 'CW',\n iso3: 'CUW',\n isoNo: '531',\n internet: 'CW'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Saint Martin',\n capital: 'Marigot',\n fips: 'RN',\n iso2: 'MF',\n iso3: 'MAF',\n isoNo: '663',\n internet: 'MF'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Sint Maarten',\n capital: 'Philipsburg',\n fips: 'NN',\n iso2: 'SX',\n iso3: 'SXM',\n isoNo: '534',\n internet: 'SX'\n },\n {\n continent: 'Asia',\n region: 'South East Asia',\n country: 'Timor-Leste',\n capital: 'Dili',\n fips: 'TT',\n iso2: 'TL',\n iso3: 'TLS',\n isoNo: '626',\n internet: 'TL'\n },\n {\n continent: 'Africa',\n region: 'Northern Africa',\n country: 'South Sudan',\n capital: 'Juba',\n fips: 'OD',\n iso2: 'SS',\n iso3: 'SSD',\n isoNo: '728',\n internet: 'SS'\n },\n {\n continent: 'Europe',\n region: 'Northern Europe',\n country: 'Åland Islands',\n capital: 'Mariehamn',\n fips: 'AX',\n iso2: 'AX',\n iso3: 'ALA',\n isoNo: '248',\n internet: 'AX'\n },\n {\n continent: 'Americas',\n region: 'West Indies',\n country: 'Bonaire',\n capital: 'Kralendijk',\n fips: 'BQ',\n iso2: 'BQ',\n iso3: 'BES',\n isoNo: '535',\n internet: 'BQ'\n },\n {\n continent: 'Europe',\n region: 'South East Europe',\n country: 'Republic of Kosovo',\n capital: 'Pristina',\n fips: 'KV',\n iso2: 'XK',\n iso3: 'XKX',\n isoNo: null,\n internet: 'XK'\n },\n]\n\ncountries.forEach(Object.freeze)\nObject.freeze(countries)\n\nmodule.exports.countries = countries\n","import {\n Constituent,\n Current,\n CurrentOffsets,\n Datum,\n DatumsSource,\n Epoch,\n HeightOffsetType,\n Kind,\n License,\n Quality,\n QualityFactors,\n Root,\n Source,\n Station,\n StationRoute as StationRouteTable,\n StationType,\n TideDerivedCurrent,\n TideOffsets,\n} from \"../generated/fbs/slackwater.ts\";\nimport * as flatbuffers from \"flatbuffers\";\nimport countryLookup from \"country-code-lookup\";\nimport { attributionFor } from \"../attribution.ts\";\nimport type {\n DatabaseRoutes,\n StationInput,\n StationRouteInput,\n} from \"../types.js\";\n\n/**\n * Serialize stations into the FlatBuffers database format\n * (schemas/database.fbs). Stations are sorted by id — the vector key — so\n * readers can binary-search the buffer.\n *\n * Build order matters and the schema cannot express it: FlatBuffers writes back\n * to front, so the prediction data (constituents and datums vectors) is written\n * first for every station, landing together at the tail of the file, and the\n * station tables are written together after, landing at the head. A naive\n * per-station loop would interleave ~100 bytes of identity with ~1,300 bytes of\n * constituents, making an identity scan over a memory-mapped file fault in\n * every page. test/database.test.ts asserts the layout.\n */\nexport function buildDatabase(\n stations: StationInput[],\n {\n version,\n routes = { tide: [], current: [] },\n }: { version?: string; routes?: DatabaseRoutes } = {},\n): Uint8Array {\n // Ids are ASCII, so JS string order matches the strcmp order FlatBuffers key\n // lookup expects.\n const sorted = [...stations].sort((a, b) =>\n a.id < b.id ? -1 : a.id > b.id ? 1 : 0,\n );\n sorted.forEach((station, index) => {\n requireIdentity(station);\n if (index > 0 && sorted[index - 1]!.id === station.id)\n throw new Error(`duplicate station id ${station.id}`);\n });\n const preparedRoutes = prepareRoutes(sorted, routes);\n\n const constituentNames = nameTable(\n sorted.flatMap((s) => (s.harmonic_constituents ?? []).map((c) => c.name)),\n );\n const datumNames = nameTable(\n sorted.flatMap((s) => Object.keys(s.datums ?? {})),\n );\n\n const builder = new flatbuffers.Builder(1 << 22);\n const str = (v: string | undefined): number =>\n v === undefined ? 0 : builder.createSharedString(v);\n\n // Phase 1: lookup data — prediction vectors and quality detail — together at\n // the tail of the file.\n const prediction = sorted.map((s) => {\n let constituents = 0;\n const hcs = s.harmonic_constituents ?? [];\n if (hcs.length > 0) {\n Station.startConstituentsVector(builder, hcs.length);\n for (let i = hcs.length - 1; i >= 0; i--) {\n const hc = hcs[i]!;\n Constituent.createConstituent(\n builder,\n constituentNames.index.get(hc.name)!,\n hc.amplitude,\n hc.phase,\n );\n }\n constituents = builder.endVector();\n }\n\n let datums = 0;\n const entries = Object.entries(s.datums ?? {});\n if (entries.length > 0) {\n Station.startDatumsVector(builder, entries.length);\n for (let i = entries.length - 1; i >= 0; i--) {\n const [name, value] = entries[i]!;\n Datum.createDatum(builder, datumNames.index.get(name)!, value);\n }\n datums = builder.endVector();\n }\n\n let quality = 0;\n if (s.quality) {\n const q = s.quality;\n let issues = 0;\n if (q.issues?.length) {\n issues = Quality.createIssuesVector(\n builder,\n q.issues.map((issue) => builder.createSharedString(issue)),\n );\n }\n const reason = str(q.reason);\n const redundant = str(q.redundant);\n Quality.startQuality(builder);\n if (q.factors) {\n // Structs are written inline at the add site.\n const f = q.factors;\n Quality.addFactors(\n builder,\n QualityFactors.createQualityFactors(\n builder,\n f.epoch,\n f.recency,\n f.source,\n f.quality,\n f.amplitude,\n f.coverage,\n ),\n );\n }\n Quality.addIssues(builder, issues);\n Quality.addReason(builder, reason);\n Quality.addRedundant(builder, redundant);\n quality = Quality.endQuality(builder);\n }\n\n return { constituents, datums, quality };\n });\n\n // Phase 2: identity — strings, sub-tables, and the station tables themselves —\n // together at the head. Source, license, and epoch tables repeat across most\n // of a catalog, so identical ones are written once and shared.\n const sourceOffsets = new Map<string, number>();\n const licenseOffsets = new Map<string, number>();\n const epochOffsets = new Map<string, number>();\n\n const stationOffsets = sorted.map((s, i) => {\n const id = builder.createString(s.id);\n // The schema requires name; endStation would reject a missing one anyway,\n // but with an unhelpful \"field 6 must be set\". Fail with the station id.\n if (s.name === undefined)\n throw new Error(`Station ${s.id} has no name; the schema requires one`);\n const name = builder.createSharedString(s.name);\n const timezone = str(s.timezone);\n const locality = str(s.locality);\n const region = str(s.region);\n const regionCode = str(s.region_code);\n const country = str(s.country);\n const countryCode = builder.createSharedString(s.country_code!);\n const continent = str(s.continent);\n const context = str(s.context);\n const chartDatum = str(s.chart_datum);\n const disclaimers = str(s.disclaimers);\n\n let aliases = 0;\n if (s.aliases?.length) {\n // The schema promises lower-cased, deduplicated aliases.\n const normalized = [...new Set(s.aliases.map((a) => a.toLowerCase()))];\n aliases = Station.createAliasesVector(\n builder,\n normalized.map((a) => builder.createSharedString(a)),\n );\n }\n\n let cities = 0;\n if (s.cities?.length) {\n cities = Station.createCitiesVector(\n builder,\n [...new Set(s.cities)].map((city) => builder.createSharedString(city)),\n );\n }\n\n let epoch = 0;\n if (s.epoch) {\n const { start, end } = s.epoch;\n epoch = memo(epochOffsets, s.epoch, () =>\n Epoch.createEpoch(builder, str(start), str(end)),\n );\n }\n\n let source = 0;\n if (s.source) {\n const { name, id, url, published_harmonics } = s.source;\n source = memo(sourceOffsets, s.source, () =>\n Source.createSource(\n builder,\n str(name),\n str(id),\n str(url),\n published_harmonics,\n ),\n );\n }\n\n // Assembled here, not in each reader: a reader would otherwise need its own\n // table of sources and its own reading of what each licence requires.\n const attribution = str(attributionFor(s.source?.name, s.license));\n\n let license = 0;\n if (s.license) {\n const { type, url, notes, commercial_use } = s.license;\n license = memo(licenseOffsets, s.license, () =>\n License.createLicense(\n builder,\n str(type),\n str(url),\n str(notes),\n commercial_use,\n ),\n );\n }\n\n let offsets = 0;\n if (s.offsets) {\n const reference = builder.createSharedString(s.offsets.reference);\n TideOffsets.startTideOffsets(builder);\n TideOffsets.addReference(builder, reference);\n TideOffsets.addTimeHigh(builder, s.offsets.time.high);\n TideOffsets.addTimeLow(builder, s.offsets.time.low);\n if (s.offsets.height.type === \"fixed\")\n TideOffsets.addHeightType(builder, HeightOffsetType.Fixed);\n TideOffsets.addHeightHigh(builder, s.offsets.height.high);\n TideOffsets.addHeightLow(builder, s.offsets.height.low);\n offsets = TideOffsets.endTideOffsets(builder);\n }\n\n let current = 0;\n if (s.current) {\n const c = s.current;\n let derived = 0;\n if (c.derived) {\n const reference = builder.createSharedString(c.derived.reference);\n TideDerivedCurrent.startTideDerivedCurrent(builder);\n TideDerivedCurrent.addReference(builder, reference);\n TideDerivedCurrent.addHighWaterLagMinutes(\n builder,\n c.derived.high_water_lag_minutes,\n );\n TideDerivedCurrent.addLowWaterLagMinutes(\n builder,\n c.derived.low_water_lag_minutes,\n );\n derived = TideDerivedCurrent.endTideDerivedCurrent(builder);\n }\n let currentOffsets = 0;\n if (c.offsets) {\n const o = c.offsets;\n const reference = builder.createSharedString(o.reference);\n CurrentOffsets.startCurrentOffsets(builder);\n CurrentOffsets.addReference(builder, reference);\n if (o.slack_before_flood !== undefined)\n CurrentOffsets.addSlackBeforeFlood(builder, o.slack_before_flood);\n if (o.slack_before_ebb !== undefined)\n CurrentOffsets.addSlackBeforeEbb(builder, o.slack_before_ebb);\n if (o.flood_time !== undefined)\n CurrentOffsets.addFloodTime(builder, o.flood_time);\n if (o.ebb_time !== undefined)\n CurrentOffsets.addEbbTime(builder, o.ebb_time);\n if (o.flood_speed_ratio !== undefined)\n CurrentOffsets.addFloodSpeedRatio(builder, o.flood_speed_ratio);\n if (o.ebb_speed_ratio !== undefined)\n CurrentOffsets.addEbbSpeedRatio(builder, o.ebb_speed_ratio);\n if (o.slack_before_flood === undefined)\n CurrentOffsets.addSlackBeforeFloodMissing(builder, true);\n if (o.slack_before_ebb === undefined)\n CurrentOffsets.addSlackBeforeEbbMissing(builder, true);\n if (o.flood_time === undefined)\n CurrentOffsets.addFloodTimeMissing(builder, true);\n if (o.ebb_time === undefined)\n CurrentOffsets.addEbbTimeMissing(builder, true);\n if (o.flood_speed_ratio === undefined)\n CurrentOffsets.addFloodSpeedRatioMissing(builder, true);\n if (o.ebb_speed_ratio === undefined)\n CurrentOffsets.addEbbSpeedRatioMissing(builder, true);\n currentOffsets = CurrentOffsets.endCurrentOffsets(builder);\n }\n const tideReference = str(c.tide_reference);\n const magnitudeNote = str(c.magnitude_note);\n Current.startCurrent(builder);\n if (c.flood_direction !== undefined)\n Current.addFloodDirection(builder, c.flood_direction);\n if (c.ebb_direction !== undefined)\n Current.addEbbDirection(builder, c.ebb_direction);\n if (c.mean_flow !== undefined) Current.addMeanFlow(builder, c.mean_flow);\n if (c.flood_direction === undefined)\n Current.addFloodDirectionMissing(builder, true);\n if (c.ebb_direction === undefined)\n Current.addEbbDirectionMissing(builder, true);\n if (c.mean_flow === undefined) Current.addMeanFlowMissing(builder, true);\n Current.addTideReference(builder, tideReference);\n Current.addOffsets(builder, currentOffsets);\n Current.addMagnitudeNote(builder, magnitudeNote);\n Current.addDerived(builder, derived);\n current = Current.endCurrent(builder);\n }\n\n Station.startStation(builder);\n Station.addId(builder, id);\n Station.addName(builder, name);\n if (stationKind(s) === \"current\") Station.addKind(builder, Kind.Current);\n if (s.type === \"subordinate\")\n Station.addType(builder, StationType.Subordinate);\n if (s.latitude !== undefined) Station.addLatitude(builder, s.latitude);\n if (s.longitude !== undefined) Station.addLongitude(builder, s.longitude);\n Station.addTimezone(builder, timezone);\n Station.addRegion(builder, region);\n Station.addCountry(builder, country);\n Station.addContinent(builder, continent);\n Station.addAliases(builder, aliases);\n if (s.quality?.accepted ?? true) Station.addAccepted(builder, true);\n if (s.quality?.score) Station.addScore(builder, s.quality.score);\n Station.addConstituents(builder, prediction[i]!.constituents);\n Station.addDatums(builder, prediction[i]!.datums);\n if (s.datums_source === \"observed\")\n Station.addDatumsSource(builder, DatumsSource.Observed);\n else if (s.datums_source === \"harmonic\")\n Station.addDatumsSource(builder, DatumsSource.Harmonic);\n Station.addChartDatum(builder, chartDatum);\n Station.addOffsets(builder, offsets);\n Station.addCurrent(builder, current);\n Station.addEpoch(builder, epoch);\n Station.addQuality(builder, prediction[i]!.quality);\n Station.addSource(builder, source);\n Station.addLicense(builder, license);\n Station.addDisclaimers(builder, disclaimers);\n Station.addAttribution(builder, attribution);\n Station.addLocality(builder, locality);\n Station.addRegionCode(builder, regionCode);\n Station.addCountryCode(builder, countryCode);\n Station.addContext(builder, context);\n if (s.context_derived) Station.addContextDerived(builder, true);\n Station.addCities(builder, cities);\n return Station.endStation(builder);\n });\n\n const routeOffsets = (records: StationRouteInput[]): number[] =>\n records.map((route) => {\n const slug = builder.createString(route.slug);\n const stationIds = StationRouteTable.createStationIdsVector(\n builder,\n route.station_ids.map((id) => builder.createSharedString(id)),\n );\n const formerPaths = route.former_paths?.length\n ? StationRouteTable.createFormerPathsVector(\n builder,\n route.former_paths.map((path) => builder.createSharedString(path)),\n )\n : 0;\n StationRouteTable.startStationRoute(builder);\n StationRouteTable.addSlug(builder, slug);\n StationRouteTable.addStationIds(builder, stationIds);\n StationRouteTable.addFormerPaths(builder, formerPaths);\n return StationRouteTable.endStationRoute(builder);\n });\n\n const tideRouteOffsets = routeOffsets(preparedRoutes.tide);\n const tideRoutesVector = tideRouteOffsets.length\n ? Root.createTideRoutesVector(builder, tideRouteOffsets)\n : 0;\n const currentRouteOffsets = routeOffsets(preparedRoutes.current);\n const currentRoutesVector = currentRouteOffsets.length\n ? Root.createCurrentRoutesVector(builder, currentRouteOffsets)\n : 0;\n\n // Phase 3: the root — stations vector and name tables — at the very head.\n const stationsVector = Root.createStationsVector(builder, stationOffsets);\n const constituentNamesVector = Root.createConstituentNamesVector(\n builder,\n constituentNames.names.map((n) => builder.createSharedString(n)),\n );\n const datumNamesVector = Root.createDatumNamesVector(\n builder,\n datumNames.names.map((n) => builder.createSharedString(n)),\n );\n const versionOffset = str(version);\n\n Root.finishRootBuffer(\n builder,\n Root.createRoot(\n builder,\n versionOffset,\n stationsVector,\n constituentNamesVector,\n datumNamesVector,\n tideRoutesVector,\n currentRoutesVector,\n ),\n );\n\n return builder.asUint8Array();\n}\n\nfunction prepareRoutes(\n stations: StationInput[],\n routes: DatabaseRoutes,\n): DatabaseRoutes {\n const kinds = new Map(\n stations.map((station) => [station.id, stationKind(station)]),\n );\n const prepare = (\n kind: keyof DatabaseRoutes,\n records: StationRouteInput[],\n ): StationRouteInput[] => {\n const slugs = new Set<string>();\n return records\n .map((route) => {\n if (!/^[a-z0-9-]+$/.test(route.slug) || slugs.has(route.slug))\n throw new Error(\n `${kind} route has invalid or duplicate slug ${JSON.stringify(route.slug)}`,\n );\n if (route.station_ids.length === 0)\n throw new Error(`${kind}/${route.slug} has no station ids`);\n for (const id of route.station_ids) {\n const stationKind = kinds.get(id);\n if (!stationKind)\n throw new Error(\n `${kind}/${route.slug} references missing station ${id}`,\n );\n if (stationKind !== kind)\n throw new Error(\n `${kind}/${route.slug} references ${stationKind} station ${id}`,\n );\n }\n slugs.add(route.slug);\n return {\n slug: route.slug,\n station_ids: [...new Set(route.station_ids)],\n former_paths: [...new Set(route.former_paths ?? [])],\n };\n })\n .sort((a, b) => (a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0));\n };\n return {\n tide: prepare(\"tide\", routes.tide),\n current: prepare(\"current\", routes.current),\n };\n}\n\nfunction requireIdentity(station: StationInput): void {\n if (!station.id.trim()) throw new Error(\"Station has no id\");\n stationKind(station);\n for (const field of [\"name\", \"timezone\", \"continent\"] as const) {\n if (!station[field]?.trim())\n throw new Error(`Station ${station.id} has no ${field}`);\n }\n if (\n !Number.isFinite(station.latitude) ||\n !Number.isFinite(station.longitude) ||\n Math.abs(station.latitude!) > 90 ||\n Math.abs(station.longitude!) > 180\n )\n throw new Error(`Station ${station.id} has invalid coordinates`);\n if (!station.source) throw new Error(`Station ${station.id} has no source`);\n if (!station.license) throw new Error(`Station ${station.id} has no license`);\n if (!station.country)\n throw new Error(\n `Station ${station.id} has no country; the schema requires one`,\n );\n if (!/^[A-Z]{2}$/.test(station.country_code ?? \"\"))\n throw new Error(\n `Station ${station.id} has invalid country_code ${JSON.stringify(station.country_code)}`,\n );\n\n const country = countryLookup.byIso(station.country_code!);\n if (!country || country.country !== station.country)\n throw new Error(\n `Station ${station.id} country ${station.country} does not match ${station.country_code}`,\n );\n\n if (\n station.region_code &&\n (!/^[A-Z]{2}-[A-Z0-9]{1,3}$/.test(station.region_code) ||\n !station.region_code.startsWith(`${station.country_code}-`))\n )\n throw new Error(\n `Station ${station.id} region_code ${station.region_code} does not match ${station.country_code}`,\n );\n}\n\nfunction stationKind(station: StationInput): \"tide\" | \"current\" {\n if (station.kind === \"tide\" && station.current)\n throw new Error(\n `Station ${station.id} declares tide kind with current data`,\n );\n return station.kind ?? (station.current ? \"current\" : \"tide\");\n}\n\n/** Unique sorted names plus a name → ushort index map. */\nfunction nameTable(all: string[]): {\n names: string[];\n index: Map<string, number>;\n} {\n const names = [...new Set(all)].sort();\n if (names.length > 0xffff)\n throw new Error(`Name table overflows ushort: ${names.length} names`);\n return { names, index: new Map(names.map((n, i) => [n, i])) };\n}\n\nfunction memo(\n cache: Map<string, number>,\n value: object,\n create: () => number,\n): number {\n const key = JSON.stringify(value);\n let offset = cache.get(key);\n if (offset === undefined) {\n offset = create();\n cache.set(key, offset);\n }\n return offset;\n}\n"],"x_google_ignoreList":[22],"mappings":"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"}
|