@inertiajs/core 2.1.1 → 2.1.3
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.esm.js +183 -154
- package/dist/index.esm.js.map +3 -3
- package/dist/index.js +187 -158
- package/dist/index.js.map +4 -4
- package/dist/server.esm.js +4 -2
- package/dist/server.esm.js.map +2 -2
- package/dist/server.js +4 -2
- package/dist/server.js.map +2 -2
- package/package.json +9 -5
- package/types/index.d.ts +3 -3
- package/types/navigationEvents.d.ts +12 -0
- package/types/prefetched.d.ts +2 -1
- package/types/router.d.ts +14 -13
- package/types/types.d.ts +15 -10
- package/types/url.d.ts +2 -1
- package/types/shouldIntercept.d.ts +0 -1
package/dist/server.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/server.ts
|
|
2
2
|
import { createServer } from "http";
|
|
3
|
-
import * as process from "process";
|
|
4
3
|
import cluster from "node:cluster";
|
|
5
4
|
import { availableParallelism } from "node:os";
|
|
5
|
+
import * as process from "process";
|
|
6
6
|
var readableToString = (readable) => new Promise((resolve, reject) => {
|
|
7
7
|
let data = "";
|
|
8
8
|
readable.on("data", (chunk) => data += chunk);
|
|
@@ -13,7 +13,9 @@ var server_default = (render, options) => {
|
|
|
13
13
|
const _port = typeof options === "number" ? options : options?.port ?? 13714;
|
|
14
14
|
const _useCluster = typeof options === "object" && options?.cluster !== void 0 ? options.cluster : false;
|
|
15
15
|
const log = (message) => {
|
|
16
|
-
console.log(
|
|
16
|
+
console.log(
|
|
17
|
+
_useCluster && !cluster.isPrimary ? `[${cluster.worker?.id ?? "N/A"} / ${cluster.worker?.process?.pid ?? "N/A"}] ${message}` : message
|
|
18
|
+
);
|
|
17
19
|
};
|
|
18
20
|
if (_useCluster && cluster.isPrimary) {
|
|
19
21
|
log("Primary Inertia SSR server process started...");
|
package/dist/server.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/server.ts"],
|
|
4
|
-
"sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport
|
|
5
|
-
"mappings": ";AAAA,SAAS,oBAAqC;AAC9C,
|
|
4
|
+
"sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport cluster from 'node:cluster'\nimport { availableParallelism } from 'node:os'\nimport * as process from 'process'\nimport { InertiaAppResponse, Page } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\ntype ServerOptions = {\n port?: number\n cluster?: boolean\n}\ntype Port = number\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, options?: Port | ServerOptions): void => {\n const _port = typeof options === 'number' ? options : (options?.port ?? 13714)\n const _useCluster = typeof options === 'object' && options?.cluster !== undefined ? options.cluster : false\n\n const log = (message: string) => {\n console.log(\n _useCluster && !cluster.isPrimary\n ? `[${cluster.worker?.id ?? 'N/A'} / ${cluster.worker?.process?.pid ?? 'N/A'}] ${message}`\n : message,\n )\n }\n\n if (_useCluster && cluster.isPrimary) {\n log('Primary Inertia SSR server process started...')\n\n for (let i = 0; i < availableParallelism(); i++) {\n cluster.fork()\n }\n\n return\n }\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => log('Inertia SSR server started.'))\n\n log(`Starting SSR server on port ${_port}...`)\n}\n"],
|
|
5
|
+
"mappings": ";AAAA,SAAS,oBAAqC;AAC9C,OAAO,aAAa;AACpB,SAAS,4BAA4B;AACrC,YAAY,aAAa;AAWzB,IAAM,mBAAmE,CAAC,aACxE,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,MAAI,OAAO;AACX,WAAS,GAAG,QAAQ,CAAC,UAAW,QAAQ,KAAM;AAC9C,WAAS,GAAG,OAAO,MAAM,QAAQ,IAAI,CAAC;AACtC,WAAS,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AAC3C,CAAC;AAEH,IAAO,iBAAQ,CAAC,QAAqB,YAAyC;AAC5E,QAAM,QAAQ,OAAO,YAAY,WAAW,UAAW,SAAS,QAAQ;AACxE,QAAM,cAAc,OAAO,YAAY,YAAY,SAAS,YAAY,SAAY,QAAQ,UAAU;AAEtG,QAAM,MAAM,CAAC,YAAoB;AAC/B,YAAQ;AAAA,MACN,eAAe,CAAC,QAAQ,YACpB,IAAI,QAAQ,QAAQ,MAAM,KAAK,MAAM,QAAQ,QAAQ,SAAS,OAAO,KAAK,KAAK,OAAO,KACtF;AAAA,IACN;AAAA,EACF;AAEA,MAAI,eAAe,QAAQ,WAAW;AACpC,QAAI,+CAA+C;AAEnD,aAAS,IAAI,GAAG,IAAI,qBAAqB,GAAG,KAAK;AAC/C,cAAQ,KAAK;AAAA,IACf;AAEA;AAAA,EACF;AAEA,QAAM,SAAuC;AAAA,IAC3C,WAAW,aAAa,EAAE,QAAQ,MAAM,WAAW,KAAK,IAAI,EAAE;AAAA,IAC9D,aAAa,MAAc,aAAK;AAAA,IAChC,WAAW,OAAO,YAAY,OAAO,KAAK,MAAM,MAAM,iBAAiB,OAAO,CAAC,CAAC;AAAA,IAChF,QAAQ,aAAa,EAAE,QAAQ,aAAa,WAAW,KAAK,IAAI,EAAE;AAAA,EACpE;AAEA,eAAa,OAAO,SAAS,aAAa;AACxC,UAAM,gBAAgB,OAAe,QAAQ,GAAG,KAAK,OAAO,MAAM;AAElE,QAAI;AACF,eAAS,UAAU,KAAK,EAAE,gBAAgB,oBAAoB,QAAQ,iBAAiB,CAAC;AACxF,eAAS,MAAM,KAAK,UAAU,MAAM,cAAc,OAAO,CAAC,CAAC;AAAA,IAC7D,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AAAA,IACjB;AAEA,aAAS,IAAI;AAAA,EACf,CAAC,EAAE,OAAO,OAAO,MAAM,IAAI,6BAA6B,CAAC;AAEzD,MAAI,+BAA+B,KAAK,KAAK;AAC/C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/server.js
CHANGED
|
@@ -34,9 +34,9 @@ __export(server_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(server_exports);
|
|
36
36
|
var import_http = require("http");
|
|
37
|
-
var process = __toESM(require("process"), 1);
|
|
38
37
|
var import_node_cluster = __toESM(require("node:cluster"), 1);
|
|
39
38
|
var import_node_os = require("node:os");
|
|
39
|
+
var process = __toESM(require("process"), 1);
|
|
40
40
|
var readableToString = (readable) => new Promise((resolve, reject) => {
|
|
41
41
|
let data = "";
|
|
42
42
|
readable.on("data", (chunk) => data += chunk);
|
|
@@ -47,7 +47,9 @@ var server_default = (render, options) => {
|
|
|
47
47
|
const _port = typeof options === "number" ? options : options?.port ?? 13714;
|
|
48
48
|
const _useCluster = typeof options === "object" && options?.cluster !== void 0 ? options.cluster : false;
|
|
49
49
|
const log = (message) => {
|
|
50
|
-
console.log(
|
|
50
|
+
console.log(
|
|
51
|
+
_useCluster && !import_node_cluster.default.isPrimary ? `[${import_node_cluster.default.worker?.id ?? "N/A"} / ${import_node_cluster.default.worker?.process?.pid ?? "N/A"}] ${message}` : message
|
|
52
|
+
);
|
|
51
53
|
};
|
|
52
54
|
if (_useCluster && import_node_cluster.default.isPrimary) {
|
|
53
55
|
log("Primary Inertia SSR server process started...");
|
package/dist/server.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/server.ts"],
|
|
4
|
-
"sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA8C;AAC9C,
|
|
4
|
+
"sourcesContent": ["import { createServer, IncomingMessage } from 'http'\nimport cluster from 'node:cluster'\nimport { availableParallelism } from 'node:os'\nimport * as process from 'process'\nimport { InertiaAppResponse, Page } from './types'\n\ntype AppCallback = (page: Page) => InertiaAppResponse\ntype RouteHandler = (request: IncomingMessage) => Promise<unknown>\ntype ServerOptions = {\n port?: number\n cluster?: boolean\n}\ntype Port = number\n\nconst readableToString: (readable: IncomingMessage) => Promise<string> = (readable) =>\n new Promise((resolve, reject) => {\n let data = ''\n readable.on('data', (chunk) => (data += chunk))\n readable.on('end', () => resolve(data))\n readable.on('error', (err) => reject(err))\n })\n\nexport default (render: AppCallback, options?: Port | ServerOptions): void => {\n const _port = typeof options === 'number' ? options : (options?.port ?? 13714)\n const _useCluster = typeof options === 'object' && options?.cluster !== undefined ? options.cluster : false\n\n const log = (message: string) => {\n console.log(\n _useCluster && !cluster.isPrimary\n ? `[${cluster.worker?.id ?? 'N/A'} / ${cluster.worker?.process?.pid ?? 'N/A'}] ${message}`\n : message,\n )\n }\n\n if (_useCluster && cluster.isPrimary) {\n log('Primary Inertia SSR server process started...')\n\n for (let i = 0; i < availableParallelism(); i++) {\n cluster.fork()\n }\n\n return\n }\n\n const routes: Record<string, RouteHandler> = {\n '/health': async () => ({ status: 'OK', timestamp: Date.now() }),\n '/shutdown': () => process.exit(),\n '/render': async (request) => render(JSON.parse(await readableToString(request))),\n '/404': async () => ({ status: 'NOT_FOUND', timestamp: Date.now() }),\n }\n\n createServer(async (request, response) => {\n const dispatchRoute = routes[<string>request.url] || routes['/404']\n\n try {\n response.writeHead(200, { 'Content-Type': 'application/json', Server: 'Inertia.js SSR' })\n response.write(JSON.stringify(await dispatchRoute(request)))\n } catch (e) {\n console.error(e)\n }\n\n response.end()\n }).listen(_port, () => log('Inertia SSR server started.'))\n\n log(`Starting SSR server on port ${_port}...`)\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA8C;AAC9C,0BAAoB;AACpB,qBAAqC;AACrC,cAAyB;AAWzB,IAAM,mBAAmE,CAAC,aACxE,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/B,MAAI,OAAO;AACX,WAAS,GAAG,QAAQ,CAAC,UAAW,QAAQ,KAAM;AAC9C,WAAS,GAAG,OAAO,MAAM,QAAQ,IAAI,CAAC;AACtC,WAAS,GAAG,SAAS,CAAC,QAAQ,OAAO,GAAG,CAAC;AAC3C,CAAC;AAEH,IAAO,iBAAQ,CAAC,QAAqB,YAAyC;AAC5E,QAAM,QAAQ,OAAO,YAAY,WAAW,UAAW,SAAS,QAAQ;AACxE,QAAM,cAAc,OAAO,YAAY,YAAY,SAAS,YAAY,SAAY,QAAQ,UAAU;AAEtG,QAAM,MAAM,CAAC,YAAoB;AAC/B,YAAQ;AAAA,MACN,eAAe,CAAC,oBAAAA,QAAQ,YACpB,IAAI,oBAAAA,QAAQ,QAAQ,MAAM,KAAK,MAAM,oBAAAA,QAAQ,QAAQ,SAAS,OAAO,KAAK,KAAK,OAAO,KACtF;AAAA,IACN;AAAA,EACF;AAEA,MAAI,eAAe,oBAAAA,QAAQ,WAAW;AACpC,QAAI,+CAA+C;AAEnD,aAAS,IAAI,GAAG,QAAI,qCAAqB,GAAG,KAAK;AAC/C,0BAAAA,QAAQ,KAAK;AAAA,IACf;AAEA;AAAA,EACF;AAEA,QAAM,SAAuC;AAAA,IAC3C,WAAW,aAAa,EAAE,QAAQ,MAAM,WAAW,KAAK,IAAI,EAAE;AAAA,IAC9D,aAAa,MAAc,aAAK;AAAA,IAChC,WAAW,OAAO,YAAY,OAAO,KAAK,MAAM,MAAM,iBAAiB,OAAO,CAAC,CAAC;AAAA,IAChF,QAAQ,aAAa,EAAE,QAAQ,aAAa,WAAW,KAAK,IAAI,EAAE;AAAA,EACpE;AAEA,gCAAa,OAAO,SAAS,aAAa;AACxC,UAAM,gBAAgB,OAAe,QAAQ,GAAG,KAAK,OAAO,MAAM;AAElE,QAAI;AACF,eAAS,UAAU,KAAK,EAAE,gBAAgB,oBAAoB,QAAQ,iBAAiB,CAAC;AACxF,eAAS,MAAM,KAAK,UAAU,MAAM,cAAc,OAAO,CAAC,CAAC;AAAA,IAC7D,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AAAA,IACjB;AAEA,aAAS,IAAI;AAAA,EACf,CAAC,EAAE,OAAO,OAAO,MAAM,IAAI,6BAA6B,CAAC;AAEzD,MAAI,+BAA+B,KAAK,KAAK;AAC/C;",
|
|
6
6
|
"names": ["cluster"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inertiajs/core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "A framework for creating server-driven single page apps.",
|
|
6
6
|
"contributors": [
|
|
@@ -44,8 +44,9 @@
|
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"
|
|
48
|
-
"
|
|
47
|
+
"@types/lodash-es": "^4.17.12",
|
|
48
|
+
"axios": "^1.11.0",
|
|
49
|
+
"lodash-es": "^4.17.21",
|
|
49
50
|
"qs": "^6.9.0"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
@@ -53,13 +54,16 @@
|
|
|
53
54
|
"@types/node": "^18.4",
|
|
54
55
|
"@types/nprogress": "^0.2.0",
|
|
55
56
|
"@types/qs": "^6.9.0",
|
|
57
|
+
"es-check": "^9.3.1",
|
|
56
58
|
"esbuild": "^0.25.0",
|
|
57
59
|
"esbuild-node-externals": "^1.6.0",
|
|
58
60
|
"typescript": "^4.9.4"
|
|
59
61
|
},
|
|
60
62
|
"scripts": {
|
|
63
|
+
"build": "pnpm clean && ./build.js && tsc",
|
|
64
|
+
"build:with-deps": "./build.js --with-deps",
|
|
65
|
+
"clean": "rm -rf types && rm -rf dist",
|
|
61
66
|
"dev": "./build.js --watch",
|
|
62
|
-
"
|
|
63
|
-
"clean": "rm -rf types && rm -rf dist"
|
|
67
|
+
"es2020-check": "pnpm build:with-deps && es-check es2020 \"dist/index.esm.js\" --checkFeatures --module --noCache --verbose"
|
|
64
68
|
}
|
|
65
69
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Router } from './router';
|
|
2
2
|
export { objectToFormData } from './formData';
|
|
3
3
|
export { formDataToObject } from './formObject';
|
|
4
|
-
export { resetFormFields } from './resetFormFields';
|
|
5
4
|
export { default as createHeadManager } from './head';
|
|
5
|
+
export { shouldIntercept, shouldNavigate } from './navigationEvents';
|
|
6
6
|
export { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress';
|
|
7
|
-
export {
|
|
7
|
+
export { resetFormFields } from './resetFormFields';
|
|
8
8
|
export * from './types';
|
|
9
|
-
export { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url';
|
|
9
|
+
export { hrefToUrl, isUrlMethodPair, mergeDataIntoQueryString, urlWithoutHash } from './url';
|
|
10
10
|
export { type Router };
|
|
11
11
|
export declare const router: Router;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determine if this mouse event should be intercepted for navigation purposes.
|
|
3
|
+
* Links with modifier keys or non-left clicks should not be intercepted.
|
|
4
|
+
* Content editable elements and prevented events are ignored.
|
|
5
|
+
*/
|
|
6
|
+
export declare function shouldIntercept(event: Pick<MouseEvent, 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'>): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Determine if this keyboard event should trigger a navigation request.
|
|
9
|
+
* Enter triggers navigation for both links and buttons currently.
|
|
10
|
+
* Space only triggers navigation for buttons specifically.
|
|
11
|
+
*/
|
|
12
|
+
export declare function shouldNavigate(event: Pick<KeyboardEvent, 'key' | 'currentTarget'>): boolean;
|
package/types/prefetched.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ declare class PrefetchedRequests {
|
|
|
5
5
|
protected inFlightRequests: InFlightPrefetch[];
|
|
6
6
|
protected removalTimers: PrefetchRemovalTimer[];
|
|
7
7
|
protected currentUseId: string | null;
|
|
8
|
-
add(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor }: PrefetchOptions): Promise<void> | Promise<Response>;
|
|
8
|
+
add(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor, cacheTags }: PrefetchOptions): Promise<void> | Promise<Response>;
|
|
9
9
|
removeAll(): void;
|
|
10
|
+
removeByTags(tags: string[]): void;
|
|
10
11
|
remove(params: ActiveVisit): void;
|
|
11
12
|
protected removeFromInFlight(params: ActiveVisit): void;
|
|
12
13
|
protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number];
|
package/types/router.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { RequestStream } from './requestStream';
|
|
2
|
-
import { ActiveVisit, ClientSideVisitOptions, Component, GlobalEvent, GlobalEventNames, GlobalEventResult, InFlightPrefetch, Page, PendingVisit, PendingVisitOptions, PollOptions, PrefetchedResponse, PrefetchOptions, ReloadOptions, RequestPayload, RouterInitParams,
|
|
2
|
+
import { ActiveVisit, ClientSideVisitOptions, Component, GlobalEvent, GlobalEventNames, GlobalEventResult, InFlightPrefetch, Page, PendingVisit, PendingVisitOptions, PollOptions, PrefetchedResponse, PrefetchOptions, ReloadOptions, RequestPayload, RouterInitParams, UrlMethodPair, VisitCallbacks, VisitHelperOptions, VisitOptions } from './types';
|
|
3
3
|
export declare class Router {
|
|
4
4
|
protected syncRequestStream: RequestStream;
|
|
5
5
|
protected asyncRequestStream: RequestStream;
|
|
6
6
|
init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void;
|
|
7
|
-
get<T extends RequestPayload = RequestPayload>(url: URL | string, data?: T, options?: VisitHelperOptions<T>): void;
|
|
8
|
-
post<T extends RequestPayload = RequestPayload>(url: URL | string, data?: T, options?: VisitHelperOptions<T>): void;
|
|
9
|
-
put<T extends RequestPayload = RequestPayload>(url: URL | string, data?: T, options?: VisitHelperOptions<T>): void;
|
|
10
|
-
patch<T extends RequestPayload = RequestPayload>(url: URL | string, data?: T, options?: VisitHelperOptions<T>): void;
|
|
11
|
-
delete<T extends RequestPayload = RequestPayload>(url: URL | string, options?: Omit<VisitOptions<T>, 'method'>): void;
|
|
7
|
+
get<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions<T>): void;
|
|
8
|
+
post<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions<T>): void;
|
|
9
|
+
put<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions<T>): void;
|
|
10
|
+
patch<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, data?: T, options?: VisitHelperOptions<T>): void;
|
|
11
|
+
delete<T extends RequestPayload = RequestPayload>(url: URL | string | UrlMethodPair, options?: Omit<VisitOptions<T>, 'method'>): void;
|
|
12
12
|
reload<T extends RequestPayload = RequestPayload>(options?: ReloadOptions<T>): void;
|
|
13
13
|
remember(data: unknown, key?: string): void;
|
|
14
14
|
restore(key?: string): unknown;
|
|
@@ -19,12 +19,13 @@ export declare class Router {
|
|
|
19
19
|
stop: VoidFunction;
|
|
20
20
|
start: VoidFunction;
|
|
21
21
|
};
|
|
22
|
-
visit<T extends RequestPayload = RequestPayload>(href: string | URL, options?: VisitOptions<T>): void;
|
|
23
|
-
getCached(href: string | URL, options?: VisitOptions): InFlightPrefetch | PrefetchedResponse | null;
|
|
24
|
-
flush(href: string | URL, options?: VisitOptions): void;
|
|
22
|
+
visit<T extends RequestPayload = RequestPayload>(href: string | URL | UrlMethodPair, options?: VisitOptions<T>): void;
|
|
23
|
+
getCached(href: string | URL | UrlMethodPair, options?: VisitOptions): InFlightPrefetch | PrefetchedResponse | null;
|
|
24
|
+
flush(href: string | URL | UrlMethodPair, options?: VisitOptions): void;
|
|
25
25
|
flushAll(): void;
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
flushByCacheTags(tags: string | string[]): void;
|
|
27
|
+
getPrefetching(href: string | URL | UrlMethodPair, options?: VisitOptions): InFlightPrefetch | PrefetchedResponse | null;
|
|
28
|
+
prefetch(href: string | URL | UrlMethodPair, options?: VisitOptions, prefetchOptions?: Partial<PrefetchOptions>): void;
|
|
28
29
|
clearHistory(): void;
|
|
29
30
|
decryptHistory(): Promise<Page>;
|
|
30
31
|
resolveComponent(component: string): Promise<Component>;
|
|
@@ -33,8 +34,8 @@ export declare class Router {
|
|
|
33
34
|
protected clientVisit<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>, { replace }?: {
|
|
34
35
|
replace?: boolean;
|
|
35
36
|
}): void;
|
|
36
|
-
protected getPrefetchParams(href: string | URL, options: VisitOptions): ActiveVisit;
|
|
37
|
-
protected getPendingVisit(href: string | URL, options: VisitOptions, pendingVisitOptions?: Partial<PendingVisitOptions>): PendingVisit;
|
|
37
|
+
protected getPrefetchParams(href: string | URL | UrlMethodPair, options: VisitOptions): ActiveVisit;
|
|
38
|
+
protected getPendingVisit(href: string | URL | UrlMethodPair, options: VisitOptions, pendingVisitOptions?: Partial<PendingVisitOptions>): PendingVisit;
|
|
38
39
|
protected getVisitEvents(options: VisitOptions): VisitCallbacks;
|
|
39
40
|
protected loadDeferredProps(): void;
|
|
40
41
|
}
|
package/types/types.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export type FormDataConvertible = Array<FormDataConvertible> | {
|
|
|
33
33
|
[key: string]: FormDataConvertible;
|
|
34
34
|
} | FormDataConvertibleValue;
|
|
35
35
|
export type FormDataType<T extends object> = {
|
|
36
|
-
[K in keyof T]: T[K] extends FormDataConvertibleValue ?
|
|
36
|
+
[K in keyof T]: T[K] extends infer U ? U extends FormDataConvertibleValue ? U : U extends (...args: unknown[]) => unknown ? never : U extends object | Array<unknown> ? FormDataType<U> : never : never;
|
|
37
37
|
};
|
|
38
38
|
export type FormDataKeys<T> = T extends Function | FormDataConvertibleValue ? never : T extends Array<unknown> ? number extends T['length'] ? `${number}` | `${number}.${FormDataKeys<T[number]>}` : Extract<keyof T, `${number}`> | {
|
|
39
39
|
[Key in Extract<keyof T, `${number}`>]: `${Key & string}.${FormDataKeys<T[Key & string]> & string}`;
|
|
@@ -116,6 +116,7 @@ export type Visit<T extends RequestPayload = RequestPayload> = {
|
|
|
116
116
|
fresh: boolean;
|
|
117
117
|
reset: string[];
|
|
118
118
|
preserveUrl: boolean;
|
|
119
|
+
invalidateCacheTags: string | string[];
|
|
119
120
|
};
|
|
120
121
|
export type GlobalEventsMap<T extends RequestPayload = RequestPayload> = {
|
|
121
122
|
before: {
|
|
@@ -262,15 +263,14 @@ export type LinkPrefetchOption = 'mount' | 'hover' | 'click';
|
|
|
262
263
|
export type CacheForOption = number | string;
|
|
263
264
|
export type PrefetchOptions = {
|
|
264
265
|
cacheFor: CacheForOption | CacheForOption[];
|
|
266
|
+
cacheTags: string | string[];
|
|
265
267
|
};
|
|
266
268
|
export interface LinkComponentBaseProps extends Partial<Pick<Visit<RequestPayload>, 'data' | 'method' | 'replace' | 'preserveScroll' | 'preserveState' | 'only' | 'except' | 'headers' | 'queryStringArrayFormat' | 'async'> & Omit<VisitCallbacks, 'onCancelToken'> & {
|
|
267
|
-
href: string |
|
|
268
|
-
url: string;
|
|
269
|
-
method: Method;
|
|
270
|
-
};
|
|
269
|
+
href: string | UrlMethodPair;
|
|
271
270
|
onCancelToken: (cancelToken: import('axios').CancelTokenSource) => void;
|
|
272
271
|
prefetch: boolean | LinkPrefetchOption | LinkPrefetchOption[];
|
|
273
272
|
cacheFor: CacheForOption | CacheForOption[];
|
|
273
|
+
cacheTags: string | string[];
|
|
274
274
|
}> {
|
|
275
275
|
}
|
|
276
276
|
type PrefetchObject = {
|
|
@@ -290,6 +290,7 @@ export type PrefetchedResponse = PrefetchObject & {
|
|
|
290
290
|
timestamp: number;
|
|
291
291
|
singleUse: boolean;
|
|
292
292
|
inFlight: false;
|
|
293
|
+
tags: string[];
|
|
293
294
|
};
|
|
294
295
|
export type PrefetchRemovalTimer = {
|
|
295
296
|
params: ActiveVisit;
|
|
@@ -310,17 +311,21 @@ export type ProgressSettings = {
|
|
|
310
311
|
includeCSS: boolean;
|
|
311
312
|
color: string;
|
|
312
313
|
};
|
|
314
|
+
export type UrlMethodPair = {
|
|
315
|
+
url: string;
|
|
316
|
+
method: Method;
|
|
317
|
+
};
|
|
313
318
|
export type FormComponentOptions = Pick<VisitOptions, 'preserveScroll' | 'preserveState' | 'preserveUrl' | 'replace' | 'only' | 'except' | 'reset'>;
|
|
314
|
-
export type FormComponentProps = Partial<Pick<Visit, 'headers' | 'queryStringArrayFormat' | 'errorBag' | 'showProgress'> & Omit<VisitCallbacks, 'onPrefetched' | 'onPrefetching'>> & {
|
|
319
|
+
export type FormComponentProps = Partial<Pick<Visit, 'headers' | 'queryStringArrayFormat' | 'errorBag' | 'showProgress' | 'invalidateCacheTags'> & Omit<VisitCallbacks, 'onPrefetched' | 'onPrefetching'>> & {
|
|
315
320
|
method?: Method | Uppercase<Method>;
|
|
316
|
-
action?: string |
|
|
317
|
-
url: string;
|
|
318
|
-
method: Method;
|
|
319
|
-
};
|
|
321
|
+
action?: string | UrlMethodPair;
|
|
320
322
|
transform?: (data: Record<string, FormDataConvertible>) => Record<string, FormDataConvertible>;
|
|
321
323
|
options?: FormComponentOptions;
|
|
322
324
|
onSubmitComplete?: (props: FormComponentonSubmitCompleteArguments) => void;
|
|
323
325
|
disableWhileProcessing?: boolean;
|
|
326
|
+
resetOnSuccess?: boolean | string[];
|
|
327
|
+
resetOnError?: boolean | string[];
|
|
328
|
+
setDefaultsOnSuccess?: boolean;
|
|
324
329
|
};
|
|
325
330
|
export type FormComponentMethods = {
|
|
326
331
|
clearErrors: (...fields: string[]) => void;
|
package/types/url.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FormDataConvertible, Method, RequestPayload, VisitOptions } from './types';
|
|
1
|
+
import { FormDataConvertible, Method, RequestPayload, UrlMethodPair, VisitOptions } from './types';
|
|
2
2
|
export declare function hrefToUrl(href: string | URL): URL;
|
|
3
3
|
export declare const transformUrlAndData: (href: string | URL, data: RequestPayload, method: Method, forceFormData: VisitOptions['forceFormData'], queryStringArrayFormat: VisitOptions['queryStringArrayFormat']) => [URL, RequestPayload];
|
|
4
4
|
type MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> = T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload;
|
|
@@ -6,4 +6,5 @@ export declare function mergeDataIntoQueryString<T extends RequestPayload>(metho
|
|
|
6
6
|
export declare function urlWithoutHash(url: URL | Location): URL;
|
|
7
7
|
export declare const setHashIfSameUrl: (originUrl: URL | Location, destinationUrl: URL | Location) => void;
|
|
8
8
|
export declare const isSameUrlWithoutHash: (url1: URL | Location, url2: URL | Location) => boolean;
|
|
9
|
+
export declare function isUrlMethodPair(href: unknown): href is UrlMethodPair;
|
|
9
10
|
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function shouldIntercept(event: Pick<MouseEvent, 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'>): boolean;
|