@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltejs/kit",
3
- "version": "1.0.0-next.486",
3
+ "version": "1.0.0-next.487",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/sveltejs/kit",
@@ -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
@@ -195,7 +195,6 @@ export interface RequestOptions {
195
195
 
196
196
  export interface RouteDefinition {
197
197
  id: string;
198
- type: 'page' | 'endpoint';
199
198
  pattern: RegExp;
200
199
  segments: RouteSegment[];
201
200
  methods: HttpMethod[];