@bepalo/spine 1.5.17 → 2.7.19
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/README.md +532 -1
- package/dist/auth-middlewares.d.ts.map +1 -1
- package/dist/auth-middlewares.js +1 -0
- package/dist/auth-middlewares.js.map +1 -1
- package/dist/cache.d.ts +72 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +387 -0
- package/dist/cache.js.map +1 -0
- package/dist/cjs/auth-middlewares.d.ts.map +1 -1
- package/dist/cjs/auth-middlewares.js +1 -0
- package/dist/cjs/auth-middlewares.js.map +1 -1
- package/dist/cjs/cache.d.ts +72 -0
- package/dist/cjs/cache.d.ts.map +1 -0
- package/dist/cjs/cache.js +387 -0
- package/dist/cjs/cache.js.map +1 -0
- package/dist/cjs/exp-cache.d.ts +101 -0
- package/dist/cjs/exp-cache.d.ts.map +1 -0
- package/dist/cjs/exp-cache.js +551 -0
- package/dist/cjs/exp-cache.js.map +1 -0
- package/dist/cjs/generator.d.ts +142 -19
- package/dist/cjs/generator.d.ts.map +1 -1
- package/dist/cjs/generator.js +416 -36
- package/dist/cjs/generator.js.map +1 -1
- package/dist/cjs/helpers.d.ts +49 -2
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +169 -14
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/linked-list.d.ts +35 -0
- package/dist/cjs/linked-list.d.ts.map +1 -0
- package/dist/cjs/linked-list.js +300 -0
- package/dist/cjs/linked-list.js.map +1 -0
- package/dist/cjs/middlewares.d.ts +264 -28
- package/dist/cjs/middlewares.d.ts.map +1 -1
- package/dist/cjs/middlewares.js +691 -44
- package/dist/cjs/middlewares.js.map +1 -1
- package/dist/cjs/parsers.d.ts +32 -10
- package/dist/cjs/parsers.d.ts.map +1 -1
- package/dist/cjs/parsers.js +84 -46
- package/dist/cjs/parsers.js.map +1 -1
- package/dist/cjs/router.d.ts +5 -6
- package/dist/cjs/router.d.ts.map +1 -1
- package/dist/cjs/router.js +272 -149
- package/dist/cjs/router.js.map +1 -1
- package/dist/cjs/status.d.ts.map +1 -1
- package/dist/cjs/status.js +80 -79
- package/dist/cjs/status.js.map +1 -1
- package/dist/cjs/types.d.ts +74 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +15 -2
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +1 -0
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +1 -0
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/utils.node.d.ts +1 -1
- package/dist/cjs/utils.node.d.ts.map +1 -1
- package/dist/cjs/utils.node.js +31 -7
- package/dist/cjs/utils.node.js.map +1 -1
- package/dist/exp-cache.d.ts +101 -0
- package/dist/exp-cache.d.ts.map +1 -0
- package/dist/exp-cache.js +551 -0
- package/dist/exp-cache.js.map +1 -0
- package/dist/generator.d.ts +142 -19
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +416 -36
- package/dist/generator.js.map +1 -1
- package/dist/helpers.d.ts +49 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +169 -14
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/linked-list.d.ts +35 -0
- package/dist/linked-list.d.ts.map +1 -0
- package/dist/linked-list.js +300 -0
- package/dist/linked-list.js.map +1 -0
- package/dist/middlewares.d.ts +264 -28
- package/dist/middlewares.d.ts.map +1 -1
- package/dist/middlewares.js +691 -44
- package/dist/middlewares.js.map +1 -1
- package/dist/parsers.d.ts +32 -10
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +84 -46
- package/dist/parsers.js.map +1 -1
- package/dist/router.d.ts +5 -6
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +272 -149
- package/dist/router.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +80 -79
- package/dist/status.js.map +1 -1
- package/dist/types.d.ts +74 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.node.d.ts +1 -1
- package/dist/utils.node.d.ts.map +1 -1
- package/dist/utils.node.js +31 -7
- package/dist/utils.node.js.map +1 -1
- package/package.json +6 -2
package/dist/generator.d.ts
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
|
+
import { MimeType } from "./types.ts";
|
|
1
2
|
import { DirWalkNode } from "./utils.ts";
|
|
3
|
+
export interface GenerateStaticRoutesParams {
|
|
4
|
+
routesPath: string;
|
|
5
|
+
importRoot: string;
|
|
6
|
+
usePathForIdGeneration?: boolean;
|
|
7
|
+
importExtensions?: boolean | {
|
|
8
|
+
(name: string): string;
|
|
9
|
+
};
|
|
10
|
+
pattern?: RegExp;
|
|
11
|
+
dirPattern?: RegExp;
|
|
12
|
+
processName?: (name: string) => string;
|
|
13
|
+
onError?: (error: Error | unknown, node: DirWalkNode) => boolean | void;
|
|
14
|
+
}
|
|
2
15
|
/**
|
|
3
16
|
* Generate static import for file-structure defined routes.
|
|
4
17
|
* This is useful for integration with frameworks such as Nexts and cloudflare
|
|
5
18
|
* and production in general.
|
|
6
19
|
*
|
|
7
|
-
* @param options Options for static routes import generator. eg. './routes'
|
|
20
|
+
* @param {object} options Options for static routes import generator. eg. './routes'
|
|
8
21
|
* @param {string} options.routesPath The root path of the routes.
|
|
9
22
|
* @param {string} options.importRoot The import root-prefix to use in the generated imports.
|
|
10
23
|
* `importRoot: ''` -> `import ... from 'api/index.ts';`
|
|
@@ -23,10 +36,10 @@ import { DirWalkNode } from "./utils.ts";
|
|
|
23
36
|
* @example
|
|
24
37
|
*
|
|
25
38
|
* ```
|
|
26
|
-
* import {
|
|
39
|
+
* import { generateStaticRoutes } from "@bepalo/spine";
|
|
27
40
|
* import { hash } from "node:crypto";
|
|
28
41
|
*
|
|
29
|
-
* await
|
|
42
|
+
* await generateStaticRoutes({
|
|
30
43
|
* routesPath: "./routes",
|
|
31
44
|
* importRoot: "./routes/",
|
|
32
45
|
* pattern: /route\.(?:ts|js|mjs)$/, // match only routes ending with .route.ts...
|
|
@@ -39,29 +52,139 @@ import { DirWalkNode } from "./utils.ts";
|
|
|
39
52
|
* // update generated import file if the hash changed.
|
|
40
53
|
* const f = Bun.file(output);
|
|
41
54
|
* if (await f.exists()) {
|
|
42
|
-
* if (hash("
|
|
55
|
+
* if (hash("md5", c, "hex") != hash("md5", await f.text(), "hex")) {
|
|
43
56
|
* Bun.write(output, c);
|
|
44
|
-
* console.log(
|
|
57
|
+
* console.log(timestamp(), "[SPINE-GEN]", c.length, `'${output}'`);
|
|
45
58
|
* }
|
|
46
59
|
* } else {
|
|
47
60
|
* Bun.write(output, c);
|
|
48
|
-
* console.log(
|
|
61
|
+
* console.log(timestamp(), "[SPINE-GEN]", c.length, `'${output}'`);
|
|
49
62
|
* }
|
|
50
63
|
* });
|
|
51
64
|
* ```
|
|
52
65
|
*
|
|
53
66
|
*/
|
|
54
|
-
export declare const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
export declare const generateStaticRoutes: ({ routesPath, importRoot, usePathForIdGeneration, importExtensions, pattern, dirPattern, processName, onError, }: GenerateStaticRoutesParams) => Promise<string>;
|
|
68
|
+
export type GenerateStaticRoutesWatcherParams = {
|
|
69
|
+
read: (filename: string) => Promise<string> | string;
|
|
70
|
+
write: (filename: string, content: string) => Promise<void | unknown> | void | unknown;
|
|
71
|
+
output: string;
|
|
72
|
+
abortSignal?: AbortSignal;
|
|
73
|
+
generateDelay?: number;
|
|
74
|
+
timestamp?: () => string | number | unknown;
|
|
75
|
+
logger?: (...args: any[]) => unknown;
|
|
76
|
+
} & GenerateStaticRoutesParams;
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* @param {object} options Options include `generateStaticRoutes` options too.
|
|
80
|
+
* @param {output} [options.output='./routes.ts'] Output file path. deafult: `'./routes.ts'`
|
|
81
|
+
* @param {number} [options.generateDelay=1000] Time in milliseconds to delay generation on change. default: `1000` -> 1s
|
|
82
|
+
* @param {AbortSignal} options.abortSignal Abort signal.
|
|
83
|
+
* @param {(filename:string)=>Promise<string>|string} options.read Function to read from file.
|
|
84
|
+
* @param {(filename:string,content:string)=>Promise<void|unknown>|void|unknown} options.write Function to write to file.
|
|
85
|
+
* @param {()=>string|number|unknown} options.timestamp Override default log timestamp.
|
|
86
|
+
* @param {(...args:any[])=>unknown} options.logger Override logger.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* generateStaticRoutesWatcher({
|
|
90
|
+
* routesPath: "./routes",
|
|
91
|
+
* importRoot: "./routes/",
|
|
92
|
+
* output: "./routes.ts",
|
|
93
|
+
* abortSignal: abortController.signal,
|
|
94
|
+
* read: (filepath) => readFile(filepath, { encoding: "utf-8" }),
|
|
95
|
+
* write: (filepath, content) =>
|
|
96
|
+
* writeFile(filepath, content, { encoding: "utf-8" }),
|
|
97
|
+
* // generateDelay: 1000,
|
|
98
|
+
* });
|
|
99
|
+
*
|
|
100
|
+
*/
|
|
101
|
+
export declare const generateStaticRoutesWatcher: ({ read, write, abortSignal, generateDelay, output, timestamp, logger, pattern, dirPattern, ...params }: GenerateStaticRoutesWatcherParams) => Promise<void>;
|
|
102
|
+
export interface StaticAssetsManifestFile {
|
|
103
|
+
pathname: string;
|
|
104
|
+
name: string;
|
|
105
|
+
ext: string;
|
|
106
|
+
path: string;
|
|
107
|
+
relativePath: string;
|
|
108
|
+
size: number;
|
|
109
|
+
mtime: number;
|
|
110
|
+
contentType: string;
|
|
111
|
+
}
|
|
112
|
+
export interface StaticAssetsManifest {
|
|
113
|
+
version: string;
|
|
114
|
+
generatedAt: string;
|
|
115
|
+
files: Record<string, StaticAssetsManifestFile>;
|
|
116
|
+
}
|
|
117
|
+
export interface GenerateStaticAssetsManifestFileInfo {
|
|
118
|
+
name: string;
|
|
119
|
+
ext: string;
|
|
120
|
+
relativePath: string;
|
|
121
|
+
parent: string;
|
|
122
|
+
size: number;
|
|
123
|
+
mtime: number;
|
|
124
|
+
contentType: MimeType;
|
|
125
|
+
}
|
|
126
|
+
export interface GenerateStaticAssetsParams {
|
|
127
|
+
assetsPath: string;
|
|
128
|
+
sortOrder?: -1 | 1;
|
|
129
|
+
exclude?: (fileInfo: GenerateStaticAssetsManifestFileInfo) => boolean | void;
|
|
130
|
+
transformPathname?: (fileInfo: GenerateStaticAssetsManifestFileInfo) => string;
|
|
131
|
+
}
|
|
132
|
+
export declare const defaultPathnameTransformer: ({ name, ext, relativePath, }: GenerateStaticAssetsManifestFileInfo) => string;
|
|
133
|
+
/**
|
|
134
|
+
* Static assets manifest generator. Primarily intended for use with static file serving.
|
|
135
|
+
*
|
|
136
|
+
* @description Generates an asset manifest of static assets under the given path.
|
|
137
|
+
* It gathers the name, extension, paths, size, modification-time and content-type of the assets.
|
|
138
|
+
*
|
|
139
|
+
* @param {object} options Options for the static assets manifest generator.
|
|
140
|
+
* @param {string} options.assetsPath Root path of the static assets.
|
|
141
|
+
* @param {-1|1|undefined} options.sortOrder Enable and set the sort order of file entries by their pathname.
|
|
142
|
+
* @param {(fileInfo:GenerateStaticAssetsManifestFileInfo)=>boolean|void} options.exclude Function to exclude files. Returning `true` means skip file.
|
|
143
|
+
* @param {(fileInfo: GenerateStaticAssetsManifestFileInfo)=>string} options.transformPathname Override function to transform the pathname.
|
|
144
|
+
* @returns {Promise<StaticAssetsManifest>} The generated static asset manifest.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* generateStaticAssetsManifest({
|
|
148
|
+
* assetsPath: "./public",
|
|
149
|
+
* // exclude: ({ name, ext }) => !name || ext === ".private",
|
|
150
|
+
* // transformPathname: ({ name, parent }) =>
|
|
151
|
+
* // name === index && ext == ".html" ? `/${parent}` : `/${parent}/${name}`
|
|
152
|
+
* });
|
|
153
|
+
*/
|
|
154
|
+
export declare const generateStaticAssetsManifest: ({ assetsPath, sortOrder, exclude, transformPathname, }: GenerateStaticAssetsParams) => Promise<StaticAssetsManifest>;
|
|
155
|
+
export type GenerateStaticAssetsManifestWatcherParams = {
|
|
156
|
+
read: (filename: string) => Promise<string> | string;
|
|
157
|
+
write: (filename: string, content: string) => Promise<void | unknown> | void | unknown;
|
|
158
|
+
output: string;
|
|
159
|
+
abortSignal?: AbortSignal;
|
|
160
|
+
generateDelay?: number;
|
|
161
|
+
timestamp?: () => string | number | unknown;
|
|
162
|
+
logger?: (...args: any[]) => unknown;
|
|
163
|
+
} & GenerateStaticAssetsParams;
|
|
164
|
+
/**
|
|
165
|
+
*
|
|
166
|
+
* @param options Options include `generateStaticAssets` options too.
|
|
167
|
+
* @param {output} [options.output='./static-assets.json'] Output file path. default: `'./static-assets.json'`
|
|
168
|
+
* @param {number} [options.generateDelay=1000] Time in milliseconds to delay generation on change. default: `1000` -> 1s
|
|
169
|
+
* @param {AbortSignal} options.abortSignal Abort signal.
|
|
170
|
+
* @param {(filename:string)=>Promise<string>|string} options.read Function to read from file.
|
|
171
|
+
* @param {(filename:string,content:string)=>Promise<void|unknown>|void|unknown} options.write Function to write to file.
|
|
172
|
+
* @param {()=>string|number|unknown} options.timestamp Override default log timestamp.
|
|
173
|
+
* @param {(...args:any[])=>unknown} options.logger Override logger.
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* generateStaticAssetsManifestWatcher({
|
|
177
|
+
* assetsPath: "./public",
|
|
178
|
+
* output: "./static-assets.json",
|
|
179
|
+
* // sortOrder: 1,
|
|
180
|
+
* // exclude: ({ name, ext }) => !name || ext === ".private",
|
|
181
|
+
* // generateDelay: 1000,
|
|
182
|
+
* read: (filepath) => readFile(filepath, { encoding: "utf-8" }),
|
|
183
|
+
* write: (filepath, content) =>
|
|
184
|
+
* writeFile(filepath, content, { encoding: "utf-8" }),
|
|
185
|
+
* abortSignal: abortController.signal,
|
|
186
|
+
* });
|
|
187
|
+
*
|
|
188
|
+
*/
|
|
189
|
+
export declare const generateStaticAssetsManifestWatcher: ({ read, write, abortSignal, generateDelay, output, timestamp, logger, exclude, ...params }: GenerateStaticAssetsManifestWatcherParams) => Promise<void>;
|
|
67
190
|
//# sourceMappingURL=generator.d.ts.map
|
package/dist/generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|