@cloudnux/local-cloud-provider 0.2.2 → 0.4.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.
@@ -1266,341 +1266,199 @@ function createLocalStorageService() {
1266
1266
  import * as fs2 from "fs";
1267
1267
  import * as path2 from "path";
1268
1268
  var { readFile: readFile2, writeFile: writeFile2, access: access2, mkdir: mkdir2 } = fs2.promises;
1269
- var DEFAULT_MOCK_PLACES = {
1269
+ var DEFAULT_MOCK_LOCATIONS = {
1270
1270
  "place-001": {
1271
1271
  placeId: "place-001",
1272
- text: "Gamla Stan",
1273
- address: "Gamla Stan, Stockholm, Sweden",
1274
- formattedAddress: "Gamla Stan, Stockholm, 111 27, Sweden",
1272
+ title: "Gamla Stan",
1273
+ subtitle: "Old Town, Stockholm",
1275
1274
  coordinates: {
1276
- latitude: 59.3254,
1277
- longitude: 18.0716
1275
+ lat: 59.3254,
1276
+ lng: 18.0716
1278
1277
  },
1279
- categories: ["historical", "tourist_attraction", "landmark"],
1280
- phoneNumber: "+46 8 508 29 000",
1281
- website: "https://www.visitstockholm.com/gamla-stan/",
1282
- openingHours: {
1283
- periods: [
1284
- { day: 0, open: "00:00", close: "00:00" },
1285
- // 24/7
1286
- { day: 1, open: "00:00", close: "00:00" },
1287
- { day: 2, open: "00:00", close: "00:00" },
1288
- { day: 3, open: "00:00", close: "00:00" },
1289
- { day: 4, open: "00:00", close: "00:00" },
1290
- { day: 5, open: "00:00", close: "00:00" },
1291
- { day: 6, open: "00:00", close: "00:00" }
1292
- ],
1293
- weekdayText: [
1294
- "Monday: Open 24 hours",
1295
- "Tuesday: Open 24 hours",
1296
- "Wednesday: Open 24 hours",
1297
- "Thursday: Open 24 hours",
1298
- "Friday: Open 24 hours",
1299
- "Saturday: Open 24 hours",
1300
- "Sunday: Open 24 hours"
1301
- ]
1302
- }
1278
+ street: "Gamla Stan",
1279
+ city: "Stockholm",
1280
+ region: "Stockholm County",
1281
+ postalCode: "111 27",
1282
+ country: "Sweden",
1283
+ countryCode: "SWE",
1284
+ fullAddress: "Gamla Stan, 111 27 Stockholm, Sweden",
1285
+ placeType: "locality",
1286
+ categories: ["historical", "tourist_attraction", "landmark"]
1303
1287
  },
1304
1288
  "place-002": {
1305
1289
  placeId: "place-002",
1306
- text: "Kungliga Slottet (Royal Palace)",
1307
- address: "Slottsbacken 1, Stockholm, Sweden",
1308
- formattedAddress: "Kungliga Slottet, Slottsbacken 1, 111 30 Stockholm, Sweden",
1290
+ title: "Kungliga Slottet",
1291
+ subtitle: "Royal Palace of Stockholm",
1309
1292
  coordinates: {
1310
- latitude: 59.3268,
1311
- longitude: 18.0718
1293
+ lat: 59.3268,
1294
+ lng: 18.0718
1312
1295
  },
1313
- categories: ["tourist_attraction", "landmark", "palace"],
1314
- phoneNumber: "+46 8 402 61 30",
1315
- website: "https://www.kungligaslotten.se/",
1316
- openingHours: {
1317
- periods: [
1318
- { day: 0, open: "10:00", close: "17:00" },
1319
- { day: 1, open: "10:00", close: "17:00" },
1320
- { day: 2, open: "10:00", close: "17:00" },
1321
- { day: 3, open: "10:00", close: "17:00" },
1322
- { day: 4, open: "10:00", close: "17:00" },
1323
- { day: 5, open: "10:00", close: "17:00" },
1324
- { day: 6, open: "10:00", close: "17:00" }
1325
- ],
1326
- weekdayText: [
1327
- "Monday: 10:00 AM \u2013 5:00 PM",
1328
- "Tuesday: 10:00 AM \u2013 5:00 PM",
1329
- "Wednesday: 10:00 AM \u2013 5:00 PM",
1330
- "Thursday: 10:00 AM \u2013 5:00 PM",
1331
- "Friday: 10:00 AM \u2013 5:00 PM",
1332
- "Saturday: 10:00 AM \u2013 5:00 PM",
1333
- "Sunday: 10:00 AM \u2013 5:00 PM"
1334
- ]
1335
- }
1296
+ street: "Slottsbacken",
1297
+ streetNumber: "1",
1298
+ city: "Stockholm",
1299
+ region: "Stockholm County",
1300
+ postalCode: "111 30",
1301
+ country: "Sweden",
1302
+ countryCode: "SWE",
1303
+ fullAddress: "Slottsbacken 1, 111 30 Stockholm, Sweden",
1304
+ placeType: "poi",
1305
+ categories: ["tourist_attraction", "landmark", "palace"]
1336
1306
  },
1337
1307
  "place-003": {
1338
1308
  placeId: "place-003",
1339
- text: "Espresso House Kungstr\xE4dg\xE5rden",
1340
- address: "Kungstr\xE4dg\xE5rden 18, Stockholm, Sweden",
1341
- formattedAddress: "Espresso House, Kungstr\xE4dg\xE5rden 18, 111 47 Stockholm, Sweden",
1309
+ title: "Espresso House Kungstr\xE4dg\xE5rden",
1310
+ subtitle: "Coffee shop in central Stockholm",
1342
1311
  coordinates: {
1343
- latitude: 59.3311,
1344
- longitude: 18.072
1312
+ lat: 59.3311,
1313
+ lng: 18.072
1345
1314
  },
1346
- categories: ["cafe", "coffee_shop", "food"],
1347
- phoneNumber: "+46 8 611 07 26",
1348
- website: "https://espressohouse.com/",
1349
- openingHours: {
1350
- periods: [
1351
- { day: 0, open: "07:00", close: "20:00" },
1352
- { day: 1, open: "07:00", close: "21:00" },
1353
- { day: 2, open: "07:00", close: "21:00" },
1354
- { day: 3, open: "07:00", close: "21:00" },
1355
- { day: 4, open: "07:00", close: "21:00" },
1356
- { day: 5, open: "07:00", close: "22:00" },
1357
- { day: 6, open: "08:00", close: "21:00" }
1358
- ],
1359
- weekdayText: [
1360
- "Monday: 7:00 AM \u2013 9:00 PM",
1361
- "Tuesday: 7:00 AM \u2013 9:00 PM",
1362
- "Wednesday: 7:00 AM \u2013 9:00 PM",
1363
- "Thursday: 7:00 AM \u2013 9:00 PM",
1364
- "Friday: 7:00 AM \u2013 10:00 PM",
1365
- "Saturday: 8:00 AM \u2013 9:00 PM",
1366
- "Sunday: 7:00 AM \u2013 8:00 PM"
1367
- ]
1368
- }
1315
+ street: "Kungstr\xE4dg\xE5rden",
1316
+ streetNumber: "18",
1317
+ city: "Stockholm",
1318
+ region: "Stockholm County",
1319
+ postalCode: "111 47",
1320
+ country: "Sweden",
1321
+ countryCode: "SWE",
1322
+ fullAddress: "Kungstr\xE4dg\xE5rden 18, 111 47 Stockholm, Sweden",
1323
+ placeType: "poi",
1324
+ categories: ["cafe", "coffee_shop", "food"]
1369
1325
  },
1370
1326
  "place-004": {
1371
1327
  placeId: "place-004",
1372
- text: "ICA N\xE4ra Stureplan",
1373
- address: "Humleg\xE5rdsgatan 17, Stockholm, Sweden",
1374
- formattedAddress: "ICA N\xE4ra Stureplan, Humleg\xE5rdsgatan 17, 114 46 Stockholm, Sweden",
1328
+ title: "ICA N\xE4ra Stureplan",
1329
+ subtitle: "Grocery store",
1375
1330
  coordinates: {
1376
- latitude: 59.3372,
1377
- longitude: 18.0737
1331
+ lat: 59.3372,
1332
+ lng: 18.0737
1378
1333
  },
1379
- categories: ["grocery", "supermarket", "food"],
1380
- phoneNumber: "+46 8 611 78 30",
1381
- website: "https://www.ica.se/butiker/nara/stockholm/ica-nara-stureplan-1339/start/",
1382
- openingHours: {
1383
- periods: [
1384
- { day: 0, open: "07:00", close: "23:00" },
1385
- { day: 1, open: "07:00", close: "23:00" },
1386
- { day: 2, open: "07:00", close: "23:00" },
1387
- { day: 3, open: "07:00", close: "23:00" },
1388
- { day: 4, open: "07:00", close: "23:00" },
1389
- { day: 5, open: "07:00", close: "23:00" },
1390
- { day: 6, open: "07:00", close: "23:00" }
1391
- ],
1392
- weekdayText: [
1393
- "Monday: 7:00 AM \u2013 11:00 PM",
1394
- "Tuesday: 7:00 AM \u2013 11:00 PM",
1395
- "Wednesday: 7:00 AM \u2013 11:00 PM",
1396
- "Thursday: 7:00 AM \u2013 11:00 PM",
1397
- "Friday: 7:00 AM \u2013 11:00 PM",
1398
- "Saturday: 7:00 AM \u2013 11:00 PM",
1399
- "Sunday: 7:00 AM \u2013 11:00 PM"
1400
- ]
1401
- }
1334
+ street: "Humleg\xE5rdsgatan",
1335
+ streetNumber: "17",
1336
+ city: "Stockholm",
1337
+ region: "Stockholm County",
1338
+ postalCode: "114 46",
1339
+ country: "Sweden",
1340
+ countryCode: "SWE",
1341
+ fullAddress: "Humleg\xE5rdsgatan 17, 114 46 Stockholm, Sweden",
1342
+ placeType: "poi",
1343
+ categories: ["grocery", "supermarket", "food"]
1402
1344
  },
1403
1345
  "place-005": {
1404
1346
  placeId: "place-005",
1405
- text: "Stockholm Central Station",
1406
- address: "Centralplan 15, Stockholm, Sweden",
1407
- formattedAddress: "Stockholm Central Station, Centralplan 15, 111 20 Stockholm, Sweden",
1347
+ title: "Stockholm Central Station",
1348
+ subtitle: "Main railway station",
1408
1349
  coordinates: {
1409
- latitude: 59.3303,
1410
- longitude: 18.0604
1350
+ lat: 59.3303,
1351
+ lng: 18.0604
1411
1352
  },
1412
- categories: ["train_station", "transport", "travel"],
1413
- phoneNumber: "+46 77 175 75 75",
1414
- website: "https://www.jernhusen.se/stockholm-centralstation/",
1415
- openingHours: {
1416
- periods: [
1417
- { day: 0, open: "04:00", close: "01:00" },
1418
- { day: 1, open: "04:00", close: "01:00" },
1419
- { day: 2, open: "04:00", close: "01:00" },
1420
- { day: 3, open: "04:00", close: "01:00" },
1421
- { day: 4, open: "04:00", close: "01:00" },
1422
- { day: 5, open: "04:00", close: "01:00" },
1423
- { day: 6, open: "04:00", close: "01:00" }
1424
- ],
1425
- weekdayText: [
1426
- "Monday: 4:00 AM \u2013 1:00 AM",
1427
- "Tuesday: 4:00 AM \u2013 1:00 AM",
1428
- "Wednesday: 4:00 AM \u2013 1:00 AM",
1429
- "Thursday: 4:00 AM \u2013 1:00 AM",
1430
- "Friday: 4:00 AM \u2013 1:00 AM",
1431
- "Saturday: 4:00 AM \u2013 1:00 AM",
1432
- "Sunday: 4:00 AM \u2013 1:00 AM"
1433
- ]
1434
- }
1353
+ street: "Centralplan",
1354
+ streetNumber: "15",
1355
+ city: "Stockholm",
1356
+ region: "Stockholm County",
1357
+ postalCode: "111 20",
1358
+ country: "Sweden",
1359
+ countryCode: "SWE",
1360
+ fullAddress: "Centralplan 15, 111 20 Stockholm, Sweden",
1361
+ placeType: "poi",
1362
+ categories: ["train_station", "transport", "travel"]
1435
1363
  },
1436
1364
  "place-006": {
1437
1365
  placeId: "place-006",
1438
- text: "Fotografiska",
1439
- address: "Stadsg\xE5rdshamnen 22, Stockholm, Sweden",
1440
- formattedAddress: "Fotografiska, Stadsg\xE5rdshamnen 22, 116 45 Stockholm, Sweden",
1366
+ title: "Fotografiska",
1367
+ subtitle: "Photography museum",
1441
1368
  coordinates: {
1442
- latitude: 59.3188,
1443
- longitude: 18.086
1369
+ lat: 59.3188,
1370
+ lng: 18.086
1444
1371
  },
1445
- categories: ["museum", "art", "photography", "cultural"],
1446
- phoneNumber: "+46 8 509 005 00",
1447
- website: "https://www.fotografiska.com/sto/",
1448
- openingHours: {
1449
- periods: [
1450
- { day: 0, open: "10:00", close: "23:00" },
1451
- { day: 1, open: "10:00", close: "23:00" },
1452
- { day: 2, open: "10:00", close: "23:00" },
1453
- { day: 3, open: "10:00", close: "23:00" },
1454
- { day: 4, open: "10:00", close: "01:00" },
1455
- { day: 5, open: "10:00", close: "01:00" },
1456
- { day: 6, open: "10:00", close: "23:00" }
1457
- ],
1458
- weekdayText: [
1459
- "Monday: 10:00 AM \u2013 11:00 PM",
1460
- "Tuesday: 10:00 AM \u2013 11:00 PM",
1461
- "Wednesday: 10:00 AM \u2013 11:00 PM",
1462
- "Thursday: 10:00 AM \u2013 11:00 PM",
1463
- "Friday: 10:00 AM \u2013 1:00 AM",
1464
- "Saturday: 10:00 AM \u2013 1:00 AM",
1465
- "Sunday: 10:00 AM \u2013 11:00 PM"
1466
- ]
1467
- }
1372
+ street: "Stadsg\xE5rdshamnen",
1373
+ streetNumber: "22",
1374
+ city: "Stockholm",
1375
+ region: "Stockholm County",
1376
+ postalCode: "116 45",
1377
+ country: "Sweden",
1378
+ countryCode: "SWE",
1379
+ fullAddress: "Stadsg\xE5rdshamnen 22, 116 45 Stockholm, Sweden",
1380
+ placeType: "poi",
1381
+ categories: ["museum", "art", "photography", "cultural"]
1468
1382
  },
1469
1383
  "place-007": {
1470
1384
  placeId: "place-007",
1471
- text: "IKEA City",
1472
- address: "Sveav\xE4gen 44, Stockholm, Sweden",
1473
- formattedAddress: "IKEA City, Sveav\xE4gen 44, 111 34 Stockholm, Sweden",
1385
+ title: "IKEA City",
1386
+ subtitle: "Furniture store in central Stockholm",
1474
1387
  coordinates: {
1475
- latitude: 59.3378,
1476
- longitude: 18.0597
1388
+ lat: 59.3378,
1389
+ lng: 18.0597
1477
1390
  },
1478
- categories: ["furniture", "shopping", "home_goods"],
1479
- phoneNumber: "+46 775 700 500",
1480
- website: "https://www.ikea.com/se/sv/stores/stockholm-city/",
1481
- openingHours: {
1482
- periods: [
1483
- { day: 0, open: "10:00", close: "18:00" },
1484
- { day: 1, open: "10:00", close: "19:00" },
1485
- { day: 2, open: "10:00", close: "19:00" },
1486
- { day: 3, open: "10:00", close: "19:00" },
1487
- { day: 4, open: "10:00", close: "19:00" },
1488
- { day: 5, open: "10:00", close: "19:00" },
1489
- { day: 6, open: "10:00", close: "18:00" }
1490
- ],
1491
- weekdayText: [
1492
- "Monday: 10:00 AM \u2013 7:00 PM",
1493
- "Tuesday: 10:00 AM \u2013 7:00 PM",
1494
- "Wednesday: 10:00 AM \u2013 7:00 PM",
1495
- "Thursday: 10:00 AM \u2013 7:00 PM",
1496
- "Friday: 10:00 AM \u2013 7:00 PM",
1497
- "Saturday: 10:00 AM \u2013 6:00 PM",
1498
- "Sunday: 10:00 AM \u2013 6:00 PM"
1499
- ]
1500
- }
1391
+ street: "Sveav\xE4gen",
1392
+ streetNumber: "44",
1393
+ city: "Stockholm",
1394
+ region: "Stockholm County",
1395
+ postalCode: "111 34",
1396
+ country: "Sweden",
1397
+ countryCode: "SWE",
1398
+ fullAddress: "Sveav\xE4gen 44, 111 34 Stockholm, Sweden",
1399
+ placeType: "poi",
1400
+ categories: ["furniture", "shopping", "home_goods"]
1501
1401
  },
1502
1402
  "place-008": {
1503
1403
  placeId: "place-008",
1504
- text: "Skansen",
1505
- address: "Djurg\xE5rdssl\xE4tten 49-51, Stockholm, Sweden",
1506
- formattedAddress: "Skansen, Djurg\xE5rdssl\xE4tten 49-51, 115 21 Stockholm, Sweden",
1404
+ title: "Skansen",
1405
+ subtitle: "Open-air museum and zoo",
1507
1406
  coordinates: {
1508
- latitude: 59.3263,
1509
- longitude: 18.1066
1407
+ lat: 59.3263,
1408
+ lng: 18.1066
1510
1409
  },
1511
- categories: ["museum", "park", "tourist_attraction", "zoo"],
1512
- phoneNumber: "+46 8 442 80 00",
1513
- website: "https://www.skansen.se/",
1514
- openingHours: {
1515
- periods: [
1516
- { day: 0, open: "10:00", close: "18:00" },
1517
- { day: 1, open: "10:00", close: "18:00" },
1518
- { day: 2, open: "10:00", close: "18:00" },
1519
- { day: 3, open: "10:00", close: "18:00" },
1520
- { day: 4, open: "10:00", close: "18:00" },
1521
- { day: 5, open: "10:00", close: "20:00" },
1522
- { day: 6, open: "10:00", close: "20:00" }
1523
- ],
1524
- weekdayText: [
1525
- "Monday: 10:00 AM \u2013 6:00 PM",
1526
- "Tuesday: 10:00 AM \u2013 6:00 PM",
1527
- "Wednesday: 10:00 AM \u2013 6:00 PM",
1528
- "Thursday: 10:00 AM \u2013 6:00 PM",
1529
- "Friday: 10:00 AM \u2013 8:00 PM",
1530
- "Saturday: 10:00 AM \u2013 8:00 PM",
1531
- "Sunday: 10:00 AM \u2013 6:00 PM"
1532
- ]
1533
- }
1410
+ street: "Djurg\xE5rdssl\xE4tten",
1411
+ streetNumber: "49-51",
1412
+ city: "Stockholm",
1413
+ region: "Stockholm County",
1414
+ postalCode: "115 21",
1415
+ country: "Sweden",
1416
+ countryCode: "SWE",
1417
+ fullAddress: "Djurg\xE5rdssl\xE4tten 49-51, 115 21 Stockholm, Sweden",
1418
+ placeType: "poi",
1419
+ categories: ["museum", "park", "tourist_attraction", "zoo"]
1534
1420
  },
1535
1421
  "place-009": {
1536
1422
  placeId: "place-009",
1537
- text: "Drop Coffee",
1538
- address: "Wollmar Yxkullsgatan 10, Stockholm, Sweden",
1539
- formattedAddress: "Drop Coffee, Wollmar Yxkullsgatan 10, 118 50 Stockholm, Sweden",
1423
+ title: "Drop Coffee",
1424
+ subtitle: "Specialty coffee roastery",
1540
1425
  coordinates: {
1541
- latitude: 59.3149,
1542
- longitude: 18.0608
1426
+ lat: 59.3149,
1427
+ lng: 18.0608
1543
1428
  },
1544
- categories: ["cafe", "coffee_shop", "food"],
1545
- phoneNumber: "+46 8 642 06 09",
1546
- website: "https://dropcoffee.com/",
1547
- openingHours: {
1548
- periods: [
1549
- { day: 0, open: "08:00", close: "18:00" },
1550
- { day: 1, open: "07:30", close: "18:00" },
1551
- { day: 2, open: "07:30", close: "18:00" },
1552
- { day: 3, open: "07:30", close: "18:00" },
1553
- { day: 4, open: "07:30", close: "18:00" },
1554
- { day: 5, open: "07:30", close: "18:00" },
1555
- { day: 6, open: "08:00", close: "18:00" }
1556
- ],
1557
- weekdayText: [
1558
- "Monday: 7:30 AM \u2013 6:00 PM",
1559
- "Tuesday: 7:30 AM \u2013 6:00 PM",
1560
- "Wednesday: 7:30 AM \u2013 6:00 PM",
1561
- "Thursday: 7:30 AM \u2013 6:00 PM",
1562
- "Friday: 7:30 AM \u2013 6:00 PM",
1563
- "Saturday: 8:00 AM \u2013 6:00 PM",
1564
- "Sunday: 8:00 AM \u2013 6:00 PM"
1565
- ]
1566
- }
1429
+ street: "Wollmar Yxkullsgatan",
1430
+ streetNumber: "10",
1431
+ city: "Stockholm",
1432
+ region: "Stockholm County",
1433
+ postalCode: "118 50",
1434
+ country: "Sweden",
1435
+ countryCode: "SWE",
1436
+ fullAddress: "Wollmar Yxkullsgatan 10, 118 50 Stockholm, Sweden",
1437
+ placeType: "poi",
1438
+ categories: ["cafe", "coffee_shop", "food"]
1567
1439
  },
1568
1440
  "place-010": {
1569
1441
  placeId: "place-010",
1570
- text: "Vasa Museum",
1571
- address: "Gal\xE4rvarvsv\xE4gen 14, Stockholm, Sweden",
1572
- formattedAddress: "Vasa Museum, Gal\xE4rvarvsv\xE4gen 14, 115 21 Stockholm, Sweden",
1442
+ title: "Vasa Museum",
1443
+ subtitle: "Maritime museum",
1573
1444
  coordinates: {
1574
- latitude: 59.328,
1575
- longitude: 18.0914
1445
+ lat: 59.328,
1446
+ lng: 18.0914
1576
1447
  },
1577
- categories: ["museum", "tourist_attraction", "historical"],
1578
- phoneNumber: "+46 8 519 548 00",
1579
- website: "https://www.vasamuseet.se/",
1580
- openingHours: {
1581
- periods: [
1582
- { day: 0, open: "10:00", close: "17:00" },
1583
- { day: 1, open: "10:00", close: "17:00" },
1584
- { day: 2, open: "10:00", close: "17:00" },
1585
- { day: 3, open: "10:00", close: "17:00" },
1586
- { day: 4, open: "10:00", close: "20:00" },
1587
- { day: 5, open: "10:00", close: "17:00" },
1588
- { day: 6, open: "10:00", close: "17:00" }
1589
- ],
1590
- weekdayText: [
1591
- "Monday: 10:00 AM \u2013 5:00 PM",
1592
- "Tuesday: 10:00 AM \u2013 5:00 PM",
1593
- "Wednesday: 10:00 AM \u2013 5:00 PM",
1594
- "Thursday: 10:00 AM \u2013 8:00 PM",
1595
- "Friday: 10:00 AM \u2013 5:00 PM",
1596
- "Saturday: 10:00 AM \u2013 5:00 PM",
1597
- "Sunday: 10:00 AM \u2013 5:00 PM"
1598
- ]
1599
- }
1448
+ street: "Gal\xE4rvarvsv\xE4gen",
1449
+ streetNumber: "14",
1450
+ city: "Stockholm",
1451
+ region: "Stockholm County",
1452
+ postalCode: "115 21",
1453
+ country: "Sweden",
1454
+ countryCode: "SWE",
1455
+ fullAddress: "Gal\xE4rvarvsv\xE4gen 14, 115 21 Stockholm, Sweden",
1456
+ placeType: "poi",
1457
+ categories: ["museum", "tourist_attraction", "historical"]
1600
1458
  }
1601
1459
  };
1602
1460
  function calculateDistance(lat1, lon1, lat2, lon2) {
1603
- const R = 6371;
1461
+ const R = 6371e3;
1604
1462
  const dLat = (lat2 - lat1) * Math.PI / 180;
1605
1463
  const dLon = (lon2 - lon1) * Math.PI / 180;
1606
1464
  const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
@@ -1608,6 +1466,35 @@ function calculateDistance(lat1, lon1, lat2, lon2) {
1608
1466
  const distance = R * c;
1609
1467
  return distance;
1610
1468
  }
1469
+ function toLocationSuggestion(location, distance) {
1470
+ return {
1471
+ title: location.title,
1472
+ subtitle: location.subtitle,
1473
+ coordinates: location.coordinates,
1474
+ placeId: location.placeId,
1475
+ placeType: location.placeType,
1476
+ distance,
1477
+ provider: "local",
1478
+ rawData: location
1479
+ };
1480
+ }
1481
+ function toLocationAddress(location) {
1482
+ return {
1483
+ fullAddress: location.fullAddress,
1484
+ street: location.street,
1485
+ streetNumber: location.streetNumber,
1486
+ city: location.city,
1487
+ district: location.district,
1488
+ region: location.region,
1489
+ postalCode: location.postalCode,
1490
+ country: location.country,
1491
+ countryCode: location.countryCode,
1492
+ coordinates: location.coordinates,
1493
+ placeType: location.placeType,
1494
+ provider: "local",
1495
+ rawData: location
1496
+ };
1497
+ }
1611
1498
  function createLocalLocationService() {
1612
1499
  const baseDir = env("DEV_CLOUD_LOCATION_PATH", path2.join(process.cwd(), ".develop", ".local-location"));
1613
1500
  const placesFilePath = path2.join(baseDir, "places.json");
@@ -1623,66 +1510,83 @@ function createLocalLocationService() {
1623
1510
  const data = await readFile2(placesFilePath, "utf8");
1624
1511
  return JSON.parse(data);
1625
1512
  } catch {
1626
- await writeFile2(placesFilePath, JSON.stringify(DEFAULT_MOCK_PLACES, null, 2), "utf8");
1627
- return DEFAULT_MOCK_PLACES;
1513
+ await writeFile2(placesFilePath, JSON.stringify(DEFAULT_MOCK_LOCATIONS, null, 2), "utf8");
1514
+ logger.info(`Created default places file at: ${placesFilePath}`);
1515
+ return DEFAULT_MOCK_LOCATIONS;
1628
1516
  }
1629
1517
  } catch (error) {
1630
1518
  logger.warn(`Error loading places data: ${String(error)}`);
1631
- return DEFAULT_MOCK_PLACES;
1519
+ return DEFAULT_MOCK_LOCATIONS;
1632
1520
  }
1633
1521
  }
1634
1522
  return {
1635
1523
  /**
1636
- * Search for places based on a query
1637
- * @param query Search query
1638
- * @param options Search options
1639
- * @returns Promise containing search results
1524
+ * Get autocomplete suggestions for search box
1525
+ * Use case: User types "Stock..." → Show ["Stockholm", "Stockton", ...]
1640
1526
  */
1641
- async searchPlaces(query, options) {
1527
+ async getSuggestions(params) {
1642
1528
  const places = await loadPlaces();
1643
- const queryLower = query.toLowerCase();
1644
- let results = Object.values(places).filter((place) => {
1645
- const matchesQuery = place.text.toLowerCase().includes(queryLower) || place.address?.toLowerCase().includes(queryLower);
1646
- const matchesCategories = !options?.categories || options.categories.some(
1647
- (category) => place.categories?.some((cat) => cat.toLowerCase().includes(category.toLowerCase()))
1648
- );
1649
- return matchesQuery && matchesCategories;
1529
+ const queryLower = params.query.toLowerCase();
1530
+ const results = Object.values(places).filter((place) => {
1531
+ const matchesQuery = place.title.toLowerCase().includes(queryLower) || place.subtitle?.toLowerCase().includes(queryLower) || place.fullAddress.toLowerCase().includes(queryLower) || place.city?.toLowerCase().includes(queryLower);
1532
+ const matchesPlaceTypes = !params.placeTypes || params.placeTypes.includes(place.placeType || "");
1533
+ return matchesQuery && matchesPlaceTypes;
1650
1534
  });
1651
- if (options?.boundingBox) {
1652
- results = results.filter((place) => {
1653
- const lat = place.coordinates.latitude;
1654
- const lng = place.coordinates.longitude;
1655
- return lat >= options.boundingBox.minLatitude && lat <= options.boundingBox.maxLatitude && lng >= options.boundingBox.minLongitude && lng <= options.boundingBox.maxLongitude;
1656
- });
1535
+ let resultsWithDistance;
1536
+ if (params.biasPosition) {
1537
+ resultsWithDistance = results.map((place) => ({
1538
+ place,
1539
+ distance: calculateDistance(
1540
+ params.biasPosition.lat,
1541
+ params.biasPosition.lng,
1542
+ place.coordinates.lat,
1543
+ place.coordinates.lng
1544
+ )
1545
+ }));
1546
+ resultsWithDistance.sort((a, b) => (a.distance || 0) - (b.distance || 0));
1547
+ } else {
1548
+ results.sort((a, b) => a.title.localeCompare(b.title));
1549
+ resultsWithDistance = results.map((place) => ({ place }));
1657
1550
  }
1658
- const centerLat = options?.boundingBox ? (options.boundingBox.minLatitude + options.boundingBox.maxLatitude) / 2 : 40.7128;
1659
- const centerLng = options?.boundingBox ? (options.boundingBox.minLongitude + options.boundingBox.maxLongitude) / 2 : -74.006;
1660
- results.forEach((place) => {
1661
- place.distance = calculateDistance(
1662
- centerLat,
1663
- centerLng,
1664
- place.coordinates.latitude,
1665
- place.coordinates.longitude
1666
- );
1667
- });
1668
- results.sort((a, b) => (a.distance ?? 0) - (b.distance ?? 0));
1669
- if (options?.maxResults && options.maxResults > 0) {
1670
- results = results.slice(0, options.maxResults);
1551
+ const maxResults = params.maxResults || 5;
1552
+ const limitedResults = resultsWithDistance.slice(0, maxResults);
1553
+ return limitedResults.map(
1554
+ ({ place, distance }) => toLocationSuggestion(place, distance)
1555
+ );
1556
+ },
1557
+ /**
1558
+ * Get address from coordinates (reverse geocoding)
1559
+ * Use case: User clicks "Get my location" → Show "Drottninggatan 10, Stockholm"
1560
+ */
1561
+ async reverseGeocode(params) {
1562
+ const places = await loadPlaces();
1563
+ const placesWithDistance = Object.values(places).map((place) => ({
1564
+ place,
1565
+ distance: calculateDistance(
1566
+ params.coordinates.lat,
1567
+ params.coordinates.lng,
1568
+ place.coordinates.lat,
1569
+ place.coordinates.lng
1570
+ )
1571
+ }));
1572
+ placesWithDistance.sort((a, b) => a.distance - b.distance);
1573
+ const closest = placesWithDistance[0];
1574
+ if (!closest) {
1575
+ throw new Error("No places found near the given coordinates");
1671
1576
  }
1672
- return results;
1577
+ return toLocationAddress(closest.place);
1673
1578
  },
1674
1579
  /**
1675
- * Get detailed information about a specific place
1676
- * @param placeId ID of the place to get details for
1677
- * @returns Promise containing place details
1580
+ * Get detailed location info if suggestion doesn't have coordinates
1581
+ * Use case: User selects suggestion Need full coordinates
1678
1582
  */
1679
- async getPlaceDetails(placeId) {
1583
+ async getLocationDetails(placeId) {
1680
1584
  const places = await loadPlaces();
1681
1585
  const place = places[placeId];
1682
1586
  if (!place) {
1683
1587
  throw new Error(`Place not found: ${placeId}`);
1684
1588
  }
1685
- return place;
1589
+ return toLocationAddress(place);
1686
1590
  }
1687
1591
  };
1688
1592
  }
@@ -1821,4 +1725,4 @@ lodash-es/lodash.js:
1821
1725
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
1822
1726
  *)
1823
1727
  */
1824
- //# sourceMappingURL=index.mjs.map
1728
+ //# sourceMappingURL=index.js.map