@bepalo/spine 1.5.16 → 2.6.18

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.
Files changed (104) hide show
  1. package/README.md +533 -81
  2. package/dist/auth-middlewares.d.ts.map +1 -1
  3. package/dist/auth-middlewares.js +1 -0
  4. package/dist/auth-middlewares.js.map +1 -1
  5. package/dist/cache.d.ts +72 -0
  6. package/dist/cache.d.ts.map +1 -0
  7. package/dist/cache.js +387 -0
  8. package/dist/cache.js.map +1 -0
  9. package/dist/cjs/auth-middlewares.d.ts.map +1 -1
  10. package/dist/cjs/auth-middlewares.js +1 -0
  11. package/dist/cjs/auth-middlewares.js.map +1 -1
  12. package/dist/cjs/cache.d.ts +72 -0
  13. package/dist/cjs/cache.d.ts.map +1 -0
  14. package/dist/cjs/cache.js +387 -0
  15. package/dist/cjs/cache.js.map +1 -0
  16. package/dist/cjs/exp-cache.d.ts +101 -0
  17. package/dist/cjs/exp-cache.d.ts.map +1 -0
  18. package/dist/cjs/exp-cache.js +551 -0
  19. package/dist/cjs/exp-cache.js.map +1 -0
  20. package/dist/cjs/generator.d.ts +142 -19
  21. package/dist/cjs/generator.d.ts.map +1 -1
  22. package/dist/cjs/generator.js +415 -35
  23. package/dist/cjs/generator.js.map +1 -1
  24. package/dist/cjs/helpers.d.ts +49 -2
  25. package/dist/cjs/helpers.d.ts.map +1 -1
  26. package/dist/cjs/helpers.js +169 -14
  27. package/dist/cjs/helpers.js.map +1 -1
  28. package/dist/cjs/index.d.ts +2 -0
  29. package/dist/cjs/index.d.ts.map +1 -1
  30. package/dist/cjs/index.js +3 -0
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/linked-list.d.ts +35 -0
  33. package/dist/cjs/linked-list.d.ts.map +1 -0
  34. package/dist/cjs/linked-list.js +300 -0
  35. package/dist/cjs/linked-list.js.map +1 -0
  36. package/dist/cjs/middlewares.d.ts +102 -12
  37. package/dist/cjs/middlewares.d.ts.map +1 -1
  38. package/dist/cjs/middlewares.js +119 -22
  39. package/dist/cjs/middlewares.js.map +1 -1
  40. package/dist/cjs/parsers.d.ts.map +1 -1
  41. package/dist/cjs/parsers.js +1 -0
  42. package/dist/cjs/parsers.js.map +1 -1
  43. package/dist/cjs/router.d.ts +5 -6
  44. package/dist/cjs/router.d.ts.map +1 -1
  45. package/dist/cjs/router.js +271 -148
  46. package/dist/cjs/router.js.map +1 -1
  47. package/dist/cjs/status.d.ts.map +1 -1
  48. package/dist/cjs/status.js +80 -79
  49. package/dist/cjs/status.js.map +1 -1
  50. package/dist/cjs/types.d.ts +74 -2
  51. package/dist/cjs/types.d.ts.map +1 -1
  52. package/dist/cjs/types.js +15 -2
  53. package/dist/cjs/types.js.map +1 -1
  54. package/dist/cjs/utils.d.ts.map +1 -1
  55. package/dist/cjs/utils.js +1 -0
  56. package/dist/cjs/utils.js.map +1 -1
  57. package/dist/cjs/utils.node.d.ts.map +1 -1
  58. package/dist/cjs/utils.node.js +1 -0
  59. package/dist/cjs/utils.node.js.map +1 -1
  60. package/dist/exp-cache.d.ts +101 -0
  61. package/dist/exp-cache.d.ts.map +1 -0
  62. package/dist/exp-cache.js +551 -0
  63. package/dist/exp-cache.js.map +1 -0
  64. package/dist/generator.d.ts +142 -19
  65. package/dist/generator.d.ts.map +1 -1
  66. package/dist/generator.js +415 -35
  67. package/dist/generator.js.map +1 -1
  68. package/dist/helpers.d.ts +49 -2
  69. package/dist/helpers.d.ts.map +1 -1
  70. package/dist/helpers.js +169 -14
  71. package/dist/helpers.js.map +1 -1
  72. package/dist/index.d.ts +2 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +3 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/linked-list.d.ts +35 -0
  77. package/dist/linked-list.d.ts.map +1 -0
  78. package/dist/linked-list.js +300 -0
  79. package/dist/linked-list.js.map +1 -0
  80. package/dist/middlewares.d.ts +102 -12
  81. package/dist/middlewares.d.ts.map +1 -1
  82. package/dist/middlewares.js +119 -22
  83. package/dist/middlewares.js.map +1 -1
  84. package/dist/parsers.d.ts.map +1 -1
  85. package/dist/parsers.js +1 -0
  86. package/dist/parsers.js.map +1 -1
  87. package/dist/router.d.ts +5 -6
  88. package/dist/router.d.ts.map +1 -1
  89. package/dist/router.js +271 -148
  90. package/dist/router.js.map +1 -1
  91. package/dist/status.d.ts.map +1 -1
  92. package/dist/status.js +80 -79
  93. package/dist/status.js.map +1 -1
  94. package/dist/types.d.ts +74 -2
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +15 -2
  97. package/dist/types.js.map +1 -1
  98. package/dist/utils.d.ts.map +1 -1
  99. package/dist/utils.js +1 -0
  100. package/dist/utils.js.map +1 -1
  101. package/dist/utils.node.d.ts.map +1 -1
  102. package/dist/utils.node.js +1 -0
  103. package/dist/utils.node.js.map +1 -1
  104. package/package.json +1 -1
package/dist/generator.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ // src/generator.ts
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -41,6 +42,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
41
42
  step((generator = generator.apply(thisArg, _arguments || [])).next());
42
43
  });
43
44
  };
45
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
46
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
47
+ var m = o[Symbol.asyncIterator], i;
48
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
49
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
50
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
51
+ };
44
52
  var __rest = (this && this.__rest) || function (s, e) {
45
53
  var t = {};
46
54
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -52,19 +60,14 @@ var __rest = (this && this.__rest) || function (s, e) {
52
60
  }
53
61
  return t;
54
62
  };
55
- var __asyncValues = (this && this.__asyncValues) || function (o) {
56
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
57
- var m = o[Symbol.asyncIterator], i;
58
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
59
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
60
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
61
- };
62
63
  Object.defineProperty(exports, "__esModule", { value: true });
63
- exports.generateStaticRoutesImporter = void 0;
64
+ exports.generateStaticAssetsManifestWatcher = exports.generateStaticAssetsManifest = exports.defaultPathnameTransformer = exports.generateStaticRoutesWatcher = exports.generateStaticRoutes = void 0;
64
65
  const types_ts_1 = require("./types.js");
65
66
  const router_ts_1 = __importStar(require("./router.js"));
66
67
  const utils_node_ts_1 = require("./utils.node.js");
68
+ const promises_1 = require("node:fs/promises");
67
69
  const node_crypto_1 = require("node:crypto");
70
+ const promises_2 = require("node:fs/promises");
68
71
  function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testRouter) {
69
72
  let setters = "";
70
73
  for (const [methodHandler, def] of Object.entries(module)) {
@@ -72,7 +75,14 @@ function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testR
72
75
  const [method_, handlerType_] = methodHandler.split("_", 2);
73
76
  let method;
74
77
  let handlerType = "handler";
75
- if (router_ts_1.HTTP_METHODS_UPPER.has(method_.toUpperCase())) {
78
+ const methodUpper = method_.toUpperCase();
79
+ if (methodUpper === "ALL") {
80
+ method = "All";
81
+ }
82
+ else if (methodUpper === "CRUD") {
83
+ method = "Crud";
84
+ }
85
+ else if (router_ts_1.HTTP_METHODS_UPPER.has(methodUpper)) {
76
86
  method = (method_.charAt(0).toUpperCase() +
77
87
  method_.substring(1).toLowerCase());
78
88
  }
@@ -83,41 +93,51 @@ function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testR
83
93
  router_ts_1.HANDLER_TYPES.has(handlerType_.toLowerCase())) {
84
94
  handlerType = handlerType_.toLowerCase();
85
95
  }
86
- if (!(Array.isArray(def) ||
87
- typeof def === "function" ||
88
- typeof def === "object")) {
89
- // throw new RouterError(`Invalid route definition type \`${typeof def}\` '${methodHandler}' in ${importPath}`);
90
- console.error(new types_ts_1.RouterError(`Invalid route definition type \`${typeof def}\` '${methodHandler}' in ${importPath}`));
91
- continue;
92
- }
93
96
  const defIsObject = !Array.isArray(def) && typeof def === "object";
94
97
  // get pipe and any other options
95
- const _a = defIsObject
96
- ? def
97
- : { pipe: def }, { pipe } = _a, options = __rest(_a, ["pipe"]);
98
- if (!(Array.isArray(pipe) || typeof pipe === "function")) {
99
- // throw new RouterError(`Invalid route 'pipe' type \`${typeof pipe}\` in ${importPath}`);
100
- console.error(new types_ts_1.RouterError(`Invalid route 'pipe' type \`${typeof pipe}\` in ${importPath}`));
101
- continue;
98
+ const pipe = defIsObject ? def.pipe : def;
99
+ const options = defIsObject
100
+ ? {}
101
+ : undefined;
102
+ if (options != null) {
103
+ options.openApi = def.openApi;
104
+ options.overwrite = def.overwrite;
105
+ }
106
+ if ((options === null || options === void 0 ? void 0 : options.openApi) != null && handlerType !== "handler") {
107
+ console.warn(`OpenApi definition will be ignored for \`${methodHandler}\` in '${importPath}'`);
108
+ }
109
+ if (pipe == null) {
110
+ throw new types_ts_1.RouterError(`Undefined pipe for \`${methodHandler}\` in '${importPath}'`);
111
+ }
112
+ if (!((Array.isArray(pipe) && pipe.every((h) => typeof h === "function")) ||
113
+ typeof pipe === "function")) {
114
+ throw new types_ts_1.RouterError(`Invalid pipe or handler type for \`${methodHandler}\` in '${importPath}'`);
115
+ }
116
+ if ((options === null || options === void 0 ? void 0 : options.openApi) != null && typeof (options === null || options === void 0 ? void 0 : options.openApi) !== "object") {
117
+ throw new types_ts_1.RouterError(`Invalid openApi type for \`${methodHandler}\` in '${importPath}'`);
102
118
  }
103
119
  const entryId = `${moduleId}.${methodHandler}`;
104
- const optionsStr = Object.entries(options).length > 0 ? `, $O(${entryId})` : "";
120
+ const optionsStr = defIsObject ? `, $O(${entryId})` : "";
105
121
  const pipeStr = defIsObject ? `${entryId}.pipe` : entryId;
106
- testRouter.register(handlerType, `${method} ${pathname}`, pipe, options);
107
122
  switch (handlerType) {
108
123
  case "filter":
124
+ testRouter[`filter${method}`](pathname, pipe, options);
109
125
  setters += `\n ${routerId}.filter${method}("${pathname}", ${pipeStr}${optionsStr});`;
110
126
  break;
111
127
  case "handler":
128
+ testRouter[`handle${method}`](pathname, pipe, options);
112
129
  setters += `\n ${routerId}.handle${method}("${pathname}", ${pipeStr}${optionsStr});`;
113
130
  break;
114
131
  case "fallback":
132
+ testRouter[`fallback${method}`](pathname, pipe, options);
115
133
  setters += `\n ${routerId}.fallback${method}("${pathname}", ${pipeStr}${optionsStr});`;
116
134
  break;
117
135
  case "after":
136
+ testRouter[`after${method}`](pathname, pipe, options);
118
137
  setters += `\n ${routerId}.after${method}("${pathname}", ${pipeStr}${optionsStr});`;
119
138
  break;
120
139
  case "catcher":
140
+ testRouter[`catch${method}`](pathname, pipe, options);
121
141
  setters += `\n ${routerId}.catch${method}("${pathname}", ${pipeStr}${optionsStr});`;
122
142
  break;
123
143
  }
@@ -129,7 +149,7 @@ function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testR
129
149
  * This is useful for integration with frameworks such as Nexts and cloudflare
130
150
  * and production in general.
131
151
  *
132
- * @param options Options for static routes import generator. eg. './routes'
152
+ * @param {object} options Options for static routes import generator. eg. './routes'
133
153
  * @param {string} options.routesPath The root path of the routes.
134
154
  * @param {string} options.importRoot The import root-prefix to use in the generated imports.
135
155
  * `importRoot: ''` -> `import ... from 'api/index.ts';`
@@ -148,10 +168,10 @@ function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testR
148
168
  * @example
149
169
  *
150
170
  * ```
151
- * import { generateStaticRoutesImporter } from "@bepalo/spine";
171
+ * import { generateStaticRoutes } from "@bepalo/spine";
152
172
  * import { hash } from "node:crypto";
153
173
  *
154
- * await generateStaticRoutesImporter({
174
+ * await generateStaticRoutes({
155
175
  * routesPath: "./routes",
156
176
  * importRoot: "./routes/",
157
177
  * pattern: /route\.(?:ts|js|mjs)$/, // match only routes ending with .route.ts...
@@ -164,19 +184,19 @@ function getRouteLoaders(routerId, moduleId, pathname, module, importPath, testR
164
184
  * // update generated import file if the hash changed.
165
185
  * const f = Bun.file(output);
166
186
  * if (await f.exists()) {
167
- * if (hash("sha1", c, "hex") != hash("sha1", await f.text(), "hex")) {
187
+ * if (hash("md5", c, "hex") != hash("md5", await f.text(), "hex")) {
168
188
  * Bun.write(output, c);
169
- * console.log(new Date().getTime(), "[SPINE-GEN]", c.length, `'${output}'`);
189
+ * console.log(timestamp(), "[SPINE-GEN]", c.length, `'${output}'`);
170
190
  * }
171
191
  * } else {
172
192
  * Bun.write(output, c);
173
- * console.log(new Date().getTime(), "[SPINE-GEN]", c.length, `'${output}'`);
193
+ * console.log(timestamp(), "[SPINE-GEN]", c.length, `'${output}'`);
174
194
  * }
175
195
  * });
176
196
  * ```
177
197
  *
178
198
  */
179
- const generateStaticRoutesImporter = (_a) => __awaiter(void 0, [_a], void 0, function* ({ routesPath, importRoot = "./", usePathForIdGeneration = false, importExtensions = false, pattern = /\.(js|ts|mjs|cjs)$/, dirPattern = /.*/, processName = (name) => name.substring(0, name.lastIndexOf(".")), onError, }) {
199
+ const generateStaticRoutes = (_a) => __awaiter(void 0, [_a], void 0, function* ({ routesPath, importRoot = "./", usePathForIdGeneration = false, importExtensions = false, pattern = /\.(js|ts|mjs|cjs)$/, dirPattern = /.*/, processName = (name) => name.substring(0, name.lastIndexOf(".")), onError, }) {
180
200
  var _b, e_1, _c, _d;
181
201
  const testRouter = new router_ts_1.default();
182
202
  let imports = "";
@@ -219,7 +239,7 @@ const generateStaticRoutesImporter = (_a) => __awaiter(void 0, [_a], void 0, fun
219
239
  .replace(/_+/g, "_")
220
240
  .replace(/^_/, "")
221
241
  .replace(/_$/, "")
222
- : (0, node_crypto_1.hash)("sha1", pureRelativePath, "base64url").replace(/[^a-zA-Z0-9_]/g, "_"));
242
+ : (0, node_crypto_1.hash)("md5", pureRelativePath, "base64url").replace(/[^a-zA-Z0-9_]/g, "_"));
223
243
  const importPath = importRoot + pureRelativePath + extension;
224
244
  const module = (yield (0, utils_node_ts_1.dynamicImport)(fullPath));
225
245
  const routeDef = " " +
@@ -281,6 +301,366 @@ export const setRoutes = async <ExtendContext extends Record<string, unknown>>(
281
301
  export default setRoutes;
282
302
  `;
283
303
  });
284
- exports.generateStaticRoutesImporter = generateStaticRoutesImporter;
285
- exports.default = exports.generateStaticRoutesImporter;
304
+ exports.generateStaticRoutes = generateStaticRoutes;
305
+ /**
306
+ *
307
+ * @param {object} options Options include `generateStaticRoutes` options too.
308
+ * @param {output} [options.output='./routes.ts'] Output file path. deafult: `'./routes.ts'`
309
+ * @param {number} [options.generateDelay=1000] Time in milliseconds to delay generation on change. default: `1000` -> 1s
310
+ * @param {AbortSignal} options.abortSignal Abort signal.
311
+ * @param {(filename:string)=>Promise<string>|string} options.read Function to read from file.
312
+ * @param {(filename:string,content:string)=>Promise<void|unknown>|void|unknown} options.write Function to write to file.
313
+ * @param {()=>string|number|unknown} options.timestamp Override default log timestamp.
314
+ * @param {(...args:any[])=>unknown} options.logger Override logger.
315
+ *
316
+ * @example
317
+ * generateStaticRoutesWatcher({
318
+ * routesPath: "./routes",
319
+ * importRoot: "./routes/",
320
+ * output: "./routes.ts",
321
+ * abortSignal: abortController.signal,
322
+ * read: (filepath) => readFile(filepath, { encoding: "utf-8" }),
323
+ * write: (filepath, content) =>
324
+ * writeFile(filepath, content, { encoding: "utf-8" }),
325
+ * // generateDelay: 1000,
326
+ * });
327
+ *
328
+ */
329
+ const generateStaticRoutesWatcher = (_a) => __awaiter(void 0, void 0, void 0, function* () {
330
+ var _b, e_2, _c, _d;
331
+ var { read, write, abortSignal, generateDelay = 1000, output = "./routes.ts", timestamp = () => `${new Date().toLocaleTimeString()}`, logger = console.log, pattern = /\.(js|ts|mjs|cjs)$/, dirPattern = /.*/ } = _a, params = __rest(_a, ["read", "write", "abortSignal", "generateDelay", "output", "timestamp", "logger", "pattern", "dirPattern"]);
332
+ let timerId = undefined;
333
+ //
334
+ const gnerateOutput = () => __awaiter(void 0, void 0, void 0, function* () {
335
+ const newContent = yield (0, exports.generateStaticRoutes)(Object.assign({ pattern,
336
+ dirPattern }, params));
337
+ let oldContent = undefined;
338
+ try {
339
+ oldContent = yield read(output);
340
+ }
341
+ catch (_a) { }
342
+ if (oldContent == null) {
343
+ yield write(output, newContent);
344
+ logger(timestamp(), "[Routes-Watcher]", `Routes generated to ${output}`);
345
+ }
346
+ else {
347
+ const newHash = (0, node_crypto_1.hash)("md5", newContent, "base64");
348
+ const oldHash = (0, node_crypto_1.hash)("md5", oldContent, "base64");
349
+ if (newHash !== oldHash) {
350
+ yield write(output, newContent);
351
+ logger(timestamp(), "[Routes-Watcher]", `Routes generated to ${output}`);
352
+ }
353
+ else {
354
+ logger(timestamp(), "[Routes-Watcher]", `No change to routes`);
355
+ }
356
+ }
357
+ });
358
+ // intitial generation
359
+ yield gnerateOutput();
360
+ try {
361
+ logger(timestamp(), "[Routes-Watcher]", `watching for routes changes under '${params.routesPath}'...`);
362
+ try {
363
+ for (var _e = true, _f = __asyncValues((0, promises_1.watch)(params.routesPath, {
364
+ recursive: true,
365
+ signal: abortSignal,
366
+ })), _g; _g = yield _f.next(), _b = _g.done, !_b; _e = true) {
367
+ _d = _g.value;
368
+ _e = false;
369
+ const event = _d;
370
+ const eventFilename = event.filename || "";
371
+ const fileSeparatorIdx = eventFilename.lastIndexOf("/");
372
+ const parent = eventFilename.substring(0, fileSeparatorIdx);
373
+ const filename = eventFilename.substring(fileSeparatorIdx + 1);
374
+ if ((event.eventType === "change" || event.eventType === "rename") &&
375
+ pattern.test(filename) &&
376
+ dirPattern.test(parent)) {
377
+ logger(timestamp(), "[Routes-Watcher]", `Change Event: "${eventFilename}"`);
378
+ if (timerId == null) {
379
+ timerId = setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
380
+ try {
381
+ yield gnerateOutput();
382
+ }
383
+ catch (error) {
384
+ logger(timestamp(), "[Routes-Watcher][Error]", error);
385
+ }
386
+ finally {
387
+ timerId = undefined;
388
+ }
389
+ }), generateDelay);
390
+ }
391
+ }
392
+ }
393
+ }
394
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
395
+ finally {
396
+ try {
397
+ if (!_e && !_b && (_c = _f.return)) yield _c.call(_f);
398
+ }
399
+ finally { if (e_2) throw e_2.error; }
400
+ }
401
+ }
402
+ catch (error) {
403
+ clearTimeout(timerId);
404
+ timerId = undefined;
405
+ if (error instanceof Error) {
406
+ logger(timestamp(), "[Routes-Watcher][Error]", error);
407
+ }
408
+ else {
409
+ logger(timestamp(), "[Routes-Watcher]", "Watcher aborted");
410
+ }
411
+ }
412
+ });
413
+ exports.generateStaticRoutesWatcher = generateStaticRoutesWatcher;
414
+ const defaultPathnameTransformer = ({ name, ext, relativePath, }) => {
415
+ return [".html", ".htm", ".xhtml", ".xhtm"].includes(ext)
416
+ ? name === "index"
417
+ ? `/${relativePath.substring(0, relativePath.length - ext.length - "/index".length)}`
418
+ : `/${relativePath.substring(0, relativePath.length - ext.length)}`
419
+ : `/${relativePath}`;
420
+ };
421
+ exports.defaultPathnameTransformer = defaultPathnameTransformer;
422
+ /**
423
+ * Static assets manifest generator. Primarily intended for use with static file serving.
424
+ *
425
+ * @description Generates an asset manifest of static assets under the given path.
426
+ * It gathers the name, extension, paths, size, modification-time and content-type of the assets.
427
+ *
428
+ * @param {object} options Options for the static assets manifest generator.
429
+ * @param {string} options.assetsPath Root path of the static assets.
430
+ * @param {-1|1|undefined} options.sortOrder Enable and set the sort order of file entries by their pathname.
431
+ * @param {(fileInfo:GenerateStaticAssetsManifestFileInfo)=>boolean|void} options.exclude Function to exclude files. Returning `true` means skip file.
432
+ * @param {(fileInfo: GenerateStaticAssetsManifestFileInfo)=>string} options.transformPathname Override function to transform the pathname.
433
+ * @returns {Promise<StaticAssetsManifest>} The generated static asset manifest.
434
+ *
435
+ * @example
436
+ * generateStaticAssetsManifest({
437
+ * assetsPath: "./public",
438
+ * // exclude: ({ name, ext }) => !name || ext === ".private",
439
+ * // transformPathname: ({ name, parent }) =>
440
+ * // name === index && ext == ".html" ? `/${parent}` : `/${parent}/${name}`
441
+ * });
442
+ */
443
+ const generateStaticAssetsManifest = (_a) => __awaiter(void 0, [_a], void 0, function* ({ assetsPath, sortOrder, exclude, transformPathname = exports.defaultPathnameTransformer, }) {
444
+ var _b, e_3, _c, _d;
445
+ const manifest = {
446
+ version: "1",
447
+ generatedAt: new Date().toISOString(),
448
+ files: {},
449
+ };
450
+ const files = {};
451
+ try {
452
+ for (var _e = true, _f = __asyncValues((0, utils_node_ts_1.walk)(assetsPath)), _g; _g = yield _f.next(), _b = _g.done, !_b; _e = true) {
453
+ _d = _g.value;
454
+ _e = false;
455
+ const node = _d;
456
+ if (node.type === "file") {
457
+ const { path, relativePath, parent } = node;
458
+ const extIndex = node.name.lastIndexOf(".");
459
+ const ext = extIndex < 0 ? "" : node.name.substring(extIndex);
460
+ const name = extIndex < 0
461
+ ? node.name
462
+ : node.name.substring(0, node.name.length - ext.length);
463
+ // get file stat
464
+ const fst = yield (0, promises_2.stat)(node.fullPath);
465
+ const mtime = Math.trunc(fst.mtimeMs);
466
+ const size = fst.size;
467
+ const contentType = types_ts_1.MIME_TYPES.get(ext.substring(1)) || "application/octet-stream";
468
+ // form fileInfo and check if to exclude
469
+ const fileInfo = {
470
+ name,
471
+ ext,
472
+ relativePath,
473
+ parent,
474
+ size,
475
+ mtime,
476
+ contentType,
477
+ };
478
+ if (typeof exclude === "function" && exclude(fileInfo)) {
479
+ continue;
480
+ }
481
+ const pathname = transformPathname(fileInfo);
482
+ // check for collisions
483
+ if (pathname in files) {
484
+ throw new Error(`Static Asset pathname collision for '${pathname}' -> '${relativePath}' with '${files[pathname].relativePath}'`);
485
+ }
486
+ files[pathname] = {
487
+ pathname,
488
+ name,
489
+ ext,
490
+ path,
491
+ relativePath,
492
+ contentType,
493
+ mtime,
494
+ size,
495
+ };
496
+ }
497
+ }
498
+ }
499
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
500
+ finally {
501
+ try {
502
+ if (!_e && !_b && (_c = _f.return)) yield _c.call(_f);
503
+ }
504
+ finally { if (e_3) throw e_3.error; }
505
+ }
506
+ if (sortOrder === undefined) {
507
+ manifest.files = files;
508
+ }
509
+ else {
510
+ const pred = sortOrder < 0
511
+ ? (a, b) => b.localeCompare(a)
512
+ : (a, b) => a.localeCompare(b);
513
+ const sortedKeys = Object.keys(files).sort(pred);
514
+ for (const key of sortedKeys) {
515
+ manifest.files[key] = files[key];
516
+ }
517
+ }
518
+ return manifest;
519
+ });
520
+ exports.generateStaticAssetsManifest = generateStaticAssetsManifest;
521
+ /**
522
+ *
523
+ * @param options Options include `generateStaticAssets` options too.
524
+ * @param {output} [options.output='./static-assets.json'] Output file path. default: `'./static-assets.json'`
525
+ * @param {number} [options.generateDelay=1000] Time in milliseconds to delay generation on change. default: `1000` -> 1s
526
+ * @param {AbortSignal} options.abortSignal Abort signal.
527
+ * @param {(filename:string)=>Promise<string>|string} options.read Function to read from file.
528
+ * @param {(filename:string,content:string)=>Promise<void|unknown>|void|unknown} options.write Function to write to file.
529
+ * @param {()=>string|number|unknown} options.timestamp Override default log timestamp.
530
+ * @param {(...args:any[])=>unknown} options.logger Override logger.
531
+ *
532
+ * @example
533
+ * generateStaticAssetsManifestWatcher({
534
+ * assetsPath: "./public",
535
+ * output: "./static-assets.json",
536
+ * // sortOrder: 1,
537
+ * // exclude: ({ name, ext }) => !name || ext === ".private",
538
+ * // generateDelay: 1000,
539
+ * read: (filepath) => readFile(filepath, { encoding: "utf-8" }),
540
+ * write: (filepath, content) =>
541
+ * writeFile(filepath, content, { encoding: "utf-8" }),
542
+ * abortSignal: abortController.signal,
543
+ * });
544
+ *
545
+ */
546
+ const generateStaticAssetsManifestWatcher = (_a) => __awaiter(void 0, void 0, void 0, function* () {
547
+ var _b, e_4, _c, _d;
548
+ var { read, write, abortSignal, generateDelay = 1000, output = "./static-assets.json", timestamp = () => `${new Date().toLocaleTimeString()}`, logger = console.log, exclude } = _a, params = __rest(_a, ["read", "write", "abortSignal", "generateDelay", "output", "timestamp", "logger", "exclude"]);
549
+ let timerId = undefined;
550
+ //
551
+ const gnerateOutput = () => __awaiter(void 0, void 0, void 0, function* () {
552
+ var _a;
553
+ const staticAssetsManifest = yield (0, exports.generateStaticAssetsManifest)(Object.assign({ exclude }, params));
554
+ const newContentFiles = JSON.stringify(staticAssetsManifest.files);
555
+ const newContent = JSON.stringify(staticAssetsManifest, null, 2);
556
+ let oldContent = undefined;
557
+ let oldContentFiles = undefined;
558
+ try {
559
+ oldContent = yield read(output);
560
+ try {
561
+ oldContentFiles = JSON.stringify((_a = JSON.parse(oldContent)) === null || _a === void 0 ? void 0 : _a.files);
562
+ }
563
+ catch (_b) {
564
+ oldContent = undefined;
565
+ }
566
+ }
567
+ catch (_c) { }
568
+ if (oldContent == null || oldContentFiles == null) {
569
+ yield write(output, newContent);
570
+ logger(timestamp(), "[Static-Assets-Watcher]", `Manifest generated to ${output}`);
571
+ }
572
+ else {
573
+ const newHash = (0, node_crypto_1.hash)("md5", newContentFiles, "base64");
574
+ const oldHash = (0, node_crypto_1.hash)("md5", oldContentFiles, "base64");
575
+ if (newHash !== oldHash) {
576
+ yield write(output, newContent);
577
+ logger(timestamp(), "[Static-Assets-Watcher]", `Manifest generated to ${output}`);
578
+ }
579
+ else {
580
+ logger(timestamp(), "[Static-Assets-Watcher]", `No change to manifest`);
581
+ }
582
+ }
583
+ });
584
+ // intitial generation
585
+ yield gnerateOutput();
586
+ try {
587
+ logger(timestamp(), "[Static-Assets-Watcher]", `watching for routes changes under '${params.assetsPath}'...`);
588
+ try {
589
+ for (var _e = true, _f = __asyncValues((0, promises_1.watch)(params.assetsPath, {
590
+ recursive: true,
591
+ signal: abortSignal,
592
+ })), _g; _g = yield _f.next(), _b = _g.done, !_b; _e = true) {
593
+ _d = _g.value;
594
+ _e = false;
595
+ const event = _d;
596
+ if (event.eventType === "rename") {
597
+ const relativePath = event.filename || "";
598
+ if (exclude !== undefined) {
599
+ const path = params.assetsPath + "/" + relativePath;
600
+ const fileSeparatorIdx = relativePath.lastIndexOf("/");
601
+ const parent = relativePath.substring(0, fileSeparatorIdx);
602
+ const filename = relativePath.substring(fileSeparatorIdx + 1);
603
+ const extIndex = filename.lastIndexOf(".");
604
+ const ext = extIndex < 0 ? "" : filename.substring(extIndex);
605
+ const name = extIndex < 0
606
+ ? filename
607
+ : filename.substring(0, filename.length - ext.length);
608
+ // get file stat
609
+ const fst = yield (0, promises_2.stat)(path).catch(() => ({
610
+ mtimeMs: 0,
611
+ size: 0,
612
+ }));
613
+ const mtime = Math.trunc(fst.mtimeMs);
614
+ const size = fst.size;
615
+ const contentType = types_ts_1.MIME_TYPES.get(ext.substring(1)) || "application/octet-stream";
616
+ const fileInfo = {
617
+ name,
618
+ ext,
619
+ relativePath,
620
+ parent,
621
+ size,
622
+ mtime,
623
+ contentType,
624
+ };
625
+ if (exclude(fileInfo)) {
626
+ continue;
627
+ }
628
+ }
629
+ logger(timestamp(), "[Static-Assets-Watcher]", `File Event: "${relativePath}"`);
630
+ if (timerId == null) {
631
+ timerId = setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
632
+ try {
633
+ yield gnerateOutput();
634
+ }
635
+ catch (error) {
636
+ logger(timestamp(), "[Static-Assets-Watcher][Error]", error);
637
+ }
638
+ finally {
639
+ timerId = undefined;
640
+ }
641
+ }), generateDelay);
642
+ }
643
+ }
644
+ }
645
+ }
646
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
647
+ finally {
648
+ try {
649
+ if (!_e && !_b && (_c = _f.return)) yield _c.call(_f);
650
+ }
651
+ finally { if (e_4) throw e_4.error; }
652
+ }
653
+ }
654
+ catch (error) {
655
+ clearTimeout(timerId);
656
+ timerId = undefined;
657
+ if (error instanceof Error) {
658
+ logger(timestamp(), "[Static-Assets-Watcher][Error]", error);
659
+ }
660
+ else {
661
+ logger(timestamp(), "[Static-Assets-Watcher]", "Watcher aborted");
662
+ }
663
+ }
664
+ });
665
+ exports.generateStaticAssetsManifestWatcher = generateStaticAssetsManifestWatcher;
286
666
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}