@paged-media/plugin-sdk 0.2.16-canary.0 → 0.2.17-canary.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/dist/index.js +85 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -984,6 +984,87 @@ function createBundleHost(getEditor, manifest, options) {
|
|
|
984
984
|
}
|
|
985
985
|
}
|
|
986
986
|
};
|
|
987
|
+
const imageChannel = () => getEditor().images;
|
|
988
|
+
const images = {
|
|
989
|
+
claimImageResource(elementId, opts) {
|
|
990
|
+
requireDeclared(
|
|
991
|
+
hasRendering("resourceProvider"),
|
|
992
|
+
"images.claimImageResource",
|
|
993
|
+
'capabilities.rendering must include "resourceProvider"'
|
|
994
|
+
);
|
|
995
|
+
const channel = imageChannel();
|
|
996
|
+
if (!channel) {
|
|
997
|
+
log.warn(
|
|
998
|
+
`images.claimImageResource("${elementId}") ignored \u2014 the host wired no resource channel (probe supports("rendering.resourceProvider@1"))`
|
|
999
|
+
);
|
|
1000
|
+
return store.add(toDisposable(() => {
|
|
1001
|
+
}));
|
|
1002
|
+
}
|
|
1003
|
+
let released = false;
|
|
1004
|
+
const off = channel.onResourceTilesNeeded((need) => {
|
|
1005
|
+
if (released || need.imageId !== elementId) return;
|
|
1006
|
+
void (async () => {
|
|
1007
|
+
const tiles = [];
|
|
1008
|
+
for (const [x, y] of need.tiles) {
|
|
1009
|
+
let tile;
|
|
1010
|
+
try {
|
|
1011
|
+
tile = await opts.source(need.level, x, y);
|
|
1012
|
+
} catch (err) {
|
|
1013
|
+
log.warn(
|
|
1014
|
+
`images.source(level ${need.level}, ${x}, ${y}) threw \u2014 tile skipped`,
|
|
1015
|
+
err
|
|
1016
|
+
);
|
|
1017
|
+
continue;
|
|
1018
|
+
}
|
|
1019
|
+
if (!tile) continue;
|
|
1020
|
+
tiles.push({
|
|
1021
|
+
x: tile.x,
|
|
1022
|
+
y: tile.y,
|
|
1023
|
+
width: tile.width,
|
|
1024
|
+
height: tile.height,
|
|
1025
|
+
// The wire carries a plain number[]; Array.from copies the
|
|
1026
|
+
// RGBA8 view (isolate-proxy-safe, like the scene-layer path).
|
|
1027
|
+
rgba: Array.from(tile.rgba)
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1030
|
+
if (released || tiles.length === 0) return;
|
|
1031
|
+
try {
|
|
1032
|
+
await channel.submitTiles(
|
|
1033
|
+
elementId,
|
|
1034
|
+
need.level,
|
|
1035
|
+
tiles,
|
|
1036
|
+
need.generation
|
|
1037
|
+
);
|
|
1038
|
+
} catch (err) {
|
|
1039
|
+
log.warn(
|
|
1040
|
+
`images.submitTiles("${elementId}", level ${need.level}) failed`,
|
|
1041
|
+
err
|
|
1042
|
+
);
|
|
1043
|
+
}
|
|
1044
|
+
})();
|
|
1045
|
+
});
|
|
1046
|
+
void channel.claim({
|
|
1047
|
+
imageId: elementId,
|
|
1048
|
+
levels: opts.levels,
|
|
1049
|
+
tileSize: opts.tileSize,
|
|
1050
|
+
baseWidth: opts.baseWidth,
|
|
1051
|
+
baseHeight: opts.baseHeight,
|
|
1052
|
+
revision: opts.revision()
|
|
1053
|
+
}).catch((err) => {
|
|
1054
|
+
log.warn(`images.claim("${elementId}") failed`, err);
|
|
1055
|
+
});
|
|
1056
|
+
return store.add(
|
|
1057
|
+
toDisposable(() => {
|
|
1058
|
+
if (released) return;
|
|
1059
|
+
released = true;
|
|
1060
|
+
off();
|
|
1061
|
+
void channel.release(elementId).catch((err) => {
|
|
1062
|
+
log.warn(`images.release("${elementId}") failed`, err);
|
|
1063
|
+
});
|
|
1064
|
+
})
|
|
1065
|
+
);
|
|
1066
|
+
}
|
|
1067
|
+
};
|
|
987
1068
|
const blobBackend = options?.blobStore;
|
|
988
1069
|
const blobQuota = Math.min(
|
|
989
1070
|
BLOB_BUDGETS.defaultQuotaBytes,
|
|
@@ -1084,6 +1165,9 @@ function createBundleHost(getEditor, manifest, options) {
|
|
|
1084
1165
|
if (getEditor().sceneLayers) {
|
|
1085
1166
|
featureSet.add("rendering.sceneLayer@1");
|
|
1086
1167
|
}
|
|
1168
|
+
if (getEditor().images) {
|
|
1169
|
+
featureSet.add("rendering.resourceProvider@1");
|
|
1170
|
+
}
|
|
1087
1171
|
if (options?.shell) {
|
|
1088
1172
|
featureSet.add("shell.openPanel@1");
|
|
1089
1173
|
featureSet.add("shell.pickFile@1");
|
|
@@ -1130,6 +1214,7 @@ function createBundleHost(getEditor, manifest, options) {
|
|
|
1130
1214
|
bindings,
|
|
1131
1215
|
widgets,
|
|
1132
1216
|
assets,
|
|
1217
|
+
images,
|
|
1133
1218
|
clipboard,
|
|
1134
1219
|
supports: (feature) => featureSet.has(feature),
|
|
1135
1220
|
get editor() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paged-media/plugin-sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.17-canary.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@paged-media/plugin-api": "0.2.
|
|
14
|
+
"@paged-media/plugin-api": "0.2.17-canary.0"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"react": "^18.3.0"
|