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.
- package/.github/workflows/ci.yml +36 -0
- package/.github/workflows/pages.yml +33 -0
- package/.github/workflows/publish.yml +79 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/infotrafic/index.d.ts +3 -0
- package/dist/infotrafic/index.d.ts.map +1 -0
- package/dist/infotrafic/index.js +5 -0
- package/dist/infotrafic/infotrafic.d.ts +3 -0
- package/dist/infotrafic/infotrafic.d.ts.map +1 -0
- package/dist/infotrafic/infotrafic.js +24 -0
- package/dist/infotrafic/infotrafic.test.d.ts +2 -0
- package/dist/infotrafic/infotrafic.test.d.ts.map +1 -0
- package/dist/infotrafic/infotrafic.test.js +59 -0
- package/dist/infotrafic/types.d.ts +44 -0
- package/dist/infotrafic/types.d.ts.map +1 -0
- package/dist/infotrafic/types.js +2 -0
- package/dist/search/index.d.ts +3 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +5 -0
- package/dist/search/search.d.ts +3 -0
- package/dist/search/search.d.ts.map +1 -0
- package/dist/search/search.js +24 -0
- package/dist/search/search.test.d.ts +2 -0
- package/dist/search/search.test.d.ts.map +1 -0
- package/dist/search/search.test.js +44 -0
- package/dist/search/types.d.ts +24 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +2 -0
- package/dist/trip/index.d.ts +3 -0
- package/dist/trip/index.d.ts.map +1 -0
- package/dist/trip/index.js +5 -0
- package/dist/trip/trip.d.ts +3 -0
- package/dist/trip/trip.d.ts.map +1 -0
- package/dist/trip/trip.js +24 -0
- package/dist/trip/trip.test.d.ts +2 -0
- package/dist/trip/trip.test.d.ts.map +1 -0
- package/dist/trip/trip.test.js +84 -0
- package/dist/trip/types.d.ts +324 -0
- package/dist/trip/types.d.ts.map +1 -0
- package/dist/trip/types.js +2 -0
- package/docs/api_doc.md +377 -0
- package/docs/index.html +656 -0
- package/eslint.config.mjs +7 -0
- package/package.json +32 -0
- package/src/index.ts +3 -0
- package/src/infotrafic/index.ts +8 -0
- package/src/infotrafic/infotrafic.test.ts +56 -0
- package/src/infotrafic/infotrafic.ts +9 -0
- package/src/infotrafic/types.ts +47 -0
- package/src/search/index.ts +8 -0
- package/src/search/search.test.ts +35 -0
- package/src/search/search.ts +11 -0
- package/src/search/types.ts +27 -0
- package/src/trip/index.ts +29 -0
- package/src/trip/trip.test.ts +79 -0
- package/src/trip/trip.ts +9 -0
- package/src/trip/types.ts +326 -0
- 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
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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,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 @@
|
|
|
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 @@
|
|
|
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
|
+
});
|