Skip to content

Commit facf030

Browse files
authored
feat: faster initial map load & fallback tiles & glyphs (#38)
* feat: update styled-map-package (faster mapInfo) * update smp * feat: add fallbacks for missing resources * use noto glyphs as fallback
1 parent 4f6dc41 commit facf030

3 files changed

Lines changed: 118 additions & 106 deletions

File tree

package-lock.json

Lines changed: 11 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 103 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,105 @@
11
{
2-
"name": "@comapeo/map-server",
3-
"version": "1.0.1",
4-
"type": "module",
5-
"exports": {
6-
".": {
7-
"types": "./dist/index.d.ts",
8-
"default": "./dist/index.js"
9-
},
10-
"./errors.js": {
11-
"types": "./dist/lib/errors.d.ts",
12-
"default": "./dist/lib/errors.js"
13-
},
14-
"./constants.js": {
15-
"types": "./dist/lib/constants.d.ts",
16-
"default": "./dist/lib/constants.js"
17-
}
18-
},
19-
"scripts": {
20-
"test": "run-p test:*",
21-
"test:js": "vitest run",
22-
"test:lint": "eslint",
23-
"test:types": "tsc --noEmit",
24-
"test:publint": "npm run build && publint",
25-
"format": "prettier --write .",
26-
"prepare": "husky && patch-package",
27-
"build": "tsc -p tsconfig.npm.json",
28-
"prepack": "run-s test build"
29-
},
30-
"keywords": [],
31-
"author": "Awana Digital",
32-
"license": "MIT",
33-
"description": "Map Style & Tile server for CoMapeo",
34-
"devDependencies": {
35-
"@eslint/js": "^9.39.1",
36-
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
37-
"@tsconfig/node18": "^18.2.6",
38-
"@types/bogon": "^1.0.2",
39-
"@types/node": "^20.19.26",
40-
"@vitest/coverage-v8": "^4.0.17",
41-
"bogon": "^1.1.0",
42-
"eslint": "^9.39.1",
43-
"eventsource-client": "^1.2.0",
44-
"globals": "^16.5.0",
45-
"husky": "^9.1.7",
46-
"ky": "1.7.5",
47-
"lint-staged": "^16.2.7",
48-
"msw": "^2.12.4",
49-
"npm-run-all2": "^7.0.2",
50-
"patch-package": "^8.0.1",
51-
"prettier": "^3.7.4",
52-
"publint": "^0.3.17",
53-
"type-fest": "^5.3.1",
54-
"typescript": "^5.9.3",
55-
"typescript-eslint": "^8.53.1",
56-
"vitest": "^4.0.15"
57-
},
58-
"prettier": {
59-
"semi": false,
60-
"singleQuote": true,
61-
"useTabs": true,
62-
"importOrderSeparation": true,
63-
"importOrder": [
64-
"^node:",
65-
"^@?\\w",
66-
"^[./]"
67-
],
68-
"plugins": [
69-
"@trivago/prettier-plugin-sort-imports"
70-
]
71-
},
72-
"lint-staged": {
73-
"*.js": "eslint --cache --fix",
74-
"*.{js,css,md}": "prettier --write"
75-
},
76-
"dependencies": {
77-
"@whatwg-node/server": "^0.10.17",
78-
"itty-router": "^5.0.22",
79-
"p-defer": "^4.0.1",
80-
"p-mutex": "^0.1.0",
81-
"secret-stream-http": "^1.0.1",
82-
"styled-map-package-api": "^5.0.0-pre.3",
83-
"typebox": "^1.0.61",
84-
"typed-event-target": "^3.4.0"
85-
},
86-
"bundleDependencies": [
87-
"@whatwg-node/server"
88-
],
89-
"files": [
90-
"src/",
91-
"dist/"
92-
],
93-
"directories": {
94-
"test": "test"
95-
},
96-
"repository": {
97-
"type": "git",
98-
"url": "git+https://github.com/digidem/comapeo-map-server.git"
99-
},
100-
"bugs": {
101-
"url": "https://github.com/digidem/comapeo-map-server/issues"
102-
},
103-
"homepage": "https://github.com/digidem/comapeo-map-server#readme"
2+
"name": "@comapeo/map-server",
3+
"version": "1.0.1",
4+
"type": "module",
5+
"exports": {
6+
".": {
7+
"types": "./dist/index.d.ts",
8+
"default": "./dist/index.js"
9+
},
10+
"./errors.js": {
11+
"types": "./dist/lib/errors.d.ts",
12+
"default": "./dist/lib/errors.js"
13+
},
14+
"./constants.js": {
15+
"types": "./dist/lib/constants.d.ts",
16+
"default": "./dist/lib/constants.js"
17+
}
18+
},
19+
"scripts": {
20+
"test": "run-p test:*",
21+
"test:js": "vitest run",
22+
"test:lint": "eslint",
23+
"test:types": "tsc --noEmit",
24+
"test:publint": "npm run build && publint",
25+
"format": "prettier --write .",
26+
"prepare": "husky && patch-package",
27+
"build": "tsc -p tsconfig.npm.json",
28+
"prepack": "run-s test build"
29+
},
30+
"keywords": [],
31+
"author": "Awana Digital",
32+
"license": "MIT",
33+
"description": "Map Style & Tile server for CoMapeo",
34+
"devDependencies": {
35+
"@eslint/js": "^9.39.1",
36+
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
37+
"@tsconfig/node18": "^18.2.6",
38+
"@types/bogon": "^1.0.2",
39+
"@types/node": "^20.19.26",
40+
"@vitest/coverage-v8": "^4.0.17",
41+
"bogon": "^1.1.0",
42+
"eslint": "^9.39.1",
43+
"eventsource-client": "^1.2.0",
44+
"globals": "^16.5.0",
45+
"husky": "^9.1.7",
46+
"ky": "1.7.5",
47+
"lint-staged": "^16.2.7",
48+
"msw": "^2.12.4",
49+
"npm-run-all2": "^7.0.2",
50+
"patch-package": "^8.0.1",
51+
"prettier": "^3.7.4",
52+
"publint": "^0.3.17",
53+
"type-fest": "^5.3.1",
54+
"typescript": "^5.9.3",
55+
"typescript-eslint": "^8.53.1",
56+
"vitest": "^4.0.15"
57+
},
58+
"prettier": {
59+
"semi": false,
60+
"singleQuote": true,
61+
"useTabs": true,
62+
"importOrderSeparation": true,
63+
"importOrder": [
64+
"^node:",
65+
"^@?\\w",
66+
"^[./]"
67+
],
68+
"plugins": [
69+
"@trivago/prettier-plugin-sort-imports"
70+
]
71+
},
72+
"lint-staged": {
73+
"*.js": "eslint --cache --fix",
74+
"*.{js,css,md}": "prettier --write"
75+
},
76+
"dependencies": {
77+
"@whatwg-node/server": "^0.10.17",
78+
"itty-router": "^5.0.22",
79+
"p-defer": "^4.0.1",
80+
"p-mutex": "^0.1.0",
81+
"secret-stream-http": "^1.0.1",
82+
"smp-noto-glyphs": "^1.0.0-pre.0",
83+
"styled-map-package-api": "^5.0.0-pre.4",
84+
"typebox": "^1.0.61",
85+
"typed-event-target": "^3.4.0"
86+
},
87+
"bundleDependencies": [
88+
"@whatwg-node/server"
89+
],
90+
"files": [
91+
"src/",
92+
"dist/"
93+
],
94+
"directories": {
95+
"test": "test"
96+
},
97+
"repository": {
98+
"type": "git",
99+
"url": "git+https://github.com/digidem/comapeo-map-server.git"
100+
},
101+
"bugs": {
102+
"url": "https://github.com/digidem/comapeo-map-server/issues"
103+
},
104+
"homepage": "https://github.com/digidem/comapeo-map-server#readme"
104105
}

src/routes/maps.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { IRequestStrict, IttyRouter, type RequestHandler } from 'itty-router'
22
import Mutex from 'p-mutex'
3+
import { notoGlyphFallback } from 'smp-noto-glyphs'
4+
import { emptyTileFallback } from 'styled-map-package-api/fallbacks'
35
import { createServer as createSmpServer } from 'styled-map-package-api/server'
46

57
import type { Context } from '../context.js'
@@ -24,6 +26,8 @@ export function MapsRouter({ base = '/' }, ctx: Context) {
2426

2527
const smpServer = createSmpServer({
2628
base: `${base}:mapId/`,
29+
fallbackGlyph: notoGlyphFallback,
30+
fallbackTile: emptyTileFallback,
2731
})
2832

2933
const router = IttyRouter<IRequestStrict>({ base })

0 commit comments

Comments
 (0)