Fixed URI issues, test data format, and draw polyline (#6)

* Fixed base API

* Better parsing of the actual server data

* Removed deno.lock from the repo

* Fixed server responses and added usingDocker

* Fix uris with usingDocker

* Fixed polyline logic to show entire route
This commit is contained in:
Levi Lesches 2025-04-10 00:48:47 -04:00 committed by GitHub
parent 4edfc98c1d
commit 2705953282
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 241 additions and 1060 deletions

View file

@ -11,6 +11,7 @@
.svn/
.swiftpm/
migrate_working_dir/
pubspec.lock
# IntelliJ related
*.iml

View file

@ -1,4 +1,5 @@
export "src/data/utils.dart";
export "src/data/trip.dart";
export "src/data/path.dart";
export "src/data/polyline.dart";
export "src/data/stop.dart";

View file

@ -2,12 +2,12 @@ import "trip.dart";
import "utils.dart";
class PathStep {
final Trip trip;
final PathTrip trip;
final TripStop enter;
final TripStop exit;
PathStep.fromJson(Json json) :
trip = Trip.fromJson(json["trip"]),
trip = PathTrip.fromJson(json["trip"]),
enter = TripStop.fromJson(json["enter_bus"]),
exit = TripStop.fromJson(json["exit_bus"]);
}

View file

@ -0,0 +1,45 @@
import "package:fixnum/fixnum.dart";
import "package:google_maps_flutter/google_maps_flutter.dart";
List<LatLng> decodePolyline(String polyline) {
final points = <LatLng>[]; // List to hold the decoded coordinates
var index = 0;
final len = polyline.length;
var lat = Int32();
var lng = Int32();
// While there are still characters to process in the polyline
while (index < len) {
int b;
var shift = 0;
var result = Int32();
final oneF = Int32(0x1F);
// Decode latitude
do {
b = polyline.codeUnitAt(index++) - 63; // Get the next character
result |= (Int32(b) & oneF) << shift; // Update the result
shift += 5; // Increase the shift
} while (b >= 0x20); // Continue until a character less than 0x20 is found
final dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); // Decode the latitude delta
lat = (lat + dlat) as Int32; // Update the latitude
shift = 0; // Reset shift for longitude decoding
result = Int32(); // Reset result for longitude decoding
// Decode longitude
do {
b = polyline.codeUnitAt(index++) - 63; // Get the next character
result |= (Int32(b) & oneF) << shift; // Update the result
shift += 5; // Increase the shift
} while (b >= 0x20); // Continue until a character less than 0x20 is found
final dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); // Decode the longitude delta
lng = (lng + dlng) as Int32; // Update the longitude
// Add the new LatLng poInt32 to the list of points
points.add(LatLng(lat.toInt() / 1E5, lng.toInt() / 1E5));
}
return points;
}

View file

@ -34,21 +34,25 @@ class Trip {
class TripStop {
final double lat;
final double long;
final List<ScheduledTime> times;
// final List<ScheduledTime> times;
// For testing, use this:
final String time;
const TripStop({
required this.lat,
required this.long,
required this.times,
// required this.times,
required this.time,
});
TripStop.fromJson(Json json) :
lat = json["latitude"],
long = json["longitude"],
times = [
for (final time in json["times"])
ScheduledTime.fromJson(time),
];
time = json["time"];
// times = [
// for (final time in json["times"])
// ScheduledTime.fromJson(time),
// ];
}
class ScheduledTime {
@ -69,3 +73,9 @@ class ScheduledTime {
return ScheduledTime(weekday: weekday, timeOfDay: timeOfDay);
}
}
class PathTrip {
final String polyline;
PathTrip.fromJson(Json json) :
polyline = json["polyline"];
}

View file

@ -13,12 +13,11 @@ class HomePage extends ReactiveWidget<HomeModel> {
@override
Widget build(BuildContext context, HomeModel model) => Scaffold(
appBar: AppBar(title: const Text("Counter")),
body: Center(
child: SizedBox(
width: 300,
child: Column(
body: Column(
children: [
Row(
SizedBox(
width: 300,
child: Row(
children: [
Expanded(
child: TextField(
@ -41,8 +40,11 @@ class HomePage extends ReactiveWidget<HomeModel> {
),
],
),
),
const SizedBox(height: 12),
Row(
SizedBox(
width: 300,
child: Row(
children: [
Expanded(
child: TextField(
@ -65,6 +67,7 @@ class HomePage extends ReactiveWidget<HomeModel> {
),
],
),
),
const SizedBox(height: 24),
FilledButton(onPressed: model.search, child: const Text("Search for a path")),
const SizedBox(height: 8),
@ -79,21 +82,26 @@ class HomePage extends ReactiveWidget<HomeModel> {
"Get on at ${step.enter.lat}, ${step.enter.long}\n"
"Get off at ${step.exit.lat}, ${step.exit.long}",
),
SizedBox(
width: 300,
height: 300,
Expanded(
child: model.isGoogleReady
? const GoogleMap(
initialCameraPosition: CameraPosition(
? GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(42.10125081757972, -75.94181323552698),
zoom: 14,
),
polylines: {
for (final (index, route) in model.routes.indexed) Polyline(
polylineId: PolylineId(index.toString()),
color: routeColors[index],
points: route,
),
},
)
: const Center(child: CircularProgressIndicator()),
),
],
),
),
),
);
}
const routeColors = [Colors.blue, Colors.red, Colors.green, Colors.yellow, Colors.orange];

View file

@ -7,29 +7,34 @@ import "package:client/data.dart";
import "service.dart";
class ApiService extends Service {
static const bool usingDocker = true;
final client = http.Client();
@override
Future<void> init() async { }
Uri get _base => Uri(scheme: "https", host: "localhost", port: 5000);
Uri get _base => usingDocker
? Uri(path: "api/")
: Uri(scheme: "http", host: "localhost", port: 80);
Future<List<T>?> _getAll<T>(Uri uri, FromJson<T> fromJson) async {
try {
final response = await client.get(uri);
if (response.statusCode != 200) return null;
final json = jsonDecode(response.body) as List;
final json = jsonDecode(response.body)["path"] as List;
return [
for (final obj in json.cast<Json>())
fromJson(obj),
];
} catch (error) {
} catch (error, stackTrace) {
// ignore: avoid_print
print("Error: $error\n$stackTrace");
return null;
}
}
Future<List<Trip>?> getTrips() => _getAll(
_base.replace(path: "/trips"),
_base.resolve("trips"),
Trip.fromJson,
);
@ -37,9 +42,7 @@ class ApiService extends Service {
required Coordinates start,
required Coordinates end,
}) => _getAll(
_base.replace(
path: "/path",
).replace(
_base.resolve("path").replace(
queryParameters: {
"start_lat": start.lat.toString(),
"start_lon": start.long.toString(),

View file

@ -2,8 +2,12 @@ import "package:client/data.dart";
import "package:client/services.dart";
import "package:flutter/widgets.dart" hide Path;
import "package:google_maps_flutter/google_maps_flutter.dart";
import "view_model.dart";
typedef LatLng2 = (double lat, double lng);
/// The view model for the home page.
class HomeModel extends ViewModel {
final startLatitudeController = TextEditingController();
@ -28,6 +32,8 @@ class HomeModel extends ViewModel {
notifyListeners();
}
List<List<LatLng>> routes = [];
Future<void> search() async {
final start = (lat: startLatitude, long: startLongitude);
final end = (lat: endLatitude, long: endLongitude);
@ -35,8 +41,16 @@ class HomeModel extends ViewModel {
if (end.lat == null || end.long == null) return;
isSearching = true;
isLoading = true;
path = await services.api.getPath(start: start as Coordinates, end: end as Coordinates);
if (path != null) isSearching = false;
final result = await services.api.getPath(start: start as Coordinates, end: end as Coordinates);
path = result;
isLoading = false;
if (result == null) return;
isSearching = false;
routes = [
for (final step in result) [
...decodePolyline(step.trip.polyline),
],
];
notifyListeners();
}
}

View file

@ -1,402 +0,0 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
args:
dependency: transitive
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
url: "https://pub.dev"
source: hosted
version: "2.7.0"
async:
dependency: transitive
description:
name: async
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
url: "https://pub.dev"
source: hosted
version: "2.13.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
build_cli_annotations:
dependency: transitive
description:
name: build_cli_annotations
sha256: b59d2769769efd6c9ff6d4c4cede0be115a566afc591705c2040b707534b1172
url: "https://pub.dev"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
version: "1.4.0"
clock:
dependency: transitive
description:
name: clock
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
version: "1.19.1"
convert:
dependency: transitive
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.dev"
source: hosted
version: "3.1.2"
csslib:
dependency: transitive
description:
name: csslib
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
dhttpd:
dependency: "direct dev"
description:
name: dhttpd
sha256: "2e24765d7569b8e0a02a441e3cf96f09cca69dfecba646e7e9f6b3ab45a2f3fe"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
fake_async:
dependency: transitive
description:
name: fake_async
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.3"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3"
url: "https://pub.dev"
source: hosted
version: "2.0.27"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
go_router:
dependency: "direct main"
description:
name: go_router
sha256: f02fd7d2a4dc512fec615529824fdd217fecb3a3d3de68360293a551f21634b3
url: "https://pub.dev"
source: hosted
version: "14.8.1"
google_maps:
dependency: transitive
description:
name: google_maps
sha256: "4d6e199c561ca06792c964fa24b2bac7197bf4b401c2e1d23e345e5f9939f531"
url: "https://pub.dev"
source: hosted
version: "8.1.1"
google_maps_flutter:
dependency: "direct main"
description:
name: google_maps_flutter
sha256: b42ff7f3875a5eedbe388d883100561b85c62beed1c39ad66dd60537c75bb424
url: "https://pub.dev"
source: hosted
version: "2.12.0"
google_maps_flutter_android:
dependency: transitive
description:
name: google_maps_flutter_android
sha256: "0ede4ae8326335c0c007c8c7a8c9737449263123385e2bdf49f3e71103b2dc2e"
url: "https://pub.dev"
source: hosted
version: "2.16.0"
google_maps_flutter_ios:
dependency: transitive
description:
name: google_maps_flutter_ios
sha256: ef72c822930ce69515cb91c10cd88cfb8b26296f765808a43cbc9a10eaffacfe
url: "https://pub.dev"
source: hosted
version: "2.15.0"
google_maps_flutter_platform_interface:
dependency: transitive
description:
name: google_maps_flutter_platform_interface
sha256: "970c8f766c02909c7be282dea923c971f83a88adaf07f8871d0aacebc3b07bb2"
url: "https://pub.dev"
source: hosted
version: "2.11.1"
google_maps_flutter_web:
dependency: transitive
description:
name: google_maps_flutter_web
sha256: a45786ea6691cc7cdbe2cf3ce2c2daf4f82a885745666b4a36baada3a4e12897
url: "https://pub.dev"
source: hosted
version: "0.5.12"
html:
dependency: "direct main"
description:
name: html
sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
url: "https://pub.dev"
source: hosted
version: "0.15.5"
http:
dependency: "direct main"
description:
name: http
sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f
url: "https://pub.dev"
source: hosted
version: "1.3.0"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev"
source: hosted
version: "3.0.9"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
logging:
dependency: transitive
description:
name: logging
sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
url: "https://pub.dev"
source: hosted
version: "1.3.0"
matcher:
dependency: transitive
description:
name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
version: "0.11.1"
meta:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
version: "1.16.0"
mime:
dependency: transitive
description:
name: mime
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "2.0.0"
path:
dependency: transitive
description:
name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
url: "https://pub.dev"
source: hosted
version: "2.1.8"
sanitize_html:
dependency: transitive
description:
name: sanitize_html
sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
shelf:
dependency: transitive
description:
name: shelf
sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
url: "https://pub.dev"
source: hosted
version: "1.4.2"
shelf_static:
dependency: transitive
description:
name: shelf_static
sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
url: "https://pub.dev"
source: hosted
version: "1.1.3"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
source_span:
dependency: transitive
description:
name: source_span
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev"
source: hosted
version: "1.10.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
stream_transform:
dependency: transitive
description:
name: stream_transform
sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
url: "https://pub.dev"
source: hosted
version: "2.1.1"
string_scanner:
dependency: transitive
description:
name: string_scanner
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev"
source: hosted
version: "1.4.1"
term_glyph:
dependency: transitive
description:
name: term_glyph
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev"
source: hosted
version: "1.2.2"
test_api:
dependency: transitive
description:
name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev"
source: hosted
version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.4.0"
vector_math:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
very_good_analysis:
dependency: "direct dev"
description:
name: very_good_analysis
sha256: "1fb637c0022034b1f19ea2acb42a3603cbd8314a470646a59a2fb01f5f3a8629"
url: "https://pub.dev"
source: hosted
version: "6.0.0"
vm_service:
dependency: transitive
description:
name: vm_service
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "15.0.0"
web:
dependency: "direct main"
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
sdks:
dart: ">=3.7.0-0 <4.0.0"
flutter: ">=3.27.0"

View file

@ -7,12 +7,14 @@ environment:
sdk: ^3.5.0
dependencies:
fixnum: ^1.1.1
flutter:
sdk: flutter
go_router: ^14.2.7
google_maps_flutter: ^2.12.0
html: ^0.15.5
http: ^1.3.0
polyline_tools: ^0.0.2
web: ^1.1.1
dev_dependencies:

1
src/server/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
deno.lock

View file

@ -1,501 +0,0 @@
{
"version": "4",
"specifiers": {
"jsr:@oak/acorn@^1.1.1": "1.1.1",
"jsr:@oak/commons@1": "1.0.0",
"jsr:@std/assert@1": "1.0.11",
"jsr:@std/bytes@1": "1.0.5",
"jsr:@std/crypto@1": "1.0.4",
"jsr:@std/encoding@1": "1.0.7",
"jsr:@std/encoding@^1.0.7": "1.0.7",
"jsr:@std/fmt@^1.0.5": "1.0.5",
"jsr:@std/fs@^1.0.11": "1.0.13",
"jsr:@std/http@1": "1.0.13",
"jsr:@std/internal@^1.0.5": "1.0.5",
"jsr:@std/io@~0.225.2": "0.225.2",
"jsr:@std/log@0.224": "0.224.14",
"jsr:@std/media-types@1": "1.1.0",
"jsr:@valibot/valibot@0.42": "0.42.1",
"npm:@types/node@^22.13.11": "22.13.11",
"npm:buffer@6": "6.0.3",
"npm:hyperid@^3.3.0": "3.3.0",
"npm:path-to-regexp@^8.2.0": "8.2.0",
"npm:qs@^6.13.0": "6.14.0",
"npm:string_decoder@^1.3.0": "1.3.0",
"npm:undici@^6.18.0": "6.21.1"
},
"jsr": {
"@oak/acorn@1.1.1": {
"integrity": "a6157ef41a7886c14b296bf91b058492b5fd642102666bf8d71c57b92a4e94c0",
"dependencies": [
"jsr:@oak/commons",
"jsr:@std/assert",
"jsr:@std/http",
"jsr:@std/log",
"jsr:@valibot/valibot",
"npm:buffer",
"npm:hyperid",
"npm:path-to-regexp",
"npm:qs",
"npm:string_decoder",
"npm:undici"
]
},
"@oak/commons@1.0.0": {
"integrity": "49805b55603c3627a9d6235c0655aa2b6222d3036b3a13ff0380c16368f607ac",
"dependencies": [
"jsr:@std/assert",
"jsr:@std/bytes",
"jsr:@std/crypto",
"jsr:@std/encoding@1",
"jsr:@std/http",
"jsr:@std/media-types"
]
},
"@std/assert@1.0.11": {
"integrity": "2461ef3c368fe88bc60e186e7744a93112f16fd110022e113a0849e94d1c83c1",
"dependencies": [
"jsr:@std/internal"
]
},
"@std/bytes@1.0.5": {
"integrity": "4465dd739d7963d964c809202ebea6d5c6b8e3829ef25c6a224290fbb8a1021e"
},
"@std/crypto@1.0.4": {
"integrity": "cee245c453bd5366207f4d8aa25ea3e9c86cecad2be3fefcaa6cb17203d79340"
},
"@std/encoding@1.0.7": {
"integrity": "f631247c1698fef289f2de9e2a33d571e46133b38d042905e3eac3715030a82d"
},
"@std/fmt@1.0.5": {
"integrity": "0cfab43364bc36650d83c425cd6d99910fc20c4576631149f0f987eddede1a4d"
},
"@std/fs@1.0.13": {
"integrity": "756d3ff0ade91c9e72b228e8012b6ff00c3d4a4ac9c642c4dac083536bf6c605"
},
"@std/http@1.0.13": {
"integrity": "d29618b982f7ae44380111f7e5b43da59b15db64101198bb5f77100d44eb1e1e",
"dependencies": [
"jsr:@std/encoding@^1.0.7"
]
},
"@std/internal@1.0.5": {
"integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba"
},
"@std/io@0.225.2": {
"integrity": "3c740cd4ee4c082e6cfc86458f47e2ab7cb353dc6234d5e9b1f91a2de5f4d6c7"
},
"@std/log@0.224.14": {
"integrity": "257f7adceee3b53bb2bc86c7242e7d1bc59729e57d4981c4a7e5b876c808f05e",
"dependencies": [
"jsr:@std/fmt",
"jsr:@std/fs",
"jsr:@std/io"
]
},
"@std/media-types@1.1.0": {
"integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4"
},
"@valibot/valibot@0.42.1": {
"integrity": "ba0f6f7964aaeec0e4b1f793d575061f325ae6254cbb9d7ff01fb65068a0a23b"
}
},
"npm": {
"@types/node@22.13.11": {
"integrity": "sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==",
"dependencies": [
"undici-types"
]
},
"base64-js@1.5.1": {
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"buffer@5.7.1": {
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"dependencies": [
"base64-js",
"ieee754"
]
},
"buffer@6.0.3": {
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"dependencies": [
"base64-js",
"ieee754"
]
},
"call-bind-apply-helpers@1.0.2": {
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dependencies": [
"es-errors",
"function-bind"
]
},
"call-bound@1.0.3": {
"integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
"dependencies": [
"call-bind-apply-helpers",
"get-intrinsic"
]
},
"dunder-proto@1.0.1": {
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dependencies": [
"call-bind-apply-helpers",
"es-errors",
"gopd"
]
},
"es-define-property@1.0.1": {
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
},
"es-errors@1.3.0": {
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
},
"es-object-atoms@1.1.1": {
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dependencies": [
"es-errors"
]
},
"function-bind@1.1.2": {
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
},
"get-intrinsic@1.3.0": {
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dependencies": [
"call-bind-apply-helpers",
"es-define-property",
"es-errors",
"es-object-atoms",
"function-bind",
"get-proto",
"gopd",
"has-symbols",
"hasown",
"math-intrinsics"
]
},
"get-proto@1.0.1": {
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dependencies": [
"dunder-proto",
"es-object-atoms"
]
},
"gopd@1.2.0": {
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
},
"has-symbols@1.1.0": {
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
},
"hasown@2.0.2": {
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": [
"function-bind"
]
},
"hyperid@3.3.0": {
"integrity": "sha512-7qhCVT4MJIoEsNcbhglhdmBKb09QtcmJNiIQGq7js/Khf5FtQQ9bzcAuloeqBeee7XD7JqDeve9KNlQya5tSGQ==",
"dependencies": [
"buffer@5.7.1",
"uuid",
"uuid-parse"
]
},
"ieee754@1.2.1": {
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"math-intrinsics@1.1.0": {
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
},
"object-inspect@1.13.4": {
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="
},
"path-to-regexp@8.2.0": {
"integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="
},
"qs@6.14.0": {
"integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
"dependencies": [
"side-channel"
]
},
"safe-buffer@5.2.1": {
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"side-channel-list@1.0.0": {
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"dependencies": [
"es-errors",
"object-inspect"
]
},
"side-channel-map@1.0.1": {
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"dependencies": [
"call-bound",
"es-errors",
"get-intrinsic",
"object-inspect"
]
},
"side-channel-weakmap@1.0.2": {
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"dependencies": [
"call-bound",
"es-errors",
"get-intrinsic",
"object-inspect",
"side-channel-map"
]
},
"side-channel@1.1.0": {
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"dependencies": [
"es-errors",
"object-inspect",
"side-channel-list",
"side-channel-map",
"side-channel-weakmap"
]
},
"string_decoder@1.3.0": {
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": [
"safe-buffer"
]
},
"undici-types@6.20.0": {
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg=="
},
"undici@6.21.1": {
"integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ=="
},
"uuid-parse@1.1.0": {
"integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A=="
},
"uuid@8.3.2": {
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
}
},
"remote": {
"https://deno.land/std@0.119.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58",
"https://deno.land/std@0.119.0/_util/os.ts": "dfb186cc4e968c770ab6cc3288bd65f4871be03b93beecae57d657232ecffcac",
"https://deno.land/std@0.119.0/async/deadline.ts": "1d6ac7aeaee22f75eb86e4e105d6161118aad7b41ae2dd14f4cfd3bf97472b93",
"https://deno.land/std@0.119.0/async/debounce.ts": "b2f693e4baa16b62793fd618de6c003b63228db50ecfe3bd51fc5f6dc0bc264b",
"https://deno.land/std@0.119.0/async/deferred.ts": "ab60d46ba561abb3b13c0c8085d05797a384b9f182935f051dc67136817acdee",
"https://deno.land/std@0.119.0/async/delay.ts": "f2d8ccaa8ebc26594bd8b0989edfd8a96257a714c1dee2fb54d986e5bdd840ac",
"https://deno.land/std@0.119.0/async/mod.ts": "78425176fabea7bd1046ce3819fd69ce40da85c83e0f174d17e8e224a91f7d10",
"https://deno.land/std@0.119.0/async/mux_async_iterator.ts": "62abff3af9ff619e8f2adc96fc70d4ca020fa48a50c23c13f12d02ed2b760dbe",
"https://deno.land/std@0.119.0/async/pool.ts": "353ce4f91865da203a097aa6f33de8966340c91b6f4a055611c8c5d534afd12f",
"https://deno.land/std@0.119.0/async/tee.ts": "3e9f2ef6b36e55188de16a667c702ace4ad0cf84e3720379160e062bf27348ad",
"https://deno.land/std@0.119.0/bytes/bytes_list.ts": "3bff6a09c72b2e0b1e92e29bd3b135053894196cca07a2bba842901073efe5cb",
"https://deno.land/std@0.119.0/bytes/equals.ts": "69f55fdbd45c71f920c1a621e6c0865dc780cd8ae34e0f5e55a9497b70c31c1b",
"https://deno.land/std@0.119.0/bytes/mod.ts": "fedb80b8da2e7ad8dd251148e65f92a04c73d6c5a430b7d197dc39588c8dda6f",
"https://deno.land/std@0.119.0/encoding/base64.ts": "0b58bd6477214838bf711eef43eac21e47ba9e5c81b2ce185fe25d9ecab3ebb3",
"https://deno.land/std@0.119.0/encoding/base64url.ts": "a5c3f71c99a397f9c6da7701e7cae4c031700ae180ba68a0fc9ff9baca71e4ac",
"https://deno.land/std@0.119.0/fmt/colors.ts": "8368ddf2d48dfe413ffd04cdbb7ae6a1009cf0dccc9c7ff1d76259d9c61a0621",
"https://deno.land/std@0.119.0/fmt/printf.ts": "419510e0a3f7c8d680fbf6472d5a11e372854f1c2b32fca5fdb513575c485068",
"https://deno.land/std@0.119.0/io/buffer.ts": "8f10342821b81990acf859cdccb4e4031c7c9187a0ffc3ed6b356ee29ecc6681",
"https://deno.land/std@0.119.0/node/_buffer.js": "a43c35f89ef15c2107cba863d2cd0bd573e829a2a3b80167033da9b96066ce51",
"https://deno.land/std@0.119.0/node/_core.ts": "8b105f152c9f8990f7558b0a0a514d4f3ab90a85c09ca60e489ca92ed5271f75",
"https://deno.land/std@0.119.0/node/_errors.ts": "bf047995427fc15a27a182ee13021e94315fa758c1cc7c3576374876ab9f952a",
"https://deno.land/std@0.119.0/node/_fixed_queue.ts": "ac68975e5663ea9cf2e465e91a7600fa3d5dc1a2f556cf80fd1ee25b37dbcedf",
"https://deno.land/std@0.119.0/node/_next_tick.ts": "9b0bde39bfad9774be73b0fe9e77df757e147e2fc04784d51fe777d36d142260",
"https://deno.land/std@0.119.0/node/_process/process.ts": "828b67fa5858e30901e11a84968b2732057cd0bea34afcf49f617498040e7dbe",
"https://deno.land/std@0.119.0/node/_util/_debuglog.ts": "b46f7b640bad2afb8adf2b3560e6969071f9de0721dcec9e3530465ab5ec6c40",
"https://deno.land/std@0.119.0/node/_util/_util_callbackify.ts": "a89ade5b5d989f9eb9261cd8179a5f8a1579c6a898549fab304200a85ee520b0",
"https://deno.land/std@0.119.0/node/_util/_util_promisify.ts": "6d8d88fd81763f1074c84f4494484f9dd86182dfe46b63fe5aadd6448b767896",
"https://deno.land/std@0.119.0/node/_utils.ts": "42e5b28e1740ba0be9b4ace2c9adb95317d9cadb099418c51ed34cd6a301cae3",
"https://deno.land/std@0.119.0/node/buffer.ts": "cf37645cd1fc08f1afa02532dc6682cefd8cabbf44812aa9a4916e79bdd1cd11",
"https://deno.land/std@0.119.0/node/internal/buffer.js": "21f4bfea78679e18bfebeb1d9ece1a94d337d282a2a68d43ab5ff655c2d33e56",
"https://deno.land/std@0.119.0/node/internal/idna.ts": "6d7cce3e569fd1d9e558d63ab522700e57b998597196a4746436a62f3f8b1c7f",
"https://deno.land/std@0.119.0/node/internal/querystring.ts": "1fdee1158205dd220c3711cce2e994bd0848abc7518d245856d142b08a266a07",
"https://deno.land/std@0.119.0/node/internal/util.js": "11ef4e4724a4d40f1f5ed4a54e42cee3c3af0f75dcea33ac063747a6e3b9a582",
"https://deno.land/std@0.119.0/node/internal/util/comparisons.ts": "9e6979948221ee00a105355d8a9afe47fa059a331351cbb2e11fa8e2f50749d4",
"https://deno.land/std@0.119.0/node/internal/util/inspect.js": "2b50eb7e8b1d5a73a933f56a361262cf2f23429a8e1ca6ee47db04229bf12208",
"https://deno.land/std@0.119.0/node/internal/util/types.ts": "31745332605771b59701baebf1655f389202b10bb787afb78e66c92486bc0332",
"https://deno.land/std@0.119.0/node/internal/validators.js": "16b58d8ac8505897422d4ad273652a8cb36c470f470df9677700cc3b78c24c19",
"https://deno.land/std@0.119.0/node/internal_binding/_libuv_winerror.ts": "689b8fa52dafb7a1b55f3ffceca5905f77fb2720a8b9f77c921cd598e3ef3757",
"https://deno.land/std@0.119.0/node/internal_binding/_node.ts": "c257e872993334cfab1eaab8212d422b24f7388281f73c7bbdd9bbf1bb2a7841",
"https://deno.land/std@0.119.0/node/internal_binding/_utils.ts": "ee6830db046e829b5c4d6df1de21f1a3d6464469a2fe303b32bc44bb171c2eeb",
"https://deno.land/std@0.119.0/node/internal_binding/_winerror.ts": "27e4a7d78ae31e7b07faafd25fe46fa367271aec0a49f3be067f7ec160396a38",
"https://deno.land/std@0.119.0/node/internal_binding/buffer.ts": "f92daf02083bdaf0006a06fa1f26a26436f4b7b0c5d000aff7d01da3d1aa42a5",
"https://deno.land/std@0.119.0/node/internal_binding/constants.ts": "91c9274c8891f93262032129348b25f170162cb126dc424ec7ce8a2172812657",
"https://deno.land/std@0.119.0/node/internal_binding/string_decoder.ts": "6aca87fb018705e34c39d6f67d610b14c8ca04a47ca58f0d1fc8d5f9281e6b7b",
"https://deno.land/std@0.119.0/node/internal_binding/types.ts": "80621e22989a1431068bc3b7f59cab3afb42cfb4d4cd273e61fa2d11ab3abab6",
"https://deno.land/std@0.119.0/node/internal_binding/util.ts": "446b4d704f4d588df98db9c6f9c7465c08a23f20f781ba55bcc246fb260012af",
"https://deno.land/std@0.119.0/node/internal_binding/uv.ts": "3b722cd20508d54e4d790c825b23510a5fa4313ad42bfb8904704a738df32325",
"https://deno.land/std@0.119.0/node/path.ts": "86b262d6957fba13d4f3d58a92ced49de4f40169d06542326b5547ff97257f0d",
"https://deno.land/std@0.119.0/node/querystring.ts": "4f436efdd97659fe567c00f1cff233d4f5b67002ef388951db052dfe7c3de114",
"https://deno.land/std@0.119.0/node/string_decoder.ts": "e97d4988a3490fd572fc23e64b3a33dabc4ac76c1fb82665f34dc8956d57a658",
"https://deno.land/std@0.119.0/node/url.ts": "c58bd8adfde3833026c1c3c8f55cd14e37f9f1e4dd6b7b99c5feb4ace710e9b4",
"https://deno.land/std@0.119.0/node/util.ts": "3be88d5d1c908f279bf7fecd77ff3933e048aa50205029fdd69280f67aea5901",
"https://deno.land/std@0.119.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853",
"https://deno.land/std@0.119.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4",
"https://deno.land/std@0.119.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b",
"https://deno.land/std@0.119.0/path/common.ts": "f41a38a0719a1e85aa11c6ba3bea5e37c15dd009d705bd8873f94c833568cbc4",
"https://deno.land/std@0.119.0/path/glob.ts": "ea87985765b977cc284b92771003b2070c440e0807c90e1eb0ff3e095911a820",
"https://deno.land/std@0.119.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12",
"https://deno.land/std@0.119.0/path/posix.ts": "34349174b9cd121625a2810837a82dd8b986bbaaad5ade690d1de75bbb4555b2",
"https://deno.land/std@0.119.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c",
"https://deno.land/std@0.119.0/path/win32.ts": "11549e8c6df8307a8efcfa47ad7b2a75da743eac7d4c89c9723a944661c8bd2e",
"https://deno.land/std@0.119.0/streams/conversion.ts": "7ff9af42540063fa72003ab31a377ba9dde8532d43b16329b933c37a6d7aac5f",
"https://deno.land/std@0.119.0/testing/_diff.ts": "e6a10d2aca8d6c27a9c5b8a2dbbf64353874730af539707b5b39d4128140642d",
"https://deno.land/std@0.119.0/testing/asserts.ts": "e8bd3ff280731e2d2b48c67d6ed97ce2c0b717601ccb38816aff89edce71680d",
"https://deno.land/std@0.157.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74",
"https://deno.land/std@0.157.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4",
"https://deno.land/std@0.157.0/bytes/equals.ts": "3c3558c3ae85526f84510aa2b48ab2ad7bdd899e2e0f5b7a8ffc85acb3a6043a",
"https://deno.land/std@0.157.0/bytes/mod.ts": "763f97d33051cc3f28af1a688dfe2830841192a9fea0cbaa55f927b49d49d0bf",
"https://deno.land/std@0.157.0/io/buffer.ts": "fae02290f52301c4e0188670e730cd902f9307fb732d79c4aa14ebdc82497289",
"https://deno.land/std@0.157.0/streams/conversion.ts": "fc4eb76a14148c43f0b85e903a5a1526391aa40ed9434dc21e34f88304eb823e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-util.js": "6188861fdee925a1085384702ada49d4102f7084697b9b38319e4d53ded11248",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v1.js": "f81e4290ea83341b3151fa10f25c570f6e9bee44b4976610b316d621452f403f",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v1.transformer.js": "bc5f2e7eb4a39d057a9d14cbc81d4b43b435b5c4b71d3c8917d06afd81f8774c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v2.js": "f121a291825044f7e174963d96fedecc6a57c29aca1bdc60fe6239d448531f26",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v2.transformer.js": "bd1cbdbbecdabaf3d9c80824c2e92307abcfe1a9dce403a9786ea34c71a0a13c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v3.js": "7036c83e49a3906f2639717323d230486d9fddd4500d343d90ef1ec4eb3fb665",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v3.transformer.js": "d14279a5c09d70ccf43750ca3930be4810fc37d38a663328f26d6f87b6b5bee3",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x0.js": "9ebda7629bd511bc55a0ace523e1e3a8c6c06a2049eaa5c80d27bdec4451283b",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x0.transformer.js": "a3a47856ee49c2af9bf56db608959527bc9cfbd7208ec017be8a74bb272ab7b8",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x1.js": "b8cf09b24e660079866de4ee69f890c31eb55c162f98e0a8b947ed4f9b9c59c4",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x1.transformer.js": "3a5ea40231c8df92c1af41c29d95d4db41ffe00f53eab0f89892f9dc978998a7",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x2.js": "f97b2d1a99f487dc0a356f58024a10d977e5677d1e205a31637c91005ec31663",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x2.transformer.js": "02f083dae8b1994b04c8ac773ec6a233fb59abb85450e4c3a3c15ac96bba3094",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x3.js": "0dcba1e488bbe33b6b46dfd3ac44af235fe6741df1595c738c27808deed586b2",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x3.transformer.js": "45b913c622f7d51b4c570aeb8b3d69305ef11845dd26d50c122c89c4a9de94d0",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x4.js": "168f543cb415ea07a7459ddda302025639a263b0b8d4b5cddf0199c0f1de3f81",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v4x4.transformer.js": "85a4fdde11f428caa01d8657d3904885a27cef0e511e9e85a4905ee3aac6a100",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x0.js": "9c14bbaedefcfccee8eb7afa77c53603e3f8aabf0a5b2ea6bb7bc7cd4615c103",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x0.transformer.js": "3093aa5b2543cb174b559e55a5ff9d294b7e51474ddffe345403caa082f760e6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x0.utc.transformer.js": "3447525c410da810896c8cd82413fae58010d3e3b4db5f5b4600898e6495997e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x1.js": "714de8f0ae9ff09f739ef9eb48a485e05a7806bdbe82acd0403c779c85c7d9c1",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x1.transformer.js": "3fdcff71e4d6d258fbbb4ad64d79dd650635a5640e20fbd554b4e2f5981f046a",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x2.js": "08331ed2f8125456fbd79bdc2bec58c617c7f5e8832a45e16bf959d499ad90d8",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x2.transformer.js": "22a97efd4d68679dd39fea0d94dc7cbd38a46773d8254a063e7a2b3ae04e968a",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x3.js": "adfd91290269cc99472063ecf348804bdc898926f90943ee204270ff260fd6ec",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x3.transformer.js": "f352b5f54b5db80ba7ec51985fabb00ce5067f2f92e9bff9803d7bdc080bcf64",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x4.js": "994b5098db3243b88647c663f392bf8a7e6a0ffae4e30a3d85244d61de87718f",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x4.transformer.js": "966d71a5c0ff99eb40e73a3ade69d0555b1333759dde00d222447584315c31d7",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x5.js": "e4ba4bf6e9d249b9deee6fd8f50e85009dfb7640485b240a8810961c368c30a9",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x5.transformer.js": "43983c40de0544c36987559773d3f356d90a88b142bf8d08a56387c482cc490f",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x6.js": "6658a3d69ed023e629979cbee6b802810a62395f5b04a19f9abb9319774e0273",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x6.transformer.js": "985eff910b26ebedf1f82217591f5c85f2c249b0a4052ef0a1e25102810f2bda",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x7.js": "506caeae0da1a6bd9be30a8729dddf76dd73ed5495ac4b3cd03cb98887b74300",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x7.transformer.js": "897ace26170c2255e951d2697a029f957357c59def09459caa3f0e906e73b83e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x8.js": "7706020193d6fd1d2314be58ca441ed318f5df535b8be2c3421f85c36abee953",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/bolt-protocol-v5x8.transformer.js": "6a188d70b171d0f97bb4c85e0980d3d20e7d27fb88bcab68218a7bee5ae51914",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/create.js": "1f04ec788f468842350cd34c1f3788e06e48fa9f69b3d745831b8798f07eaf68",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/handshake.js": "1b6421547f4439a03f5b82f65b8f0a0764045c0807692ac9f38292b105664340",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/index.js": "6b6320102de3ac69fede4512591b53522678956f1bab002742014e35eaba350f",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/request-message.js": "ca0e31c57a30ab2f6ee54012d03ce0bb0d1007bf3e6657a89abfaa1d984dfd53",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/response-handler.js": "2bdef7a1c9c8850f4ba594ba40eb97bfd2bb1e13e8e808276c34048bf6e31648",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/routing-table-raw.js": "d17532440c85c4e5ffa42cd2a35bd334713135f681cab5e3bb5f4b27e1d86b5f",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/stream-observers.js": "f5e71feff58dd5b32ecb6e86edb45fdabe01abe12866284ccbd0bdf709ba9658",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/temporal-factory.js": "f23fa2154f8a450416071ad7bc4c45c4b35f307226aeeba650d64a9e1c10f44c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/bolt/transformer.js": "2c73d9c235529fae3aca1cd6537786e37dc21371a342205db30cd2718d0afd58",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/buf/base-buf.js": "ad1fea47cff99244c15624adca837c78824b5ff2b1ee5cf9c8f8d1f0b87fbe17",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/buf/index.js": "52e94c8ecf57fec12b1d6a79b72636240250e0270b3a995264854d584c4fd169",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/channel-buf.js": "8b5ebef2fe3d6e282686d9bd6edb7a14fc0d391cbd9b029ef1c040dabc9a1ddb",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/channel-config.js": "6b4c0a7feeba38801eae93ea81b4776025e876f6fe91f30304136baecb51c90c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/chunking.js": "6cb0edcd168cad7ec4245803158a5761771067d87d1c91a4edc85fa648917886",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/combined-buf.js": "22ac829cdfb1180ec4d08b7088bc9098fe2f2757687d54452680d931d3f632cf",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/deno/deno-channel.js": "794a1eae08276feaa19007663e9661d17034bed40e5752268874f12d3c0d7d2e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/deno/deno-client-certificates-loader.js": "b9faf33b51f566f1605a6f98c052b0b19b714741f80221fd016a31973b86da47",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/deno/deno-host-name-resolver.js": "11e46fdd2899a290116f34e31ce797733a95c348ed7ef79d4b0a33f48118174d",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/deno/index.js": "64435776e1305c37c197e43e18f02e65fdfdcbc0a4e874c844176e2cb86609e6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/index.js": "0af32b512036837092d4b850bb11e8bc08a6d8f211a104697593f6fda5d1381d",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/channel/utf8.js": "646d64b2dfe1ea7d69ed5f73848ef4fc5ed4a759bcf2698079e81166210e8f59",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/authentication-provider.js": "8f3410dd754086574744e9ef724403ba94c1b02d9b09feabc57d44ce002ee87b",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/client-certificate-holder.js": "583bf8a72f427c23593aa694a74df2b88417b9ae0d378135bacb15c25645fcca",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/connection-provider-direct.js": "6c031c0d631941d8f9271162d7645ac8d5fc39dafc5476f1960da8a4d3911ad1",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/connection-provider-pooled.js": "f81b91413ff90b06d5c4684a4a58f4c0ddb036dee4fd2f6b3e19bf296d2bd722",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/connection-provider-routing.js": "8639fba3339ff96d78d6dd5792a60b330457df31a3afcb264120b3f8f7811fbf",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/connection-provider-single.js": "27b4bdddb86970901d6846d5b791ea7ec0597359960051fcf39f26c7f092277e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/index.js": "a07265e0efc70f05429479c0890e7db30ec2a1d885b5844adf381ce0285b6e14",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection-provider/liveness-check-provider.js": "fa72fb17681cc3fcfe97029a68bbe17e0e96d2da72d613071a81b6f0329d7d7a",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection/connection-channel.js": "804ad2052121d32285c241c7a4c5965e8fbf963a42edf168c846b4a9c7d778d3",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection/connection-delegate.js": "dc23005fa9562185965b241faddd982bc4bac6fadef9a54805a8a29791f97b53",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection/connection-error-handler.js": "7cb75e2417556550baa154e7db9f79cf0ab2f6df59522a0cde023226c10b5361",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection/connection.js": "873fb4aa01d51c837f911d669cad1e8cae68455804f6ed454eaeedd6ed3bbdd8",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/connection/index.js": "41349a6d563ebebb557ace8b919bc793890e01e17f0b0d100a1785da5fa1d995",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/index.js": "199d52389c391d27b76b6ab874808690b17b7c9970c334477e2fbe9d3b96a5a7",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/lang/functional.js": "e5326a229dd38fac2f9623caa1465f835a835895b5a89bb645b71f7ee4c7e819",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/lang/index.js": "1fc9b3dcf8324eacee7aeea2afd3cb619a0c1080ed92f72d4fa0af2460f5fda6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/lang/object.js": "3c4a9a3040b2bbaa42fd5cf550d2992fa2c5b602e594e45f185384d0bfff58f4",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/load-balancing/index.js": "99b3e2559c2646d7fb1569a8176e9cae02ca2ca20bc3f004b68458d02d7afb10",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/load-balancing/least-connected-load-balancing-strategy.js": "2b15f9e3b43accb615ff51a6d5b78c76b5e77a0da10e5cecaf0965632d52521a",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/load-balancing/load-balancing-strategy.js": "64b8f3122d0d19fefbc288098ca19b0a8c4cf0582de9f242db29fd6ad5a5b834",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/load-balancing/round-robin-array-index.js": "14866d564f8db3e88ff40ae5831da39fd8b56c8ea7f0a7033e4e2bff9acd5301",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/packstream/index.js": "b8f9a8d64a180566e601460d6f262bddd289f4f6d5439918bea505c0beea9d3e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/packstream/packstream-v1.js": "6f37bcd98d2201dcaa07b235a239d59200f37ac47684bdc31c8e741fecb8fbc3",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/packstream/packstream-v2.js": "05ed1671fb691527595591a8953a34dd541190672f6062b928bf1fdf5d2f3f18",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/packstream/structure.js": "d694bdf00c72843408d7db60b619ed93bca769a00999f7433212808cbc9d3b24",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/rediscovery/index.js": "31df074a0d7f2447e5197ea9707fbcb67c6a66c73450d32e6028ede90ae3ce47",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/rediscovery/rediscovery.js": "519e2414560945b5467028b305c34a0699aa1a2bd15b5260576ef7cb6433c017",
"https://deno.land/x/neo4j_driver_lite@5.28.1/bolt-connection/rediscovery/routing-table.js": "53dd3878f25a574a665ab310821703c3e68b9800f507fe2b787d505622d67793",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/auth-token-manager.ts": "0710403bd4dee8de08a97a6ea5aa96c0692dee9e90e9d291826845e6e27e1748",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/auth.ts": "ea97dde1b1343fead62d2595fe30b687fdea1a2b6eb0d9582ca89de0383bb9ac",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/bookmark-manager.ts": "0abd0a37804789cf4f8e0b4bdf86f37b9cf5127a515666f23469c2e2ef775cef",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/client-certificate.ts": "85666813c1a25f89da49f1d9db76fed62e3f4abeba41e37c644634fd7ba7463e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/connection-provider.ts": "c889ca4dd8ef8ea32f1d88490142f8ca3642589efaae6e62c3e5d1f3b5b62a0b",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/connection.ts": "b9cdfd3c0b9fdeb081ae53a134217912e44f1bd7ea17d7bd7d6da221ef3437fd",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/driver.ts": "84950f30692c0b100e62bfa6f8f574c470b4203f4278087e0151b145f2d21100",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/error.ts": "8745a0cfd762ae2e4d6820e91eefe76a92064dbeb746f73aa2dd3245a928c668",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/gql-constants.ts": "57148e6e3101970458f41c3d33c3f6c7a1a138b89f30ed3883816ab32e696474",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/graph-types.ts": "2b45ae83804d89721a869dffa87103ef6db731b2379cd3d47f93236690053362",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/index.ts": "b97ab2c2fb684fa3f008464459ecd56bac800498bb838e4a2802f5384faca2a6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/integer.ts": "c364b286b50e152681e5ef0ab3fc5a7108f7bafe7ebebb9d3af2a242152d1ae5",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/auth-util.ts": "9cbadc76e1897c44e9da93a4e8fb6a92b20020dce5ea005213c5dfa03ce92185",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/bolt-agent/deno/bolt-agent.ts": "eb6699b7073a83be0a2bfb8279fc488236b7ee303dfdecbaa6e44ad878583df0",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/bolt-agent/deno/index.ts": "37974586224aac462eb5a0f788358bcdb43d7c921e1c0196f9ab4b4b1ad6ca58",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/bolt-agent/index.ts": "4127fdd558eb5d5c164e7e75259808d90fb924a4af1068ec63c91b7383bf7ef5",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/bookmarks.ts": "f86659f8628c89342a0fe27460ead4218ffadb25f5123315a1658957f72116ce",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/connection-holder.ts": "da8c6cb3cb18c2124b136e8f737a167ac272f24a66613446fc51b9f8ccb5dd13",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/constants.ts": "1841dc0c1a26386e309f53a1d27d4246a9cc47c80b56c30b8042a82c5f56f80e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/homedb-cache.ts": "02fe9449ced6f14cb49b4e5caeb2e7dd06a0b9392ab70c41c338575d65f09338",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/index.ts": "c24ba0f11ceba12a7a1c5546cd249f68eca93276f09f230c57fb830dd95d2061",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/logger.ts": "0db99bd8be86d75f428a77381b7d698033973f00cd8e5520dff0a29032d6557b",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/object-util.ts": "b8312e1d75bb0b2230a4835be237e6ce88422be6ded89936fa7cb722b0de785d",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/observers.ts": "b3b2e0c0b0fd6410a557e478fcd00be63ba02cf9c4c6f076bfcdd8f6d5f3d1dc",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/pool/index.ts": "225a0e6bc78537d9c20dbac1bec3260542b53aa378eeb38f76382c1d7d19438d",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/pool/pool-config.ts": "703b5ac354977e70bcf59a6933f5cd164318752f06a1b6a7daa940cc394f6fd5",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/pool/pool.ts": "0942764da83ecc43f5f297428b3e45067397de436d18f1755670c3c42cef0fa6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/query-executor.ts": "52cd000bc510ff6b065aea76234ca096fd6e54066a58f0bd6de29f1879fe16fe",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/resolver/base-host-name-resolver.ts": "e58bff18db8dcee558a7bf8fa60c2c5d70d7a4620083968577e8d4c056ba6fe8",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/resolver/configured-custom-resolver.ts": "2a5e42da0049100d30ea61f181cee5378c226837e3c45e606bc044943267f64c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/resolver/index.ts": "5ca219a9f7a16c27ce0c98fad709df6ed773e05d0af57af9e4e4c2c8cad948d2",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/server-address.ts": "0fea4ffde9a3772a5e3dcee5d11ba60221f443c5fa1983f006831b36031c7229",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/temporal-util.ts": "d4c46b01fe28fe7b78d140930a449da5d4321d53cdf55a8a6ca61388138455f1",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/transaction-executor.ts": "5e10c4e66c5d89ac403e90750353d4e4ce146f8409fefef14618fce7507d9dc8",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/tx-config.ts": "c169d23925ea9c3288bef3aafadb43262e4c09d69ee980a5b611d03c6868aaf6",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/url-util.ts": "7244377c839cb3c7aa96e14705f0c815561a42e9126acd5958733e86300ef730",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/internal/util.ts": "b1def4fb37afe5ce4682290e15700f5cf9f883842b2362b6de515057b4021d91",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/json.ts": "9dd9932375e3de103aa827cb6920c2b4a8566c619dc8bff9d2ed2ad9d371175e",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/notification-filter.ts": "a1d1b616506bd5b0fb0d3e3a87373c7a7d529c0c5e807e9918fe6cd959faaf84",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/notification.ts": "0d83b1c4ffc7588f0b1fbd6a649b3321c4c161949f3f11ced2e94b0d7dc29988",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/record.ts": "0e3d10db1b206773128fe325c977e0ca6fe1c5f5faf5aa80a0ac817e5e9fbddc",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/result-eager.ts": "7161607d3226d8568bdcfb5ab0a0dc73875124a59288afe0443d2f4d5d51f39c",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/result-summary.ts": "36485b6e603640dcc91e8aca3dff076f2ee9a3312ff7970abd22e1d42bcb5934",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/result-transformers.ts": "30d27753dea5f2048a61e4394e16e4388d3af8b46c5368f049d76bd006ddd1f2",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/result.ts": "51c4f566e892b8f1810deea49505e113fef9b47aad3e773b9adaae4fb014af76",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/session.ts": "827285d56bec3006d1abd4fe447d52298f4676dceb15eac0a7256ddb3ae91d8d",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/spatial-types.ts": "20a7961ee212c33424ff6dcbf989a67b304af4b01d13adb6532d43193aba40de",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/temporal-types.ts": "e42fcafe6c3eb334b69b6e9c8f375e837f9795082481245ca5683d693e0c9bc1",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/transaction-managed.ts": "8a7739723115b1ac143f2a641b91c21c4c42858ce1eeb8e3adbf3f67d6305735",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/transaction-promise.ts": "61396d6b9b78c16f213c15b235c2a9275523acc809bbbfea4e7e58f1fd9d54d3",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/transaction.ts": "5e9779c400db9d5745bc048945998664fca3127b573e973167fba92b6f1770a1",
"https://deno.land/x/neo4j_driver_lite@5.28.1/core/types.ts": "abcd1dbaf3d1a0947b8ae269f1ddff2eea9f4e161a458496fc2e79ac002605e5",
"https://deno.land/x/neo4j_driver_lite@5.28.1/logging.ts": "66d1f9eab651da3759b8cb9b46506edcb1610bb25e379a733045f7c28d41ff50",
"https://deno.land/x/neo4j_driver_lite@5.28.1/mod.ts": "5d5a32df405780238aa0ee36eceb85b370a4a173d727ef01941922a034f33ade",
"https://deno.land/x/neo4j_driver_lite@5.28.1/version.ts": "66c6f8420eddf8f0b2f450935b73c41256365e807fa5672c635a75301539b1b0"
},
"workspace": {
"dependencies": [
"jsr:@oak/acorn@^1.1.1",
"jsr:@std/assert@1",
"npm:@types/node@^22.13.11"
]
}
}

View file

@ -1,18 +1,15 @@
import {
Context,
RouteHandler,
RouteInitWithHandler,
Router,
} from "@oak/acorn";
import { Router } from "@oak/acorn";
import { db_setup, select_closest } from "./db.ts";
import { DatabaseSync } from "node:sqlite";
import { json_mime_add, substitute_base_name_ } from "./utils.ts";
import { json_mime_add, substitute_base_name_, cors_add } from "./utils.ts";
import { assert } from "@std/assert";
import neo4j from "https://deno.land/x/neo4j_driver_lite@5.28.1/mod.ts";
import { graph_setup } from "./graph.ts";
const root_url: string = Deno.env.get("ROOT_URL") as string;
const usingDocker = true;
const root_url: string = usingDocker
? Deno.env.get("ROOT_URL") as string : "http://localhost:8080/api";
assert(root_url, "ROOT_URL env var not defined");
// bind values we're actually using
@ -24,8 +21,9 @@ const substitute_base_name = substitute_base_name_.bind(
const { hostname, port } = { hostname: "0.0.0.0", port: 80 };
const neo4jHost = usingDocker ? "neo4j" : "127.0.0.1"; // localhost does NOT work
const graph_driver = neo4j.driver(
"neo4j://neo4j:7687",
`neo4j://${neo4jHost}:7687`,
neo4j.auth.basic("neo4j", "your_password"),
);
console.log("initializing graph with static data");
@ -52,6 +50,7 @@ router.get(
async (_) => {
const headers = new Headers();
json_mime_add(headers);
cors_add(headers);
return new Response(JSON.stringify(await trip_list), { headers });
},
);
@ -64,6 +63,7 @@ router.get(
const body = substitute_base_name(bytes);
const headers = new Headers();
json_mime_add(headers);
cors_add(headers);
return new Response(body, { headers });
} catch (_) {
@ -80,6 +80,7 @@ router.get(
const body = substitute_base_name(bytes);
const headers = new Headers();
json_mime_add(headers);
cors_add(headers);
return new Response(body, { headers });
} catch (_) {
@ -126,61 +127,54 @@ router.get(
}, 1);
const headers = new Headers();
json_mime_add(headers);
return new Response(
`{
"path": [
cors_add(headers);
const r = {
path: [
{
"trip":{
"href":"${root_url}/trips/BCT_R51_inb_T08",
"polyline":${
JSON.stringify(
"ivz_GtswmMEQo@P]Ko@_Dg@gByBfCcBjBWX]^Ua@[u@uFdGqErFoDxDiIrIaG|FwGlFyCvCo@r@{@tAq@vAu@vBy@~C_CbJaBhFgF`SY~@YNi@?cDuA_@u@NqAf@{@lAw@vAArBl@jGxB`DlARt@iAnF_BrCi@tBl@Vl@}BEw@p@iAPw@zAaHLYNG|BbArAp@XBNGPOb@{AtAiF@o@s@c@}E}Bg@QS~AzCnALe@X[t@\\r@\\RR?XKr@g@fB_AfDOR[B{@_@aAg@_Bs@_@PWV]FsLeEiCs@eAHaAd@w@xA]jAk@h@uAYKYDs@q@MMCGQ@O?c@_B_@Uj@]P[g@[q@YiAg@sHMmAy@_C}@wCuD{Ja@wA@mAbBkElAyDZuD\\iD^mAh@s@`DcCfBoDzA_DXeBr@iNZoHKkA}@kB{@i@}@QmERmBBw@Om@_@g@c@m@m@Y_AScAImABmAHs@RMFWIc@YIS^H`AGtBVhC^jA|@fAfAj@x@T`JSb@Pn@Zf@bA^tAQjFm@vLQhD]nAoAnCiBhDiDdCk@`ASv@y@fIUzAqBlFmA|BxF`QjHyFo@eAeAqBM{@Hu@Pe@|CaGhCwD\\_@bA}Ah@qAdAiDjAqDtAqDd@q@jAo@~Ce@`DE~CCjAl@hAzBl@pBd@xC@hCY~Co@fBeCrGgB~BcAjA}A|BoErIuBnEm@`Au@b@yANaASuAcA_DbEi@bASzACdBEbDo@pBLT|@b@rKrBbAf@\\^Jp@]~AsFdVqBfI_Kx_@sAlH}@xIk@dHOpCEjCAd@P|IXdLZlDf@tD`DnR\\vCLjDEpFa@~Fs@rI}CrVSdDKhG@pVR|Td@|k@BbQTj@|C~Cl@|DlD|TPjAfBpIp@~EvBhL|BpLxAnIaC|@gE`BL`A`@tB]t@SCaBu@iB{@iDqALhDFzC~Bb@nAg@hCh@p@J",
)
}
trip: {
href: `${root_url}/trips/BCT_R51_inb_T08`,
polyline: "ivz_GtswmMEQo@P]Ko@_Dg@gByBfCcBjBWX]^Ua@[u@uFdGqErFoDxDiIrIaG|FwGlFyCvCo@r@{@tAq@vAu@vBy@~C_CbJaBhFgF`SY~@YNi@?cDuA_@u@NqAf@{@lAw@vAArBl@jGxB`DlARt@iAnF_BrCi@tBl@Vl@}BEw@p@iAPw@zAaHLYNG|BbArAp@XBNGPOb@{AtAiF@o@s@c@}E}Bg@QS~AzCnALe@X[t@\\r@\\RR?XKr@g@fB_AfDOR[B{@_@aAg@_Bs@_@PWV]FsLeEiCs@eAHaAd@w@xA]jAk@h@uAYKYDs@q@MMCGQ@O?c@_B_@Uj@]P[g@[q@YiAg@sHMmAy@_C}@wCuD{Ja@wA@mAbBkElAyDZuD\\iD^mAh@s@`DcCfBoDzA_DXeBr@iNZoHKkA}@kB{@i@}@QmERmBBw@Om@_@g@c@m@m@Y_AScAImABmAHs@RMFWIc@YIS^H`AGtBVhC^jA|@fAfAj@x@T`JSb@Pn@Zf@bA^tAQjFm@vLQhD]nAoAnCiBhDiDdCk@`ASv@y@fIUzAqBlFmA|BxF`QjHyFo@eAeAqBM{@Hu@Pe@|CaGhCwD\\_@bA}Ah@qAdAiDjAqDtAqDd@q@jAo@~Ce@`DE~CCjAl@hAzBl@pBd@xC@hCY~Co@fBeCrGgB~BcAjA}A|BoErIuBnEm@`Au@b@yANaASuAcA_DbEi@bASzACdBEbDo@pBLT|@b@rKrBbAf@\\^Jp@]~AsFdVqBfI_Kx_@sAlH}@xIk@dHOpCEjCAd@P|IXdLZlDf@tD`DnR\\vCLjDEpFa@~Fs@rI}CrVSdDKhG@pVR|Td@|k@BbQTj@|C~Cl@|DlD|TPjAfBpIp@~EvBhL|BpLxAnIaC|@gE`BL`A`@tB]t@SCaBu@iB{@iDqALhDFzC~Bb@nAg@hCh@p@J",
},
"enter_bus":{
"href":"${root_url}/stops/BCT_95103",
"lattitude":42.101991,
"longitude":-75.83611,
"time":"00:00"
enter_bus: {
href: `${root_url}/stops/BCT_95103`,
latitude: 42.101991,
longitude: -75.83611,
time: "00:00"
},
exit_bus:{
href: `${root_url}/stops/BCT_1`,
latitude: 42.101354,
longitude: -75.910801,
time: "00:00",
},
"exit_bus":{
"href":"${root_url}/stops/BCT_1",
"lattitude":42.101354,
"longitude":-75.910801,
"time":"00:00"
}
},
{
"trip": {
"href":"${root_url}/trips/BCT_R28otb_T11",
"polyline":${
JSON.stringify(
"az}_GvjinM}KiBQsHw@y@oDiEmFeGgFcGyAcB_@c@HcA^qL^gL@w@UyFMcIEkBi@aTi@aREmBCeAi@D_Id@sJl@{GZsRnAw@DASUsLGgBI]MUc@a@UEWBw@Vw@j@y@Nc@FYBj@jFJfAkDx@qAVcA^UFFfCD`AnIc@jH]pIi@rDSzJk@vKo@fDQbF[Di@a@oN_@mNe@eMs@qSW_Ha@{L[}Ie@mL_@mJBoAPyA^iATm@T_@R]l@_@zCgA`@QrBfEVLlATN^D^HPL?XGLQN[CYQQUBS@W@SCoAUSSUc@wAaDkA`@{@^gA`@m@^g@hAa@z@Wv@MrABp@L~FPjDXbI^fLPbEHhDd@tMd@pMj@jNP~GLbFVnK\\pJVfJHpDJrERzGH`FJdENlHN`DCbCUbHEbBQ`GObDGr@|@hA|DlE`F`GvDhE`DnDRrHrDf@Xo@nCl@",
)
}
trip: {
href: `${root_url}/trips/BCT_R28otb_T11`,
polyline: "az}_GvjinM}KiBQsHw@y@oDiEmFeGgFcGyAcB_@c@HcA^qL^gL@w@UyFMcIEkBi@aTi@aREmBCeAi@D_Id@sJl@{GZsRnAw@DASUsLGgBI]MUc@a@UEWBw@Vw@j@y@Nc@FYBj@jFJfAkDx@qAVcA^UFFfCD`AnIc@jH]pIi@rDSzJk@vKo@fDQbF[Di@a@oN_@mNe@eMs@qSW_Ha@{L[}Ie@mL_@mJBoAPyA^iATm@T_@R]l@_@zCgA`@QrBfEVLlATN^D^HPL?XGLQN[CYQQUBS@W@SCoAUSSUc@wAaDkA`@{@^gA`@m@^g@hAa@z@Wv@MrABp@L~FPjDXbI^fLPbEHhDd@tMd@pMj@jNP~GLbFVnK\\pJVfJHpDJrERzGH`FJdENlHN`DCbCUbHEbBQ`GObDGr@|@hA|DlE`F`GvDhE`DnDRrHrDf@Xo@nCl@",
},
enter_bus:{
href: `${root_url}/stops/BCT_2802`,
latitude: 42.100982,
longitude: -75.91097,
time: "00:00",
},
exit_bus:{
href: `${root_url}/stops/BCT_2804`,
latitude: 42.105488,
longitude: -75.906281,
time: "00:00",
},
"enter_bus":{
"href":"${root_url}/stops/BCT_2802",
"lattitude":42.100982,
"longitude":-75.91097,
"time":"00:00"
},
"exit_bus":{
"href":"${root_url}/stops/BCT_2804",
"lattitude":42.105488,
"longitude":-75.906281,
"time":"00:00"
}
}
],
"_legit":[
"${start}",
"${mid}",
"${end}"
]
}`,
_legit: [
start,
mid,
end,
],
};
return new Response(
JSON.stringify(r),
{ headers },
);
},

View file

@ -3,6 +3,11 @@ export function json_mime_add(headers: Headers): Headers {
return headers;
}
export function cors_add(headers: Headers): Headers {
headers.set("Access-Control-Allow-Origin", "*");
return headers;
}
export function substitute_base_name_(
pattern: string | RegExp,
replace_with: string,