In most cases it is easier to set an extent on the layer.
To limit the extent of a source you must give it a custom tile grid, for example
var defaultTileGrid = createXYZ();
var source = new XYZ({
url: .... ,
tileGrid: new TileGrid({
origin: defaultTileGrid.getOrigin(0),
resolutions: defaultTileGrid.getResolutions(),
extent: extent
})
});
The bounds must be in the same projection as the source
So for EPSG:4326 you would need
var defaultTileGrid = createXYZ({extent: getProjection('EPSG:4326').getExtent()});
var source = new XYZ({
url: .... ,
tileGrid: new TileGrid({
origin: defaultTileGrid.getOrigin(0),
resolutions: defaultTileGrid.getResolutions(),
extent: [-0.795668404302292, 48.78018752203186, -0.7037491016945445, 48.83999044180076]
})
});