@sveltejs/kit 1.0.0-next.486 → 1.0.0-next.487
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/package.json
CHANGED
|
@@ -46,7 +46,6 @@ export function create_builder({ config, build_data, routes, prerendered, log })
|
|
|
46
46
|
|
|
47
47
|
return {
|
|
48
48
|
id: route.id,
|
|
49
|
-
type: route.page ? 'page' : 'endpoint', // TODO change this if support pages+endpoints
|
|
50
49
|
segments: route.id.split('/').map((segment) => ({
|
|
51
50
|
dynamic: segment.includes('['),
|
|
52
51
|
rest: segment.includes('[...'),
|
|
@@ -272,11 +272,6 @@ function create_routes_and_nodes(cwd, config, fallback) {
|
|
|
272
272
|
route_map.forEach((route) => {
|
|
273
273
|
if (!route.leaf) return;
|
|
274
274
|
|
|
275
|
-
if (route.leaf && route.endpoint) {
|
|
276
|
-
// TODO possibly relax this https://github.com/sveltejs/kit/issues/5896
|
|
277
|
-
throw new Error(`${route.endpoint.file} cannot share a directory with other route files`);
|
|
278
|
-
}
|
|
279
|
-
|
|
280
275
|
route.page = {
|
|
281
276
|
layouts: [],
|
|
282
277
|
errors: [],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { json } from '../../exports/index.js';
|
|
2
|
+
import { negotiate } from '../../utils/http.js';
|
|
2
3
|
import { Redirect, ValidationError } from '../control.js';
|
|
3
4
|
import { check_method_names, method_not_allowed } from './utils.js';
|
|
4
5
|
|
|
@@ -64,3 +65,19 @@ export async function render_endpoint(event, mod, state) {
|
|
|
64
65
|
throw error;
|
|
65
66
|
}
|
|
66
67
|
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {import('types').RequestEvent} event
|
|
71
|
+
*/
|
|
72
|
+
export function is_endpoint_request(event) {
|
|
73
|
+
const { method } = event.request;
|
|
74
|
+
|
|
75
|
+
if (method === 'PUT' || method === 'PATCH' || method === 'DELETE') {
|
|
76
|
+
// These methods exist exclusively for endpoints
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// GET/POST requests may be for endpoints or pages. We prefer endpoints if this isn't a text/html request
|
|
81
|
+
const accept = event.request.headers.get('accept') ?? '*/*';
|
|
82
|
+
return negotiate(accept, ['*', 'text/html']) !== 'text/html';
|
|
83
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { render_endpoint } from './endpoint.js';
|
|
1
|
+
import { is_endpoint_request, render_endpoint } from './endpoint.js';
|
|
2
2
|
import { render_page } from './page/index.js';
|
|
3
3
|
import { render_response } from './page/render.js';
|
|
4
4
|
import { respond_with_error } from './page/respond_with_error.js';
|
|
@@ -226,10 +226,10 @@ export async function respond(request, options, state) {
|
|
|
226
226
|
|
|
227
227
|
if (is_data_request) {
|
|
228
228
|
response = await render_data(event, route, options, state);
|
|
229
|
+
} else if (route.endpoint && (!route.page || is_endpoint_request(event))) {
|
|
230
|
+
response = await render_endpoint(event, await route.endpoint(), state);
|
|
229
231
|
} else if (route.page) {
|
|
230
232
|
response = await render_page(event, route, route.page, options, state, resolve_opts);
|
|
231
|
-
} else if (route.endpoint) {
|
|
232
|
-
response = await render_endpoint(event, await route.endpoint(), state);
|
|
233
233
|
} else {
|
|
234
234
|
// a route will always have a page or an endpoint, but TypeScript
|
|
235
235
|
// doesn't know that
|