@reearth/ezu 0.2.0 → 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.
- package/README.md +74 -24
- package/bundler/ezu.d.ts +51 -42
- package/bundler/ezu.js +1 -1
- package/bundler/ezu_bg.js +117 -155
- package/bundler/ezu_bg.wasm +0 -0
- package/bundler/ezu_bg.wasm.d.ts +6 -10
- package/nodejs/ezu.d.ts +51 -42
- package/nodejs/ezu.js +118 -155
- package/nodejs/ezu_bg.wasm +0 -0
- package/nodejs/ezu_bg.wasm.d.ts +6 -10
- package/package.json +9 -2
- package/web/ezu.d.ts +57 -52
- package/web/ezu.js +117 -155
- package/web/ezu_bg.wasm +0 -0
- package/web/ezu_bg.wasm.d.ts +6 -10
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
# ezu
|
|
1
|
+
# @reearth/ezu
|
|
2
2
|
|
|
3
3
|
Painterly map renderer compiled to WebAssembly. The JS side owns all I/O
|
|
4
4
|
(HTTP, PMTiles, asset fetching); this package exposes a stateful
|
|
5
|
-
`Renderer` that holds a parsed style document, its built graph,
|
|
6
|
-
in-memory brush bank
|
|
5
|
+
`Renderer` that holds a parsed style document, its built graph, an
|
|
6
|
+
in-memory brush bank, and a per-tile binding buffer that mirrors the
|
|
7
|
+
style's `sources` block.
|
|
7
8
|
|
|
8
9
|
## Install
|
|
9
10
|
|
|
@@ -29,7 +30,9 @@ The package ships three builds and picks one automatically via the
|
|
|
29
30
|
import { Renderer } from "@reearth/ezu";
|
|
30
31
|
|
|
31
32
|
const renderer = new Renderer(styleJson);
|
|
32
|
-
|
|
33
|
+
renderer.bindSource("basemap", mvtBytes);
|
|
34
|
+
const png = renderer.renderTile(z, x, y);
|
|
35
|
+
renderer.clearSources();
|
|
33
36
|
```
|
|
34
37
|
|
|
35
38
|
### Browser (native ESM, no bundler)
|
|
@@ -54,34 +57,81 @@ function simdEnabled(): boolean;
|
|
|
54
57
|
class Renderer {
|
|
55
58
|
constructor(styleJson: string);
|
|
56
59
|
|
|
57
|
-
setStyle(styleJson: string): number;
|
|
58
|
-
registerBrush(name: string, mybJson: string): void;
|
|
59
|
-
unregisterBrush(name: string): boolean;
|
|
60
|
-
clearBrushes(): void;
|
|
61
|
-
brushCount(): number;
|
|
60
|
+
setStyle(styleJson: string): number; // → new node count
|
|
62
61
|
readonly tileSize: number;
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
// Bind tile bytes under a `sources.<name>` entry from the style.
|
|
64
|
+
// The renderer dispatches on the source's declared `type`:
|
|
65
|
+
// - brush → parse `.myb` JSON, persistent
|
|
66
|
+
// - image → decode PNG/WebP, persistent
|
|
67
|
+
// - mvt/pmtiles → decode at render time, cleared by `clearSources`
|
|
68
|
+
// - dem → decode + stitch at render time. Pass each neighbour
|
|
69
|
+
// tile with `{ coord: [dx, dy] }` (dx, dy ∈ {-1, 0, 1}).
|
|
70
|
+
bindSource(name: string, bytes: Uint8Array,
|
|
71
|
+
opts?: { coord?: [number, number] }): void;
|
|
72
|
+
clearSources(): void;
|
|
73
|
+
boundSources(): string[]; // names with at least one pending tile-scoped binding
|
|
74
|
+
|
|
75
|
+
// Single unified render. `opts.format` picks the encoder; `tileSize`
|
|
76
|
+
// / `pad` override the canvas for hi-DPI / preview.
|
|
77
|
+
renderTile(z: number, x: number, y: number, opts?: {
|
|
78
|
+
format?: "png" | "webp" | "rgba"; // default "png"
|
|
79
|
+
tileSize?: number;
|
|
80
|
+
pad?: number;
|
|
81
|
+
png?: { compression?: "fast" | "default" | "best" };
|
|
82
|
+
}): Uint8Array;
|
|
74
83
|
|
|
75
84
|
free(): void;
|
|
76
85
|
}
|
|
77
86
|
```
|
|
78
87
|
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
## Output formats
|
|
89
|
+
|
|
90
|
+
- **`format: "png"`** (default) returns PNG bytes — feed to `<img>`
|
|
91
|
+
via `URL.createObjectURL(new Blob([buf], { type: "image/png" }))`.
|
|
92
|
+
- **`format: "webp"`** returns lossless WebP bytes (~15 % smaller
|
|
93
|
+
than PNG on painterly tiles). Pure-Rust encoder, no native deps.
|
|
94
|
+
- **`format: "rgba"`** returns straight (un-premultiplied) 8-bit
|
|
95
|
+
RGBA bytes (`tile_size * tile_size * 4`) — feed directly to
|
|
96
|
+
`ctx.putImageData(new ImageData(new Uint8ClampedArray(buf.buffer), w, h), 0, 0)`
|
|
97
|
+
and skip the PNG decode round trip.
|
|
98
|
+
|
|
99
|
+
WebP is lossless via `image-webp` and has no quality knob — for
|
|
100
|
+
lossy WebP without C deps, render as `"rgba"` then call
|
|
101
|
+
`OffscreenCanvas.convertToBlob({ type: "image/webp", quality })`.
|
|
102
|
+
|
|
103
|
+
## Missing tiles
|
|
104
|
+
|
|
105
|
+
Don't bind any MVT source for that tile — `renderTile` returns the
|
|
106
|
+
style's paper background. `features` source nodes see no
|
|
107
|
+
`tile.<layer>` binding and emit an empty layer, so downstream paint
|
|
108
|
+
nodes short-circuit.
|
|
109
|
+
|
|
110
|
+
## Errors
|
|
81
111
|
|
|
82
|
-
|
|
83
|
-
discriminates the kind:
|
|
84
|
-
|
|
112
|
+
Every fallible method throws a JavaScript `Error` whose `.name`
|
|
113
|
+
discriminates the kind:
|
|
114
|
+
|
|
115
|
+
| `.name` | When |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `InvalidStyle` | `new Renderer(...)` / `setStyle(...)` rejected the JSON |
|
|
118
|
+
| `BrushParse` | `registerBrush(...)` or `bindSource` on a brush source couldn't parse the `.myb` JSON |
|
|
119
|
+
| `MvtDecode` | `bindSource` (mvt/pmtiles) or render couldn't decode the MVT bytes |
|
|
120
|
+
| `DemDecode` | `bindSource` (dem) couldn't decode the raster-DEM tile |
|
|
121
|
+
| `UnknownSource`| `bindSource` was given a name not in the style's `sources` block, or `coord` was malformed |
|
|
122
|
+
| `RenderFailed` | A node `eval` failed (e.g. missing brush, downcast mismatch) |
|
|
123
|
+
| `PngEncode` | PNG encoding failed |
|
|
124
|
+
| `WebpEncode` | WebP encoding failed |
|
|
125
|
+
|
|
126
|
+
```js
|
|
127
|
+
try {
|
|
128
|
+
await loadAndRender();
|
|
129
|
+
} catch (e) {
|
|
130
|
+
if (e.name === "InvalidStyle") showStyleError(e.message);
|
|
131
|
+
else if (e.name === "MvtDecode") showFetchError(e.message);
|
|
132
|
+
else throw e;
|
|
133
|
+
}
|
|
134
|
+
```
|
|
85
135
|
|
|
86
136
|
## License
|
|
87
137
|
|
package/bundler/ezu.d.ts
CHANGED
|
@@ -38,6 +38,10 @@ export class LogSink {
|
|
|
38
38
|
/**
|
|
39
39
|
* Set (or clear with `null` / `undefined`) the per-event JS
|
|
40
40
|
* callback. The callback receives a structured record object.
|
|
41
|
+
*
|
|
42
|
+
* No-op in multithreaded (`threads`) builds — events can originate
|
|
43
|
+
* on rayon worker threads, so live forwarding to a main-thread JS
|
|
44
|
+
* callback isn't available. Use `drain` / `drainLines` instead.
|
|
41
45
|
*/
|
|
42
46
|
onEvent(callback?: Function | null): void;
|
|
43
47
|
/**
|
|
@@ -58,64 +62,61 @@ export class Renderer {
|
|
|
58
62
|
free(): void;
|
|
59
63
|
[Symbol.dispose](): void;
|
|
60
64
|
/**
|
|
61
|
-
*
|
|
62
|
-
|
|
63
|
-
brushCount(): number;
|
|
64
|
-
/**
|
|
65
|
-
* Drop every registered brush.
|
|
66
|
-
*/
|
|
67
|
-
clearBrushes(): void;
|
|
68
|
-
/**
|
|
69
|
-
* Build a renderer from a style JSON document.
|
|
70
|
-
*/
|
|
71
|
-
constructor(style_json: string);
|
|
72
|
-
/**
|
|
73
|
-
* Register a `.myb` brush under `name` so a `brush-file` node with
|
|
74
|
-
* `src: "@name"` (via the style's `assets` map) resolves to it.
|
|
75
|
-
* Re-registering the same name replaces the previous entry.
|
|
76
|
-
*/
|
|
77
|
-
registerBrush(name: string, myb_json: string): void;
|
|
78
|
-
/**
|
|
79
|
-
* Render a single tile to PNG bytes using the style's `tile-size` / `pad`.
|
|
80
|
-
* Pass `null` for `mvtBytes` to get a paper-only tile.
|
|
65
|
+
* Bind raw tile bytes under a `sources.<name>` entry from the style.
|
|
66
|
+
* The renderer dispatches on the source's declared `type`:
|
|
81
67
|
*
|
|
82
|
-
*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
*
|
|
87
|
-
*
|
|
68
|
+
* - `mvt` / `pmtiles` → store raw MVT bytes per `(dx, dy)` neighbour
|
|
69
|
+
* offset (centre `coord: [0, 0]`, the default). Layers are bound as
|
|
70
|
+
* `<source>.<layer>` (centre) or `<source>.<layer>@dx,dy`
|
|
71
|
+
* (neighbours) when [`render_tile`] runs. Binding only the centre
|
|
72
|
+
* degrades cross-tile label collision to centre-only at borders.
|
|
73
|
+
* - `dem` / `raster` → store the raw bytes per `(dx, dy)` neighbour
|
|
74
|
+
* offset. The centre tile is `coord: [0, 0]` (default). Decoding
|
|
75
|
+
* and 3×3 stitching happen at render time once the tile id is known.
|
|
76
|
+
* - `geojson` (remote) → store raw bytes per `(dx, dy)` offset;
|
|
77
|
+
* projected per tile (and neighbour) at render time.
|
|
78
|
+
*
|
|
79
|
+
* `opts` is a JS object: `{ coord?: [dx, dy] }`. Throws
|
|
80
|
+
* `UnknownSource` if `name` doesn't match any entry in the style's
|
|
81
|
+
* `sources` block, `MvtDecode` if MVT bytes don't parse, and
|
|
82
|
+
* `DemDecode` for non-image DEM bytes (the decode itself runs at
|
|
83
|
+
* render time, but obvious cases are caught here).
|
|
88
84
|
*/
|
|
89
|
-
|
|
85
|
+
bindSource(name: string, bytes: Uint8Array, opts?: object | null): void;
|
|
90
86
|
/**
|
|
91
|
-
*
|
|
87
|
+
* Names of every source with at least one pending binding.
|
|
88
|
+
* Order matches the style's `sources` declaration order.
|
|
92
89
|
*/
|
|
93
|
-
|
|
90
|
+
boundSources(): string[];
|
|
94
91
|
/**
|
|
95
|
-
*
|
|
92
|
+
* Drop every pending source binding. Call between tile renders.
|
|
96
93
|
*/
|
|
97
|
-
|
|
94
|
+
clearSources(): void;
|
|
98
95
|
/**
|
|
99
|
-
*
|
|
100
|
-
* for the same painterly content and decoded natively by every
|
|
101
|
-
* modern browser. WebP is lossless-only via the pure-Rust
|
|
102
|
-
* `image-webp` codec; for lossy WebP, see the
|
|
103
|
-
* `OffscreenCanvas.convertToBlob` recipe in the crate README.
|
|
96
|
+
* Build a renderer from a style JSON document.
|
|
104
97
|
*/
|
|
105
|
-
|
|
98
|
+
constructor(style_json: string);
|
|
106
99
|
/**
|
|
107
|
-
*
|
|
100
|
+
* Render a single tile using whatever sources are currently bound.
|
|
101
|
+
*
|
|
102
|
+
* `opts` (JS object, all fields optional):
|
|
103
|
+
* - `format`: `"png"` (default) / `"webp"` / `"rgba"`
|
|
104
|
+
* - `tileSize`, `pad`: override the style's canvas size for this
|
|
105
|
+
* call (hi-DPI / preview)
|
|
106
|
+
* - `png`: `{ compression?: "fast" | "default" | "best" }`
|
|
108
107
|
*/
|
|
109
|
-
|
|
108
|
+
renderTile(z: number, x: number, y: number, opts?: object | null): Uint8Array;
|
|
110
109
|
/**
|
|
111
110
|
* Replace the active style. Returns the new node count. Invalidates
|
|
112
|
-
* the intermediate cache.
|
|
111
|
+
* the intermediate cache and drops any pending source bindings.
|
|
113
112
|
*/
|
|
114
113
|
setStyle(style_json: string): number;
|
|
115
114
|
/**
|
|
116
|
-
*
|
|
115
|
+
* Effective attribution declared by the style (document +
|
|
116
|
+
* sources), joined with ` | `. Upstream TileJSON / PMTiles
|
|
117
|
+
* metadata is the JS host's concern — merge it on that side.
|
|
117
118
|
*/
|
|
118
|
-
|
|
119
|
+
readonly attribution: string | undefined;
|
|
119
120
|
/**
|
|
120
121
|
* `tile-size` declared by the current style.
|
|
121
122
|
*/
|
|
@@ -127,3 +128,11 @@ export class Renderer {
|
|
|
127
128
|
* page label the renderer build accurately.
|
|
128
129
|
*/
|
|
129
130
|
export function simdEnabled(): boolean;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Whether this build supports multithreaded rendering (compiled with
|
|
134
|
+
* the `threads` feature). When `false`, `initThreadPool` is absent and
|
|
135
|
+
* `renderTile`'s `parallel` option is a no-op. Mirrors `simdEnabled` so
|
|
136
|
+
* the host can label the build.
|
|
137
|
+
*/
|
|
138
|
+
export function threadsEnabled(): boolean;
|
package/bundler/ezu.js
CHANGED
package/bundler/ezu_bg.js
CHANGED
|
@@ -78,6 +78,10 @@ export class LogSink {
|
|
|
78
78
|
/**
|
|
79
79
|
* Set (or clear with `null` / `undefined`) the per-event JS
|
|
80
80
|
* callback. The callback receives a structured record object.
|
|
81
|
+
*
|
|
82
|
+
* No-op in multithreaded (`threads`) builds — events can originate
|
|
83
|
+
* on rayon worker threads, so live forwarding to a main-thread JS
|
|
84
|
+
* callback isn't available. Use `drain` / `drainLines` instead.
|
|
81
85
|
* @param {Function | null} [callback]
|
|
82
86
|
*/
|
|
83
87
|
onEvent(callback) {
|
|
@@ -109,186 +113,112 @@ export class Renderer {
|
|
|
109
113
|
wasm.__wbg_renderer_free(ptr, 0);
|
|
110
114
|
}
|
|
111
115
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const ret = wasm.renderer_brushCount(this.__wbg_ptr);
|
|
117
|
-
return ret >>> 0;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Drop every registered brush.
|
|
116
|
+
* Effective attribution declared by the style (document +
|
|
117
|
+
* sources), joined with ` | `. Upstream TileJSON / PMTiles
|
|
118
|
+
* metadata is the JS host's concern — merge it on that side.
|
|
119
|
+
* @returns {string | undefined}
|
|
121
120
|
*/
|
|
122
|
-
|
|
123
|
-
wasm.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
*/
|
|
129
|
-
constructor(style_json) {
|
|
130
|
-
const ptr0 = passStringToWasm0(style_json, wasm.__wbindgen_malloc_command_export, wasm.__wbindgen_realloc_command_export);
|
|
131
|
-
const len0 = WASM_VECTOR_LEN;
|
|
132
|
-
const ret = wasm.renderer_new(ptr0, len0);
|
|
133
|
-
if (ret[2]) {
|
|
134
|
-
throw takeFromExternrefTable0(ret[1]);
|
|
121
|
+
get attribution() {
|
|
122
|
+
const ret = wasm.renderer_attribution(this.__wbg_ptr);
|
|
123
|
+
let v1;
|
|
124
|
+
if (ret[0] !== 0) {
|
|
125
|
+
v1 = getStringFromWasm0(ret[0], ret[1]).slice();
|
|
126
|
+
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
135
127
|
}
|
|
136
|
-
|
|
137
|
-
RendererFinalization.register(this, this.__wbg_ptr, this);
|
|
138
|
-
return this;
|
|
128
|
+
return v1;
|
|
139
129
|
}
|
|
140
130
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
131
|
+
* Bind raw tile bytes under a `sources.<name>` entry from the style.
|
|
132
|
+
* The renderer dispatches on the source's declared `type`:
|
|
133
|
+
*
|
|
134
|
+
* - `mvt` / `pmtiles` → store raw MVT bytes per `(dx, dy)` neighbour
|
|
135
|
+
* offset (centre `coord: [0, 0]`, the default). Layers are bound as
|
|
136
|
+
* `<source>.<layer>` (centre) or `<source>.<layer>@dx,dy`
|
|
137
|
+
* (neighbours) when [`render_tile`] runs. Binding only the centre
|
|
138
|
+
* degrades cross-tile label collision to centre-only at borders.
|
|
139
|
+
* - `dem` / `raster` → store the raw bytes per `(dx, dy)` neighbour
|
|
140
|
+
* offset. The centre tile is `coord: [0, 0]` (default). Decoding
|
|
141
|
+
* and 3×3 stitching happen at render time once the tile id is known.
|
|
142
|
+
* - `geojson` (remote) → store raw bytes per `(dx, dy)` offset;
|
|
143
|
+
* projected per tile (and neighbour) at render time.
|
|
144
|
+
*
|
|
145
|
+
* `opts` is a JS object: `{ coord?: [dx, dy] }`. Throws
|
|
146
|
+
* `UnknownSource` if `name` doesn't match any entry in the style's
|
|
147
|
+
* `sources` block, `MvtDecode` if MVT bytes don't parse, and
|
|
148
|
+
* `DemDecode` for non-image DEM bytes (the decode itself runs at
|
|
149
|
+
* render time, but obvious cases are caught here).
|
|
144
150
|
* @param {string} name
|
|
145
|
-
* @param {
|
|
151
|
+
* @param {Uint8Array} bytes
|
|
152
|
+
* @param {object | null} [opts]
|
|
146
153
|
*/
|
|
147
|
-
|
|
154
|
+
bindSource(name, bytes, opts) {
|
|
148
155
|
const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc_command_export, wasm.__wbindgen_realloc_command_export);
|
|
149
156
|
const len0 = WASM_VECTOR_LEN;
|
|
150
|
-
const ptr1 =
|
|
157
|
+
const ptr1 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc_command_export);
|
|
151
158
|
const len1 = WASM_VECTOR_LEN;
|
|
152
|
-
const ret = wasm.
|
|
159
|
+
const ret = wasm.renderer_bindSource(this.__wbg_ptr, ptr0, len0, ptr1, len1, isLikeNone(opts) ? 0 : addToExternrefTable0(opts));
|
|
153
160
|
if (ret[1]) {
|
|
154
161
|
throw takeFromExternrefTable0(ret[0]);
|
|
155
162
|
}
|
|
156
163
|
}
|
|
157
164
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* Optional `options`: `{ png: { compression: 'fast' | 'default' | 'best' } }`.
|
|
162
|
-
* @param {Uint8Array | null | undefined} mvt_bytes
|
|
163
|
-
* @param {number} z
|
|
164
|
-
* @param {number} x
|
|
165
|
-
* @param {number} y
|
|
166
|
-
* @param {object | null} [options]
|
|
167
|
-
* @returns {Uint8Array}
|
|
168
|
-
*/
|
|
169
|
-
render(mvt_bytes, z, x, y, options) {
|
|
170
|
-
var ptr0 = isLikeNone(mvt_bytes) ? 0 : passArray8ToWasm0(mvt_bytes, wasm.__wbindgen_malloc_command_export);
|
|
171
|
-
var len0 = WASM_VECTOR_LEN;
|
|
172
|
-
const ret = wasm.renderer_render(this.__wbg_ptr, ptr0, len0, z, x, y, isLikeNone(options) ? 0 : addToExternrefTable0(options));
|
|
173
|
-
if (ret[3]) {
|
|
174
|
-
throw takeFromExternrefTable0(ret[2]);
|
|
175
|
-
}
|
|
176
|
-
var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
177
|
-
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
178
|
-
return v2;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Like `render` but with `tile_size` / `pad` overridden — useful for
|
|
182
|
-
* hi-DPI / preview rendering without mutating the style.
|
|
183
|
-
* @param {Uint8Array | null | undefined} mvt_bytes
|
|
184
|
-
* @param {number} z
|
|
185
|
-
* @param {number} x
|
|
186
|
-
* @param {number} y
|
|
187
|
-
* @param {number} tile_size
|
|
188
|
-
* @param {number} pad
|
|
189
|
-
* @param {object | null} [options]
|
|
190
|
-
* @returns {Uint8Array}
|
|
191
|
-
*/
|
|
192
|
-
renderAt(mvt_bytes, z, x, y, tile_size, pad, options) {
|
|
193
|
-
var ptr0 = isLikeNone(mvt_bytes) ? 0 : passArray8ToWasm0(mvt_bytes, wasm.__wbindgen_malloc_command_export);
|
|
194
|
-
var len0 = WASM_VECTOR_LEN;
|
|
195
|
-
const ret = wasm.renderer_renderAt(this.__wbg_ptr, ptr0, len0, z, x, y, tile_size, pad, isLikeNone(options) ? 0 : addToExternrefTable0(options));
|
|
196
|
-
if (ret[3]) {
|
|
197
|
-
throw takeFromExternrefTable0(ret[2]);
|
|
198
|
-
}
|
|
199
|
-
var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
200
|
-
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
201
|
-
return v2;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Render a single tile to straight RGBA8 bytes (`tile_w * tile_h * 4`).
|
|
205
|
-
* @param {Uint8Array | null | undefined} mvt_bytes
|
|
206
|
-
* @param {number} z
|
|
207
|
-
* @param {number} x
|
|
208
|
-
* @param {number} y
|
|
209
|
-
* @returns {Uint8Array}
|
|
165
|
+
* Names of every source with at least one pending binding.
|
|
166
|
+
* Order matches the style's `sources` declaration order.
|
|
167
|
+
* @returns {string[]}
|
|
210
168
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
var
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
throw takeFromExternrefTable0(ret[2]);
|
|
217
|
-
}
|
|
218
|
-
var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
219
|
-
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
220
|
-
return v2;
|
|
169
|
+
boundSources() {
|
|
170
|
+
const ret = wasm.renderer_boundSources(this.__wbg_ptr);
|
|
171
|
+
var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]).slice();
|
|
172
|
+
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 4, 4);
|
|
173
|
+
return v1;
|
|
221
174
|
}
|
|
222
175
|
/**
|
|
223
|
-
*
|
|
224
|
-
* @param {Uint8Array | null | undefined} mvt_bytes
|
|
225
|
-
* @param {number} z
|
|
226
|
-
* @param {number} x
|
|
227
|
-
* @param {number} y
|
|
228
|
-
* @param {number} tile_size
|
|
229
|
-
* @param {number} pad
|
|
230
|
-
* @returns {Uint8Array}
|
|
176
|
+
* Drop every pending source binding. Call between tile renders.
|
|
231
177
|
*/
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
var len0 = WASM_VECTOR_LEN;
|
|
235
|
-
const ret = wasm.renderer_renderRgbaAt(this.__wbg_ptr, ptr0, len0, z, x, y, tile_size, pad);
|
|
236
|
-
if (ret[3]) {
|
|
237
|
-
throw takeFromExternrefTable0(ret[2]);
|
|
238
|
-
}
|
|
239
|
-
var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
240
|
-
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
241
|
-
return v2;
|
|
178
|
+
clearSources() {
|
|
179
|
+
wasm.renderer_clearSources(this.__wbg_ptr);
|
|
242
180
|
}
|
|
243
181
|
/**
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
* modern browser. WebP is lossless-only via the pure-Rust
|
|
247
|
-
* `image-webp` codec; for lossy WebP, see the
|
|
248
|
-
* `OffscreenCanvas.convertToBlob` recipe in the crate README.
|
|
249
|
-
* @param {Uint8Array | null | undefined} mvt_bytes
|
|
250
|
-
* @param {number} z
|
|
251
|
-
* @param {number} x
|
|
252
|
-
* @param {number} y
|
|
253
|
-
* @param {object | null} [options]
|
|
254
|
-
* @returns {Uint8Array}
|
|
182
|
+
* Build a renderer from a style JSON document.
|
|
183
|
+
* @param {string} style_json
|
|
255
184
|
*/
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const ret = wasm.
|
|
260
|
-
if (ret[
|
|
261
|
-
throw takeFromExternrefTable0(ret[
|
|
185
|
+
constructor(style_json) {
|
|
186
|
+
const ptr0 = passStringToWasm0(style_json, wasm.__wbindgen_malloc_command_export, wasm.__wbindgen_realloc_command_export);
|
|
187
|
+
const len0 = WASM_VECTOR_LEN;
|
|
188
|
+
const ret = wasm.renderer_new(ptr0, len0);
|
|
189
|
+
if (ret[2]) {
|
|
190
|
+
throw takeFromExternrefTable0(ret[1]);
|
|
262
191
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
return
|
|
192
|
+
this.__wbg_ptr = ret[0];
|
|
193
|
+
RendererFinalization.register(this, this.__wbg_ptr, this);
|
|
194
|
+
return this;
|
|
266
195
|
}
|
|
267
196
|
/**
|
|
268
|
-
*
|
|
269
|
-
*
|
|
197
|
+
* Render a single tile using whatever sources are currently bound.
|
|
198
|
+
*
|
|
199
|
+
* `opts` (JS object, all fields optional):
|
|
200
|
+
* - `format`: `"png"` (default) / `"webp"` / `"rgba"`
|
|
201
|
+
* - `tileSize`, `pad`: override the style's canvas size for this
|
|
202
|
+
* call (hi-DPI / preview)
|
|
203
|
+
* - `png`: `{ compression?: "fast" | "default" | "best" }`
|
|
270
204
|
* @param {number} z
|
|
271
205
|
* @param {number} x
|
|
272
206
|
* @param {number} y
|
|
273
|
-
* @param {
|
|
274
|
-
* @param {number} pad
|
|
275
|
-
* @param {object | null} [options]
|
|
207
|
+
* @param {object | null} [opts]
|
|
276
208
|
* @returns {Uint8Array}
|
|
277
209
|
*/
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
var len0 = WASM_VECTOR_LEN;
|
|
281
|
-
const ret = wasm.renderer_renderWebpAt(this.__wbg_ptr, ptr0, len0, z, x, y, tile_size, pad, isLikeNone(options) ? 0 : addToExternrefTable0(options));
|
|
210
|
+
renderTile(z, x, y, opts) {
|
|
211
|
+
const ret = wasm.renderer_renderTile(this.__wbg_ptr, z, x, y, isLikeNone(opts) ? 0 : addToExternrefTable0(opts));
|
|
282
212
|
if (ret[3]) {
|
|
283
213
|
throw takeFromExternrefTable0(ret[2]);
|
|
284
214
|
}
|
|
285
|
-
var
|
|
215
|
+
var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
|
|
286
216
|
wasm.__wbindgen_free_command_export(ret[0], ret[1] * 1, 1);
|
|
287
|
-
return
|
|
217
|
+
return v1;
|
|
288
218
|
}
|
|
289
219
|
/**
|
|
290
220
|
* Replace the active style. Returns the new node count. Invalidates
|
|
291
|
-
* the intermediate cache.
|
|
221
|
+
* the intermediate cache and drops any pending source bindings.
|
|
292
222
|
* @param {string} style_json
|
|
293
223
|
* @returns {number}
|
|
294
224
|
*/
|
|
@@ -309,17 +239,6 @@ export class Renderer {
|
|
|
309
239
|
const ret = wasm.renderer_tileSize(this.__wbg_ptr);
|
|
310
240
|
return ret >>> 0;
|
|
311
241
|
}
|
|
312
|
-
/**
|
|
313
|
-
* Remove a brush by name. Returns `true` if the brush existed.
|
|
314
|
-
* @param {string} name
|
|
315
|
-
* @returns {boolean}
|
|
316
|
-
*/
|
|
317
|
-
unregisterBrush(name) {
|
|
318
|
-
const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc_command_export, wasm.__wbindgen_realloc_command_export);
|
|
319
|
-
const len0 = WASM_VECTOR_LEN;
|
|
320
|
-
const ret = wasm.renderer_unregisterBrush(this.__wbg_ptr, ptr0, len0);
|
|
321
|
-
return ret !== 0;
|
|
322
|
-
}
|
|
323
242
|
}
|
|
324
243
|
if (Symbol.dispose) Renderer.prototype[Symbol.dispose] = Renderer.prototype.free;
|
|
325
244
|
|
|
@@ -332,6 +251,37 @@ export function simdEnabled() {
|
|
|
332
251
|
const ret = wasm.simdEnabled();
|
|
333
252
|
return ret !== 0;
|
|
334
253
|
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Whether this build supports multithreaded rendering (compiled with
|
|
257
|
+
* the `threads` feature). When `false`, `initThreadPool` is absent and
|
|
258
|
+
* `renderTile`'s `parallel` option is a no-op. Mirrors `simdEnabled` so
|
|
259
|
+
* the host can label the build.
|
|
260
|
+
* @returns {boolean}
|
|
261
|
+
*/
|
|
262
|
+
export function threadsEnabled() {
|
|
263
|
+
const ret = wasm.threadsEnabled();
|
|
264
|
+
return ret !== 0;
|
|
265
|
+
}
|
|
266
|
+
export function __wbg___wbindgen_boolean_get_2304fb8c853028c8(arg0) {
|
|
267
|
+
const v = arg0;
|
|
268
|
+
const ret = typeof(v) === 'boolean' ? v : undefined;
|
|
269
|
+
return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
|
|
270
|
+
}
|
|
271
|
+
export function __wbg___wbindgen_is_null_2042690d351e14f0(arg0) {
|
|
272
|
+
const ret = arg0 === null;
|
|
273
|
+
return ret;
|
|
274
|
+
}
|
|
275
|
+
export function __wbg___wbindgen_is_undefined_35bb9f4c7fd651d5(arg0) {
|
|
276
|
+
const ret = arg0 === undefined;
|
|
277
|
+
return ret;
|
|
278
|
+
}
|
|
279
|
+
export function __wbg___wbindgen_number_get_f73a1244370fcc2c(arg0, arg1) {
|
|
280
|
+
const obj = arg1;
|
|
281
|
+
const ret = typeof(obj) === 'number' ? obj : undefined;
|
|
282
|
+
getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
|
|
283
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
|
|
284
|
+
}
|
|
335
285
|
export function __wbg___wbindgen_string_get_d109740c0d18f4d7(arg0, arg1) {
|
|
336
286
|
const obj = arg1;
|
|
337
287
|
const ret = typeof(obj) === 'string' ? obj : undefined;
|
|
@@ -358,6 +308,10 @@ export function __wbg_error_a6fa202b58aa1cd3(arg0, arg1) {
|
|
|
358
308
|
wasm.__wbindgen_free_command_export(deferred0_0, deferred0_1, 1);
|
|
359
309
|
}
|
|
360
310
|
}
|
|
311
|
+
export function __wbg_get_98fdf51d029a75eb(arg0, arg1) {
|
|
312
|
+
const ret = arg0[arg1 >>> 0];
|
|
313
|
+
return ret;
|
|
314
|
+
}
|
|
361
315
|
export function __wbg_get_dcf82ab8aad1a593() { return handleError(function (arg0, arg1) {
|
|
362
316
|
const ret = Reflect.get(arg0, arg1);
|
|
363
317
|
return ret;
|
|
@@ -372,6 +326,14 @@ export function __wbg_instanceof_Object_03924e0dbda74bd8(arg0) {
|
|
|
372
326
|
const ret = result;
|
|
373
327
|
return ret;
|
|
374
328
|
}
|
|
329
|
+
export function __wbg_isArray_94898ed3aad6947b(arg0) {
|
|
330
|
+
const ret = Array.isArray(arg0);
|
|
331
|
+
return ret;
|
|
332
|
+
}
|
|
333
|
+
export function __wbg_length_2591a0f4f659a55c(arg0) {
|
|
334
|
+
const ret = arg0.length;
|
|
335
|
+
return ret;
|
|
336
|
+
}
|
|
375
337
|
export function __wbg_new_02d162bc6cf02f60() {
|
|
376
338
|
const ret = new Object();
|
|
377
339
|
return ret;
|
package/bundler/ezu_bg.wasm
CHANGED
|
Binary file
|
package/bundler/ezu_bg.wasm.d.ts
CHANGED
|
@@ -11,20 +11,16 @@ export const logsink_len: (a: number) => number;
|
|
|
11
11
|
export const logsink_new: (a: number, b: number) => [number, number, number];
|
|
12
12
|
export const logsink_onEvent: (a: number, b: number) => void;
|
|
13
13
|
export const logsink_setCapacity: (a: number, b: number) => void;
|
|
14
|
-
export const
|
|
15
|
-
export const
|
|
14
|
+
export const renderer_attribution: (a: number) => [number, number];
|
|
15
|
+
export const renderer_bindSource: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number];
|
|
16
|
+
export const renderer_boundSources: (a: number) => [number, number];
|
|
17
|
+
export const renderer_clearSources: (a: number) => void;
|
|
16
18
|
export const renderer_new: (a: number, b: number) => [number, number, number];
|
|
17
|
-
export const
|
|
18
|
-
export const renderer_render: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
|
|
19
|
-
export const renderer_renderAt: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
|
|
20
|
-
export const renderer_renderRgba: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number, number];
|
|
21
|
-
export const renderer_renderRgbaAt: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
|
|
22
|
-
export const renderer_renderWebp: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => [number, number, number, number];
|
|
23
|
-
export const renderer_renderWebpAt: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => [number, number, number, number];
|
|
19
|
+
export const renderer_renderTile: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
|
|
24
20
|
export const renderer_setStyle: (a: number, b: number, c: number) => [number, number, number];
|
|
25
21
|
export const renderer_tileSize: (a: number) => number;
|
|
26
|
-
export const renderer_unregisterBrush: (a: number, b: number, c: number) => number;
|
|
27
22
|
export const simdEnabled: () => number;
|
|
23
|
+
export const threadsEnabled: () => number;
|
|
28
24
|
export const __wbindgen_malloc_command_export: (a: number, b: number) => number;
|
|
29
25
|
export const __wbindgen_realloc_command_export: (a: number, b: number, c: number, d: number) => number;
|
|
30
26
|
export const __wbindgen_exn_store_command_export: (a: number) => void;
|