naolib_trips 1.1.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.
Files changed (60) hide show
  1. package/.github/workflows/ci.yml +36 -0
  2. package/.github/workflows/pages.yml +33 -0
  3. package/.github/workflows/publish.yml +79 -0
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +29 -0
  7. package/dist/infotrafic/index.d.ts +3 -0
  8. package/dist/infotrafic/index.d.ts.map +1 -0
  9. package/dist/infotrafic/index.js +5 -0
  10. package/dist/infotrafic/infotrafic.d.ts +3 -0
  11. package/dist/infotrafic/infotrafic.d.ts.map +1 -0
  12. package/dist/infotrafic/infotrafic.js +24 -0
  13. package/dist/infotrafic/infotrafic.test.d.ts +2 -0
  14. package/dist/infotrafic/infotrafic.test.d.ts.map +1 -0
  15. package/dist/infotrafic/infotrafic.test.js +59 -0
  16. package/dist/infotrafic/types.d.ts +44 -0
  17. package/dist/infotrafic/types.d.ts.map +1 -0
  18. package/dist/infotrafic/types.js +2 -0
  19. package/dist/search/index.d.ts +3 -0
  20. package/dist/search/index.d.ts.map +1 -0
  21. package/dist/search/index.js +5 -0
  22. package/dist/search/search.d.ts +3 -0
  23. package/dist/search/search.d.ts.map +1 -0
  24. package/dist/search/search.js +24 -0
  25. package/dist/search/search.test.d.ts +2 -0
  26. package/dist/search/search.test.d.ts.map +1 -0
  27. package/dist/search/search.test.js +44 -0
  28. package/dist/search/types.d.ts +24 -0
  29. package/dist/search/types.d.ts.map +1 -0
  30. package/dist/search/types.js +2 -0
  31. package/dist/trip/index.d.ts +3 -0
  32. package/dist/trip/index.d.ts.map +1 -0
  33. package/dist/trip/index.js +5 -0
  34. package/dist/trip/trip.d.ts +3 -0
  35. package/dist/trip/trip.d.ts.map +1 -0
  36. package/dist/trip/trip.js +24 -0
  37. package/dist/trip/trip.test.d.ts +2 -0
  38. package/dist/trip/trip.test.d.ts.map +1 -0
  39. package/dist/trip/trip.test.js +84 -0
  40. package/dist/trip/types.d.ts +324 -0
  41. package/dist/trip/types.d.ts.map +1 -0
  42. package/dist/trip/types.js +2 -0
  43. package/docs/api_doc.md +377 -0
  44. package/docs/index.html +656 -0
  45. package/eslint.config.mjs +7 -0
  46. package/package.json +32 -0
  47. package/src/index.ts +3 -0
  48. package/src/infotrafic/index.ts +8 -0
  49. package/src/infotrafic/infotrafic.test.ts +56 -0
  50. package/src/infotrafic/infotrafic.ts +9 -0
  51. package/src/infotrafic/types.ts +47 -0
  52. package/src/search/index.ts +8 -0
  53. package/src/search/search.test.ts +35 -0
  54. package/src/search/search.ts +11 -0
  55. package/src/search/types.ts +27 -0
  56. package/src/trip/index.ts +29 -0
  57. package/src/trip/trip.test.ts +79 -0
  58. package/src/trip/trip.ts +9 -0
  59. package/src/trip/types.ts +326 -0
  60. package/tsconfig.json +16 -0
@@ -0,0 +1,36 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ build-and-test:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Set up Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: 20
24
+ cache: npm
25
+
26
+ - name: Install dependencies
27
+ run: npm ci
28
+
29
+ - name: Lint
30
+ run: npm run lint
31
+
32
+ - name: Build
33
+ run: npm run build
34
+
35
+ - name: Run tests
36
+ run: npm test
@@ -0,0 +1,33 @@
1
+ name: Deploy GitHub Pages
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ workflow_call:
6
+
7
+ permissions:
8
+ contents: read
9
+ pages: write
10
+ id-token: write
11
+
12
+ concurrency:
13
+ group: pages
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ deploy:
18
+ runs-on: ubuntu-latest
19
+ environment:
20
+ name: github-pages
21
+ url: ${{ steps.deployment.outputs.page_url }}
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+
26
+ - uses: actions/configure-pages@v5
27
+
28
+ - uses: actions/upload-pages-artifact@v3
29
+ with:
30
+ path: docs/
31
+
32
+ - id: deployment
33
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,79 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ release_type:
7
+ description: "Release type"
8
+ required: true
9
+ default: minor
10
+ type: choice
11
+ options:
12
+ - minor
13
+ - major
14
+
15
+ permissions:
16
+ contents: write
17
+ pages: write
18
+ id-token: write
19
+
20
+ jobs:
21
+ publish:
22
+ runs-on: ubuntu-latest
23
+
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ with:
27
+ token: ${{ secrets.GITHUB_TOKEN }}
28
+
29
+ - name: Set up Node.js
30
+ uses: actions/setup-node@v4
31
+ with:
32
+ node-version: 20
33
+ cache: npm
34
+ registry-url: https://registry.npmjs.org
35
+
36
+ - name: Install dependencies
37
+ run: npm ci
38
+
39
+ - name: Build
40
+ run: npm run build
41
+
42
+ - name: Run tests
43
+ run: npm test
44
+
45
+ - name: Configure git
46
+ run: |
47
+ git config user.name "github-actions[bot]"
48
+ git config user.email "github-actions[bot]@users.noreply.github.com"
49
+
50
+ - name: Bump version
51
+ id: version
52
+ run: |
53
+ NEW_VERSION=$(npm version ${{ github.event.inputs.release_type }} --no-git-tag-version)
54
+ echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
55
+
56
+ - name: Commit, tag and push
57
+ run: |
58
+ git add package.json package-lock.json
59
+ git commit -m "chore: release ${{ steps.version.outputs.new_version }}"
60
+ git push origin main
61
+ git tag ${{ steps.version.outputs.new_version }}
62
+ git push origin ${{ steps.version.outputs.new_version }}
63
+
64
+ - name: Create GitHub release
65
+ run: |
66
+ gh release create ${{ steps.version.outputs.new_version }} \
67
+ --title "${{ steps.version.outputs.new_version }}" \
68
+ --generate-notes
69
+ env:
70
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+
72
+ - name: Publish to npm
73
+ run: npm publish
74
+ env:
75
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
76
+
77
+ deploy-pages:
78
+ needs: publish
79
+ uses: ./.github/workflows/pages.yml
@@ -0,0 +1,4 @@
1
+ export * as search from "./search/index.js";
2
+ export * as trip from "./trip/index.js";
3
+ export * as infotrafic from "./infotrafic/index.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.infotrafic = exports.trip = exports.search = void 0;
27
+ exports.search = __importStar(require("./search/index.js"));
28
+ exports.trip = __importStar(require("./trip/index.js"));
29
+ exports.infotrafic = __importStar(require("./infotrafic/index.js"));
@@ -0,0 +1,3 @@
1
+ export { getInfotrafic } from "./infotrafic.js";
2
+ export type { InfotraficResponse, InfotraficEntry, InfotraficTypeEntry, Poi, PoiOptions, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infotrafic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,GAAG,EACH,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getInfotrafic = void 0;
4
+ var infotrafic_js_1 = require("./infotrafic.js");
5
+ Object.defineProperty(exports, "getInfotrafic", { enumerable: true, get: function () { return infotrafic_js_1.getInfotrafic; } });
@@ -0,0 +1,3 @@
1
+ import type { InfotraficResponse } from "./types.js";
2
+ export declare function getInfotrafic(): Promise<InfotraficResponse>;
3
+ //# sourceMappingURL=infotrafic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infotrafic.d.ts","sourceRoot":"","sources":["../../src/infotrafic/infotrafic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,wBAAsB,aAAa,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAGjE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getInfotrafic = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const BASE_URL = "https://plan.naolib.fr/api/poi/infotrafic";
18
+ function getInfotrafic() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const response = yield axios_1.default.get(BASE_URL);
21
+ return response.data;
22
+ });
23
+ }
24
+ exports.getInfotrafic = getInfotrafic;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=infotrafic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infotrafic.test.d.ts","sourceRoot":"","sources":["../../src/infotrafic/infotrafic.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_test_1 = require("node:test");
16
+ const strict_1 = __importDefault(require("node:assert/strict"));
17
+ const infotrafic_js_1 = require("./infotrafic.js");
18
+ (0, node_test_1.describe)("getInfotrafic", () => {
19
+ (0, node_test_1.it)("returns pois and types arrays", () => __awaiter(void 0, void 0, void 0, function* () {
20
+ const response = yield (0, infotrafic_js_1.getInfotrafic)();
21
+ strict_1.default.ok(Array.isArray(response.pois));
22
+ strict_1.default.ok(Array.isArray(response.types));
23
+ }));
24
+ (0, node_test_1.it)("pois entries have required fields", () => __awaiter(void 0, void 0, void 0, function* () {
25
+ const response = yield (0, infotrafic_js_1.getInfotrafic)();
26
+ for (const entry of response.pois) {
27
+ strict_1.default.ok(typeof entry.id === "number");
28
+ strict_1.default.ok(typeof entry.title === "string");
29
+ strict_1.default.ok(typeof entry.content === "string");
30
+ strict_1.default.ok(typeof entry.startAt === "string");
31
+ strict_1.default.ok(typeof entry.endAt === "string");
32
+ strict_1.default.ok(Array.isArray(entry.pois) || entry.pois === null);
33
+ }
34
+ }));
35
+ (0, node_test_1.it)("types entries have required fields including type", () => __awaiter(void 0, void 0, void 0, function* () {
36
+ const response = yield (0, infotrafic_js_1.getInfotrafic)();
37
+ for (const entry of response.types) {
38
+ strict_1.default.ok(typeof entry.id === "number");
39
+ strict_1.default.ok(typeof entry.title === "string");
40
+ strict_1.default.ok(typeof entry.content === "string");
41
+ strict_1.default.ok(typeof entry.startAt === "string");
42
+ strict_1.default.ok(typeof entry.endAt === "string");
43
+ strict_1.default.ok(typeof entry.type === "string");
44
+ strict_1.default.ok(Array.isArray(entry.pois) || entry.pois === null);
45
+ }
46
+ }));
47
+ (0, node_test_1.it)("nested pois have required fields", () => __awaiter(void 0, void 0, void 0, function* () {
48
+ const response = yield (0, infotrafic_js_1.getInfotrafic)();
49
+ const allPois = [...response.pois, ...response.types].flatMap((entry) => { var _a; return (_a = entry.pois) !== null && _a !== void 0 ? _a : []; });
50
+ for (const poi of allPois) {
51
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.id) === "number");
52
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.name) === "string");
53
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.type) === "string");
54
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.lat) === "number");
55
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.lng) === "number");
56
+ strict_1.default.ok(typeof (poi === null || poi === void 0 ? void 0 : poi.options) === "object" && poi.options !== null);
57
+ }
58
+ }));
59
+ });
@@ -0,0 +1,44 @@
1
+ export type PoiOptions = {
2
+ adresse?: string;
3
+ site_web?: string;
4
+ acces_pmr?: "OUI" | "NON";
5
+ capacite_pmr?: number;
6
+ presentation?: string;
7
+ url_redirect?: string;
8
+ capacite_moto?: number | string;
9
+ capacite_velo?: number | string;
10
+ grp_disponible?: number;
11
+ moyen_paiement?: string;
12
+ capacite_voiture?: number;
13
+ infos_complementaires?: string;
14
+ stationnement_velo_securise?: "OUI" | "NON";
15
+ capacite_vehicule_electrique?: number | string;
16
+ [key: string]: unknown;
17
+ };
18
+ export type Poi = {
19
+ id: number;
20
+ type: string;
21
+ real_type: string;
22
+ name: string;
23
+ lat: number;
24
+ lng: number;
25
+ options: PoiOptions;
26
+ icon_poi: string;
27
+ instance: string;
28
+ };
29
+ export type InfotraficEntry = {
30
+ id: number;
31
+ title: string;
32
+ content: string;
33
+ startAt: string;
34
+ endAt: string;
35
+ pois: Poi[] | null;
36
+ };
37
+ export type InfotraficTypeEntry = InfotraficEntry & {
38
+ type: string;
39
+ };
40
+ export type InfotraficResponse = {
41
+ pois: InfotraficEntry[];
42
+ types: InfotraficTypeEntry[];
43
+ };
44
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/infotrafic/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,2BAA2B,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC5C,4BAA4B,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export { search } from "./search.js";
2
+ export type { SearchParams, SearchResponse as SearchResponse, SearchResult, StopInfo, LinkedLine, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EACV,YAAY,EACZ,cAAc,IAAI,cAAc,EAChC,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.search = void 0;
4
+ var search_js_1 = require("./search.js");
5
+ Object.defineProperty(exports, "search", { enumerable: true, get: function () { return search_js_1.search; } });
@@ -0,0 +1,3 @@
1
+ import type { SearchParams, SearchResponse } from "./types.js";
2
+ export declare function search(params: SearchParams): Promise<SearchResponse>;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/search/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI/D,wBAAsB,MAAM,CAC1B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,cAAc,CAAC,CAGzB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.search = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const BASE_URL = "https://tanv4.cartographie.pro/api/autocomplete/itinerary";
18
+ function search(params) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const response = yield axios_1.default.get(BASE_URL, { params });
21
+ return response.data;
22
+ });
23
+ }
24
+ exports.search = search;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.test.d.ts","sourceRoot":"","sources":["../../src/search/search.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_test_1 = require("node:test");
16
+ const strict_1 = __importDefault(require("node:assert/strict"));
17
+ const search_js_1 = require("./search.js");
18
+ (0, node_test_1.describe)("search", () => {
19
+ (0, node_test_1.it)("returns results for a known stop name", () => __awaiter(void 0, void 0, void 0, function* () {
20
+ const response = yield (0, search_js_1.search)({ q: "viarme" });
21
+ strict_1.default.ok(Array.isArray(response.result));
22
+ strict_1.default.ok(response.result.length > 0);
23
+ strict_1.default.ok(Array.isArray(response.recent));
24
+ }));
25
+ (0, node_test_1.it)("first result for 'viarme' is the stop area", () => __awaiter(void 0, void 0, void 0, function* () {
26
+ var _a, _b;
27
+ const response = yield (0, search_js_1.search)({ q: "viarme" });
28
+ const first = response.result[0];
29
+ strict_1.default.ok(first !== undefined);
30
+ strict_1.default.equal(first === null || first === void 0 ? void 0 : first.category, "STOPAREA");
31
+ strict_1.default.ok((first === null || first === void 0 ? void 0 : first.stop) !== null);
32
+ strict_1.default.ok(typeof ((_a = first === null || first === void 0 ? void 0 : first.stop) === null || _a === void 0 ? void 0 : _a.stop_id) === "string");
33
+ strict_1.default.ok(Array.isArray((_b = first === null || first === void 0 ? void 0 : first.stop) === null || _b === void 0 ? void 0 : _b.linked_lines));
34
+ }));
35
+ (0, node_test_1.it)("result items have required fields", () => __awaiter(void 0, void 0, void 0, function* () {
36
+ const response = yield (0, search_js_1.search)({ q: "commerce" });
37
+ for (const item of response.result) {
38
+ strict_1.default.ok(typeof item.name === "string");
39
+ strict_1.default.ok(typeof item.lat === "number");
40
+ strict_1.default.ok(typeof item.lng === "number");
41
+ strict_1.default.ok(typeof item.category === "string");
42
+ }
43
+ }));
44
+ });
@@ -0,0 +1,24 @@
1
+ export type SearchParams = {
2
+ q: string;
3
+ };
4
+ export type LinkedLine = {
5
+ name: string;
6
+ number: string;
7
+ sort: number;
8
+ };
9
+ export type StopInfo = {
10
+ linked_lines: LinkedLine[];
11
+ stop_id: string;
12
+ };
13
+ export type SearchResult = {
14
+ name: string;
15
+ lat: number;
16
+ lng: number;
17
+ category: "STOPAREA" | "POI" | string;
18
+ stop: StopInfo | null;
19
+ };
20
+ export type SearchResponse = {
21
+ result: SearchResult[];
22
+ recent: SearchResult[];
23
+ };
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/search/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;IACtC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export { searchTrip } from "./trip.js";
2
+ export type { TripParams, TripResponse, TripSolution, Section, WalkSection, TransitSection, SectionLine, LineDirection, ConcernedStop, SolutionApi, CarbonFootprint, AdditionalInfo, GeoJsonInfos, GeoJsonLineString, GeoJsonProperties, PTRide, TransitLine, RideStep, TransitEndpoint, StopPlace, WalkingLeg, PathLink, Elevation, StopEndpoint, Site, Position, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,QAAQ,GACT,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchTrip = void 0;
4
+ var trip_js_1 = require("./trip.js");
5
+ Object.defineProperty(exports, "searchTrip", { enumerable: true, get: function () { return trip_js_1.searchTrip; } });
@@ -0,0 +1,3 @@
1
+ import type { TripParams, TripResponse } from "./types.js";
2
+ export declare function searchTrip(params: TripParams): Promise<TripResponse>;
3
+ //# sourceMappingURL=trip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trip.d.ts","sourceRoot":"","sources":["../../src/trip/trip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI3D,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAG1E"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.searchTrip = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const BASE_URL = "https://plan.naolib.fr/api/itinerary/search";
18
+ function searchTrip(params) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const response = yield axios_1.default.get(BASE_URL, { params });
21
+ return response.data;
22
+ });
23
+ }
24
+ exports.searchTrip = searchTrip;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trip.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trip.test.d.ts","sourceRoot":"","sources":["../../src/trip/trip.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const node_test_1 = require("node:test");
16
+ const strict_1 = __importDefault(require("node:assert/strict"));
17
+ const trip_js_1 = require("./trip.js");
18
+ const FROM = {
19
+ name: "Viarme-Talensac (Nantes)",
20
+ lat: 47.221378326416016,
21
+ lng: -1.5627094507217407,
22
+ };
23
+ const TO = {
24
+ name: "Duchesse Anne - Château (Nantes)",
25
+ lat: 47.21623229980469,
26
+ lng: -1.5469282865524292,
27
+ };
28
+ (0, node_test_1.describe)("searchTrip", () => {
29
+ (0, node_test_1.it)("returns solutions for a valid route", () => __awaiter(void 0, void 0, void 0, function* () {
30
+ const response = yield (0, trip_js_1.searchTrip)({
31
+ from: FROM.name,
32
+ from_lat: FROM.lat,
33
+ from_lng: FROM.lng,
34
+ to: TO.name,
35
+ to_lat: TO.lat,
36
+ to_lng: TO.lng,
37
+ type: "now",
38
+ avoid_dis: false,
39
+ access: false,
40
+ });
41
+ strict_1.default.ok(Array.isArray(response.solutions));
42
+ strict_1.default.ok(response.solutions.length > 0);
43
+ }));
44
+ (0, node_test_1.it)("each solution has startAt, endAt, duration, and sections", () => __awaiter(void 0, void 0, void 0, function* () {
45
+ const response = yield (0, trip_js_1.searchTrip)({
46
+ from: FROM.name,
47
+ from_lat: FROM.lat,
48
+ from_lng: FROM.lng,
49
+ to: TO.name,
50
+ to_lat: TO.lat,
51
+ to_lng: TO.lng,
52
+ type: "now",
53
+ avoid_dis: false,
54
+ access: false,
55
+ });
56
+ for (const solution of response.solutions) {
57
+ strict_1.default.ok(typeof solution.startAt === "string");
58
+ strict_1.default.ok(typeof solution.endAt === "string");
59
+ strict_1.default.ok(typeof solution.duration === "string");
60
+ strict_1.default.ok(Array.isArray(solution.sections));
61
+ strict_1.default.ok(solution.sections.length > 0);
62
+ }
63
+ }));
64
+ (0, node_test_1.it)("sections have geojson coordinates", () => __awaiter(void 0, void 0, void 0, function* () {
65
+ const response = yield (0, trip_js_1.searchTrip)({
66
+ from: FROM.name,
67
+ from_lat: FROM.lat,
68
+ from_lng: FROM.lng,
69
+ to: TO.name,
70
+ to_lat: TO.lat,
71
+ to_lng: TO.lng,
72
+ type: "now",
73
+ avoid_dis: false,
74
+ access: false,
75
+ });
76
+ const firstSolution = response.solutions[0];
77
+ if (firstSolution === undefined)
78
+ throw new Error("No solutions returned");
79
+ for (const section of firstSolution.sections) {
80
+ strict_1.default.equal(section.geojson_infos.additionalGeoJson.type, "LineString");
81
+ strict_1.default.ok(section.geojson_infos.additionalGeoJson.coordinates.length > 0);
82
+ }
83
+ }));
84
+ });