-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathindex.d.ts
143 lines (140 loc) · 4.95 KB
/
index.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import {SendOptions} from 'send';
import {RequestHandler} from 'express';
import {Request} from 'express-serve-static-core';
export type StaticifyOptions = {
/**
* Include all files when scanning the public directory.
* By default, the directories from [ignore-by-default](https://github.com/novemberborn/ignore-by-default/blob/master/index.js) are ignored.
*
* @type {boolean}
* @default false
*/
includeAll?: boolean;
/**
* Generate a short (7-digit) MD5 hash instead of the full (32-digit) one.
*
* @type {boolean}
* @default true
*/
shortHash?: boolean;
/**
* If you are using the staticify convenience middleware through a specific route, it is necessary to indicate the route in this option.
*
* @type {string}
* @default '/'
*/
pathPrefix?: string;
/**
* `maxAge` for assets without a hash such as /image.png passed to [send](https://github.com/pillarjs/send).
*
* Can be defined as a number of milliseconds or string accepted by [ms](https://www.npmjs.org/package/ms#readme) module (eg. `'5d'`, `'1y'`, etc.)
*
* @type {(string|number)}
* @default 0
*/
maxAgeNonHashed?: string | number;
/**
* You can pass any [send](https://github.com/pillarjs/send) options; used in `middleware` and `serve` functions.
*
* @type {SendOptions}
* @default { maxAge: '1y' } // hashed assets
* @default { maxAge: 0 } // non-hashed assets
*/
sendOptions?: SendOptions;
};
export interface Statificy {
_versions: Record<string, any>;
/**
* Does the following transformation to the `path`, and returns immediately:
*
* ```js
* staticify.getVersionedPath('/path/to/file.ext'); // --> /path/to/file.<MD5 of the contents of file.ext>.ext
* ```
*
* This method is meant to be used inside your templates.
*
* This method is really fast (simply an in-memory lookup) and returns immediately.
* When you initialize this module, it crawls your public folder synchronously at startup, and pre-determines all the MD5 hashes for your static files.
* This slows down application startup slightly, but it keeps the runtime performance at its peak.
*
* @param {string} path
* @returns {string}
*/
getVersionedPath: (path: string) => string;
/**
* Takes the input string, and replaces any paths it can understand. For example:
*
* ```js
* staticify.replacePaths('body { background: url("/index.js") }');
* ```
*
* returns
*
* ```js
* "body { background: url('/index.d766c4a983224a3696bc4913b9e47305.js') }"
* ```
*
* Perfect for use in your build script, to modify references to external paths within your CSS files.
*
* @param {string} input
* @returns {string}
*/
replacePaths: (input: string) => string;
/**
* Removes the MD5 identifier in a path.
*
* ```js
* staticify.stripVersion('/path/to/file.ae2b1fca515949e5d54fb22b8ed95575.ext'); // --> /path/to/file.ext
* ```
*
* Note, this function doesn't verify that the hash is valid. It simply finds what looks like a hash and strips it from the path.
*
* @param {string} path
* @returns {string}
*/
stripVersion: (path: string) => string;
/**
* Handles an incoming request for the file.
* Internally calls `.stripVersion` to strip the version identifier, and serves the file with a `maxAge` of one year, using [send](https://github.com/pillarjs/send).
* Returns a stream that can be `.pipe`d to a http response stream.
* See [here](https://github.com/pillarjs/send#options) for the options you can pass.
*
* ```js
* staticify.serve(req, {
* sendOptions: {
* maxAge: 3600 * 1000 // milliseconds
* }
* }).pipe(res);
* ```
*
* @param {Request} req
*/
serve: (req: Request) => void;
/**
* Rebuilds the MD5 version cache described above.
* Use this method sparingly.
* This crawls your public folder synchronously (in a blocking fashion) to rebuild the cache.
* This is typically only useful when you are doing some kind of live-reloading during development.
*/
refresh: () => void;
/**
* Convenience wrapper over `.serve` to handle static files in express.js.
*
* ```js
* app.use(staticify.middleware); // `app` is your express instance
* ```
*
* @type {RequestHandler}
* @memberof Statificy
*/
middleware: RequestHandler;
}
/**
* Provides helpers to add a version identifier to your static asset's public URLs, and to remove the hash before serving the file from the file system.
*
* @export
* @param {string} root The root path to the static content.
* @param {StaticifyOptions} [options] Additional options.
* @returns {Statificy}
*/
export default function staticify(root: string, options?: StaticifyOptions): Statificy;