@maschinenlesbar.org/pegel-online-cli 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CONTRIBUTING.md +25 -0
  2. package/LICENSE +661 -0
  3. package/LICENSING.md +47 -0
  4. package/README.md +203 -0
  5. package/dist/src/cli/commands/stations.d.ts +4 -0
  6. package/dist/src/cli/commands/stations.d.ts.map +1 -0
  7. package/dist/src/cli/commands/stations.js +45 -0
  8. package/dist/src/cli/commands/stations.js.map +1 -0
  9. package/dist/src/cli/commands/timeseries.d.ts +4 -0
  10. package/dist/src/cli/commands/timeseries.d.ts.map +1 -0
  11. package/dist/src/cli/commands/timeseries.js +38 -0
  12. package/dist/src/cli/commands/timeseries.js.map +1 -0
  13. package/dist/src/cli/index.d.ts +3 -0
  14. package/dist/src/cli/index.d.ts.map +1 -0
  15. package/dist/src/cli/index.js +6 -0
  16. package/dist/src/cli/index.js.map +1 -0
  17. package/dist/src/cli/io.d.ts +13 -0
  18. package/dist/src/cli/io.d.ts.map +1 -0
  19. package/dist/src/cli/io.js +7 -0
  20. package/dist/src/cli/io.js.map +1 -0
  21. package/dist/src/cli/program.d.ts +7 -0
  22. package/dist/src/cli/program.d.ts.map +1 -0
  23. package/dist/src/cli/program.js +52 -0
  24. package/dist/src/cli/program.js.map +1 -0
  25. package/dist/src/cli/run.d.ts +3 -0
  26. package/dist/src/cli/run.d.ts.map +1 -0
  27. package/dist/src/cli/run.js +62 -0
  28. package/dist/src/cli/run.js.map +1 -0
  29. package/dist/src/cli/shared.d.ts +44 -0
  30. package/dist/src/cli/shared.d.ts.map +1 -0
  31. package/dist/src/cli/shared.js +81 -0
  32. package/dist/src/cli/shared.js.map +1 -0
  33. package/dist/src/client/client.d.ts +28 -0
  34. package/dist/src/client/client.d.ts.map +1 -0
  35. package/dist/src/client/client.js +79 -0
  36. package/dist/src/client/client.js.map +1 -0
  37. package/dist/src/client/engine.d.ts +54 -0
  38. package/dist/src/client/engine.d.ts.map +1 -0
  39. package/dist/src/client/engine.js +120 -0
  40. package/dist/src/client/engine.js.map +1 -0
  41. package/dist/src/client/errors.d.ts +33 -0
  42. package/dist/src/client/errors.d.ts.map +1 -0
  43. package/dist/src/client/errors.js +40 -0
  44. package/dist/src/client/errors.js.map +1 -0
  45. package/dist/src/client/http.d.ts +26 -0
  46. package/dist/src/client/http.d.ts.map +1 -0
  47. package/dist/src/client/http.js +82 -0
  48. package/dist/src/client/http.js.map +1 -0
  49. package/dist/src/client/index.d.ts +10 -0
  50. package/dist/src/client/index.d.ts.map +1 -0
  51. package/dist/src/client/index.js +8 -0
  52. package/dist/src/client/index.js.map +1 -0
  53. package/dist/src/client/query.d.ts +9 -0
  54. package/dist/src/client/query.d.ts.map +1 -0
  55. package/dist/src/client/query.js +33 -0
  56. package/dist/src/client/query.js.map +1 -0
  57. package/dist/src/client/types.d.ts +71 -0
  58. package/dist/src/client/types.d.ts.map +1 -0
  59. package/dist/src/client/types.js +4 -0
  60. package/dist/src/client/types.js.map +1 -0
  61. package/dist/src/index.d.ts +2 -0
  62. package/dist/src/index.d.ts.map +1 -0
  63. package/dist/src/index.js +3 -0
  64. package/dist/src/index.js.map +1 -0
  65. package/package.json +66 -0
@@ -0,0 +1,9 @@
1
+ export type QueryPrimitive = string | number | boolean | Date | null | undefined;
2
+ export type QueryValue = QueryPrimitive | QueryPrimitive[];
3
+ export type QueryParams = Record<string, QueryValue>;
4
+ /**
5
+ * Build a query string (without a leading `?`) from a params object.
6
+ * Returns an empty string when no parameters survive filtering.
7
+ */
8
+ export declare function buildQueryString(params: QueryParams): string;
9
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/client/query.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AACjF,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,cAAc,EAAE,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAQrD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAe5D"}
@@ -0,0 +1,33 @@
1
+ // Tiny, dependency-free query-string builder.
2
+ // - `undefined` / `null` values are omitted entirely
3
+ // - arrays are serialised as repeated keys (`?id=a&id=b`)
4
+ // - booleans become the strings "true"/"false"
5
+ // - Date values become full ISO-8601 strings
6
+ // - everything else is coerced with String()
7
+ function serializeScalar(value) {
8
+ if (value instanceof Date)
9
+ return value.toISOString();
10
+ if (typeof value === "boolean")
11
+ return value ? "true" : "false";
12
+ return String(value);
13
+ }
14
+ /**
15
+ * Build a query string (without a leading `?`) from a params object.
16
+ * Returns an empty string when no parameters survive filtering.
17
+ */
18
+ export function buildQueryString(params) {
19
+ const search = new URLSearchParams();
20
+ for (const [key, raw] of Object.entries(params)) {
21
+ if (raw === undefined || raw === null)
22
+ continue;
23
+ const values = Array.isArray(raw) ? raw : [raw];
24
+ for (const value of values) {
25
+ if (value === undefined || value === null)
26
+ continue;
27
+ search.append(key, serializeScalar(value));
28
+ }
29
+ }
30
+ // URLSearchParams encodes spaces as "+"; "%20" is more broadly interoperable.
31
+ return search.toString().replace(/\+/g, "%20");
32
+ }
33
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/client/query.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,uDAAuD;AACvD,4DAA4D;AAC5D,iDAAiD;AACjD,+CAA+C;AAC/C,+CAA+C;AAM/C,SAAS,eAAe,CAAC,KAAgD;IACvE,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAEhD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YACpD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,71 @@
1
+ export type JsonValue = string | number | boolean | null | JsonValue[] | {
2
+ [key: string]: JsonValue;
3
+ };
4
+ export type JsonObject = {
5
+ [key: string]: JsonValue;
6
+ };
7
+ /** A body of water (Gewässer). */
8
+ export interface Water {
9
+ shortname: string;
10
+ longname: string;
11
+ }
12
+ /** A measuring station. Timeseries/current measurement appear only when requested. */
13
+ export interface Station {
14
+ uuid: string;
15
+ number: string;
16
+ shortname: string;
17
+ longname: string;
18
+ km?: number;
19
+ agency?: string;
20
+ longitude?: number;
21
+ latitude?: number;
22
+ water?: Water;
23
+ timeseries?: TimeseriesInfo[];
24
+ }
25
+ /** A measurement value plus the API's state classifications. */
26
+ export interface CurrentMeasurement {
27
+ timestamp: string;
28
+ value: number;
29
+ /** Classification vs. the mean low/high water marks. */
30
+ stateMnwMhw?: string;
31
+ /** Classification vs. the lowest/highest navigable water marks. */
32
+ stateNswHsw?: string;
33
+ }
34
+ /** Metadata for one timeseries of a station (e.g. "W" water level, "Q" flow). */
35
+ export interface TimeseriesInfo {
36
+ shortname: string;
37
+ longname: string;
38
+ unit: string;
39
+ equidistance?: number;
40
+ currentMeasurement?: CurrentMeasurement;
41
+ /** Characteristic values (gauge marks), present only when requested. */
42
+ characteristicValues?: JsonObject[] | null;
43
+ }
44
+ /** One point of a measurements series. */
45
+ export interface Measurement {
46
+ timestamp: string;
47
+ value: number;
48
+ }
49
+ /** Parameters for the stations listing. */
50
+ export interface StationListParams {
51
+ /** Station identifiers (uuid/number/shortname/longname); sent comma-separated. */
52
+ ids?: string[];
53
+ /** Water shortname filter. */
54
+ waters?: string;
55
+ fuzzyId?: string;
56
+ includeTimeseries?: boolean;
57
+ includeCurrentMeasurement?: boolean;
58
+ includeCharacteristicValues?: boolean;
59
+ }
60
+ /** Optional includes for a single-station or single-timeseries request. */
61
+ export interface IncludeParams {
62
+ includeTimeseries?: boolean;
63
+ includeCurrentMeasurement?: boolean;
64
+ includeCharacteristicValues?: boolean;
65
+ }
66
+ /** Time window for a measurements request (ISO-8601 instants or periods, e.g. "P7D"). */
67
+ export interface MeasurementsParams {
68
+ start?: string;
69
+ end?: string;
70
+ }
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AACjC,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,kCAAkC;AAClC,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;CAC5C;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,2CAA2C;AAC3C,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;AAED,yFAAyF;AACzF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,4 @@
1
+ // Domain types for the PEGELONLINE REST API v2 (pegelonline.wsv.de), the
2
+ // Wasserstraßen- und Schifffahrtsverwaltung's water-level web service.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,uEAAuE"}
@@ -0,0 +1,2 @@
1
+ export * from "./client/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Library root. Import from here when using pegel-online-cli as a dependency.
2
+ export * from "./client/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,cAAc,mBAAmB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@maschinenlesbar.org/pegel-online-cli",
3
+ "version": "0.0.1",
4
+ "description": "TypeScript API client and CLI for the open PEGELONLINE water-level REST API (pegelonline.wsv.de)",
5
+ "type": "module",
6
+ "bin": {
7
+ "pegel": "dist/src/cli/index.js"
8
+ },
9
+ "main": "dist/src/index.js",
10
+ "types": "dist/src/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/src/index.d.ts",
14
+ "import": "./dist/src/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist/src",
19
+ "LICENSING.md",
20
+ "CONTRIBUTING.md"
21
+ ],
22
+ "engines": {
23
+ "node": ">=20"
24
+ },
25
+ "scripts": {
26
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
27
+ "build": "tsc -p tsconfig.json",
28
+ "prepack": "npm run build",
29
+ "typecheck": "tsc -p tsconfig.json --noEmit",
30
+ "pretest": "npm run build",
31
+ "test": "node --test dist/test/*.test.js",
32
+ "docs": "typedoc src/index.ts --out out",
33
+ "start": "node dist/src/cli/index.js"
34
+ },
35
+ "keywords": [
36
+ "pegelonline",
37
+ "wsv",
38
+ "wasserstand",
39
+ "water-level",
40
+ "hydrology",
41
+ "germany",
42
+ "cli",
43
+ "api-client"
44
+ ],
45
+ "author": "Sebastian Schürmann <sebs@2xs.org>",
46
+ "license": "AGPL-3.0-or-later",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/maschinenlesbar-org/pegel-online-cli.git"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/maschinenlesbar-org/pegel-online-cli/issues"
53
+ },
54
+ "homepage": "https://github.com/maschinenlesbar-org/pegel-online-cli#readme",
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "dependencies": {
59
+ "commander": "15.0.0"
60
+ },
61
+ "devDependencies": {
62
+ "@types/node": "^22.19.19",
63
+ "typedoc": "0.28.19",
64
+ "typescript": "6.0.3"
65
+ }
66
+ }