@eggjs/static 3.0.0 → 4.0.0-beta.15

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 (47) hide show
  1. package/README.md +3 -7
  2. package/dist/app/middleware/static.d.ts +8 -0
  3. package/dist/app/middleware/static.js +43 -0
  4. package/dist/app.d.ts +10 -0
  5. package/dist/app.js +16 -0
  6. package/dist/config/config.default.d.ts +6 -0
  7. package/dist/config/config.default.js +17 -0
  8. package/dist/config/config.prod.d.ts +6 -0
  9. package/dist/config/config.prod.js +10 -0
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.js +1 -0
  12. package/{src/types.ts → dist/types.d.ts} +9 -9
  13. package/dist/types.js +1 -0
  14. package/package.json +39 -58
  15. package/dist/commonjs/app/middleware/static.d.ts +0 -5
  16. package/dist/commonjs/app/middleware/static.js +0 -57
  17. package/dist/commonjs/app.d.ts +0 -6
  18. package/dist/commonjs/app.js +0 -21
  19. package/dist/commonjs/config/config.default.d.ts +0 -6
  20. package/dist/commonjs/config/config.default.js +0 -22
  21. package/dist/commonjs/config/config.prod.d.ts +0 -5
  22. package/dist/commonjs/config/config.prod.js +0 -9
  23. package/dist/commonjs/index.d.ts +0 -1
  24. package/dist/commonjs/index.js +0 -4
  25. package/dist/commonjs/package.json +0 -3
  26. package/dist/commonjs/types.d.ts +0 -60
  27. package/dist/commonjs/types.js +0 -3
  28. package/dist/esm/app/middleware/static.d.ts +0 -5
  29. package/dist/esm/app/middleware/static.js +0 -52
  30. package/dist/esm/app.d.ts +0 -6
  31. package/dist/esm/app.js +0 -18
  32. package/dist/esm/config/config.default.d.ts +0 -6
  33. package/dist/esm/config/config.default.js +0 -17
  34. package/dist/esm/config/config.prod.d.ts +0 -5
  35. package/dist/esm/config/config.prod.js +0 -7
  36. package/dist/esm/index.d.ts +0 -1
  37. package/dist/esm/index.js +0 -2
  38. package/dist/esm/package.json +0 -3
  39. package/dist/esm/types.d.ts +0 -60
  40. package/dist/esm/types.js +0 -2
  41. package/dist/package.json +0 -4
  42. package/src/app/middleware/static.ts +0 -66
  43. package/src/app.ts +0 -18
  44. package/src/config/config.default.ts +0 -19
  45. package/src/config/config.prod.ts +0 -8
  46. package/src/index.ts +0 -1
  47. package/src/typings/index.d.ts +0 -4
package/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # @eggjs/static
2
2
 
3
3
  [![NPM version][npm-image]][npm-url]
4
- [![Node.js CI](https://github.com/eggjs/static/actions/workflows/nodejs.yml/badge.svg)](https://github.com/eggjs/static/actions/workflows/nodejs.yml)
5
- [![Test coverage][codecov-image]][codecov-url]
6
4
  [![Known Vulnerabilities][snyk-image]][snyk-url]
7
5
  [![npm download][download-image]][download-url]
8
6
  [![Node.js Version](https://img.shields.io/node/v/@eggjs/static.svg?style=flat)](https://nodejs.org/en/download/)
@@ -10,14 +8,12 @@
10
8
 
11
9
  [npm-image]: https://img.shields.io/npm/v/@eggjs/static.svg?style=flat-square
12
10
  [npm-url]: https://npmjs.org/package/@eggjs/static
13
- [codecov-image]: https://img.shields.io/codecov/c/github/eggjs/static.svg?style=flat-square
14
- [codecov-url]: https://codecov.io/github/eggjs/static?branch=master
15
11
  [snyk-image]: https://snyk.io/test/npm/@eggjs/static/badge.svg?style=flat-square
16
12
  [snyk-url]: https://snyk.io/test/npm/@eggjs/static
17
13
  [download-image]: https://img.shields.io/npm/dm/@eggjs/static.svg?style=flat-square
18
14
  [download-url]: https://npmjs.org/package/@eggjs/static
19
15
 
20
- Static server plugin for egg, base on [@eggjs/koa-static-cache](https://github.com/eggjs/koa-static-cache).
16
+ Static server plugin for egg, base on [@eggjs/koa-static-cache](https://github.com/eggjs/egg/tree/next/packages/koa-static-cache).
21
17
 
22
18
  ## Install
23
19
 
@@ -25,7 +21,7 @@ Static server plugin for egg, base on [@eggjs/koa-static-cache](https://github.c
25
21
 
26
22
  ## Configuration
27
23
 
28
- `@eggjs/static` support all configurations in [@eggjs/koa-static-cache](https://github.com/eggjs/koa-static-cache).
24
+ `@eggjs/static` support all configurations in [@eggjs/koa-static-cache](https://github.com/eggjs/egg/tree/next/packages/koa-static-cache).
29
25
  And with default configurations below:
30
26
 
31
27
  - prefix: `'/public/'`
@@ -64,6 +60,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
64
60
 
65
61
  ## Contributors
66
62
 
67
- [![Contributors](https://contrib.rocks/image?repo=eggjs/static)](https://github.com/eggjs/static/graphs/contributors)
63
+ [![Contributors](https://contrib.rocks/image?repo=eggjs/egg)](https://github.com/eggjs/egg/graphs/contributors)
68
64
 
69
65
  Made with [contributors-img](https://contrib.rocks).
@@ -0,0 +1,8 @@
1
+ import { StaticConfig } from "../../types.js";
2
+ import { Application, Context } from "egg";
3
+ import compose from "koa-compose";
4
+
5
+ //#region src/app/middleware/static.d.ts
6
+ declare const _default: (options: StaticConfig, app: Application) => compose.ComposedMiddleware<Context>;
7
+ //#endregion
8
+ export { _default as default };
@@ -0,0 +1,43 @@
1
+ import assert from "node:assert";
2
+ import { existsSync, mkdirSync } from "node:fs";
3
+ import range from "koa-range";
4
+ import compose from "koa-compose";
5
+ import { staticCache } from "@eggjs/koa-static-cache";
6
+ import { LRU } from "ylru";
7
+
8
+ //#region src/app/middleware/static.ts
9
+ var static_default = (options, app) => {
10
+ const dirs = (options.dirs ?? []).concat(options.dir);
11
+ const prefixes = [];
12
+ function rangeMiddleware(ctx, next) {
13
+ if (prefixes.some((p) => ctx.path.startsWith(p))) return range(ctx, next);
14
+ return next();
15
+ }
16
+ const middlewares = [rangeMiddleware];
17
+ for (const dirObj of dirs) {
18
+ const isObject = typeof dirObj === "object" && dirObj !== null;
19
+ const isString = typeof dirObj === "string";
20
+ assert(isObject || isString, "`config.static.dir` must be `string | Array<string|object>`");
21
+ let newOptions;
22
+ if (isString) newOptions = {
23
+ ...options,
24
+ dir: dirObj
25
+ };
26
+ else {
27
+ assert(typeof dirObj.dir === "string", "`config.static.dirs` should contains `[].dir` property when object style");
28
+ newOptions = {
29
+ ...options,
30
+ ...dirObj
31
+ };
32
+ }
33
+ if (newOptions.dynamic && !newOptions.files) newOptions.files = new LRU(newOptions.maxFiles);
34
+ if (newOptions.prefix) prefixes.push(newOptions.prefix);
35
+ if (!existsSync(newOptions.dir)) mkdirSync(newOptions.dir, { recursive: true });
36
+ middlewares.push(staticCache(newOptions));
37
+ app.coreLogger.info("[@eggjs/static] starting static serve %s -> %s", newOptions.prefix, newOptions.dir);
38
+ }
39
+ return compose(middlewares);
40
+ };
41
+
42
+ //#endregion
43
+ export { static_default as default };
package/dist/app.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { Application, ILifecycleBoot } from "egg";
2
+
3
+ //#region src/app.d.ts
4
+ declare class AppBoot implements ILifecycleBoot {
5
+ private readonly app;
6
+ constructor(app: Application);
7
+ configWillLoad(): Promise<void>;
8
+ }
9
+ //#endregion
10
+ export { AppBoot as default };
package/dist/app.js ADDED
@@ -0,0 +1,16 @@
1
+ //#region src/app.ts
2
+ var AppBoot = class {
3
+ app;
4
+ constructor(app) {
5
+ this.app = app;
6
+ }
7
+ async configWillLoad() {
8
+ const app = this.app;
9
+ const index = app.config.coreMiddleware.indexOf("bodyParser");
10
+ if (index === -1) app.config.coreMiddleware.push("static");
11
+ else app.config.coreMiddleware.splice(index, 0, "static");
12
+ }
13
+ };
14
+
15
+ //#endregion
16
+ export { AppBoot as default };
@@ -0,0 +1,6 @@
1
+ import * as egg0 from "egg";
2
+
3
+ //#region src/config/config.default.d.ts
4
+ declare const _default: egg0.EggConfigFactory;
5
+ //#endregion
6
+ export { _default as default };
@@ -0,0 +1,17 @@
1
+ import path from "node:path";
2
+ import { defineConfigFactory } from "egg";
3
+
4
+ //#region src/config/config.default.ts
5
+ var config_default_default = defineConfigFactory((appInfo) => {
6
+ return { static: {
7
+ prefix: "/public/",
8
+ dir: path.join(appInfo.baseDir, "app/public"),
9
+ dynamic: true,
10
+ preload: false,
11
+ buffer: false,
12
+ maxFiles: 1e3
13
+ } };
14
+ });
15
+
16
+ //#endregion
17
+ export { config_default_default as default };
@@ -0,0 +1,6 @@
1
+ import { PartialEggConfig } from "egg";
2
+
3
+ //#region src/config/config.prod.d.ts
4
+ declare const _default: PartialEggConfig;
5
+ //#endregion
6
+ export { _default as default };
@@ -0,0 +1,10 @@
1
+ import "egg";
2
+
3
+ //#region src/config/config.prod.ts
4
+ var config_prod_default = { static: {
5
+ maxAge: 31536e3,
6
+ buffer: true
7
+ } };
8
+
9
+ //#endregion
10
+ export { config_prod_default as default };
@@ -0,0 +1 @@
1
+ export { };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { };
@@ -1,6 +1,7 @@
1
- import type { Options as StaticCacheOptions } from '@eggjs/koa-static-cache';
1
+ import { Options } from "@eggjs/koa-static-cache";
2
2
 
3
- export interface StaticDirOptions extends Omit<StaticCacheOptions, 'dir'> {
3
+ //#region src/types.d.ts
4
+ interface StaticDirOptions extends Omit<Options, 'dir'> {
4
5
  /**
5
6
  * static files store dir
6
7
  */
@@ -17,7 +18,7 @@ export interface StaticDirOptions extends Omit<StaticCacheOptions, 'dir'> {
17
18
  maxAge: number;
18
19
  /**
19
20
  * dynamic load file which not cached on initialization
20
- * Default to `true
21
+ * Default to `true`
21
22
  */
22
23
  dynamic: boolean;
23
24
  /**
@@ -37,13 +38,12 @@ export interface StaticDirOptions extends Omit<StaticCacheOptions, 'dir'> {
37
38
  */
38
39
  maxFiles: number;
39
40
  }
40
-
41
41
  /**
42
42
  * Static file serve
43
43
  * @member Config#static
44
- * @see https://github.com/koajs/static-cache
44
+ * @see https://github.com/eggjs/egg/tree/next/packages/koa-static-cache
45
45
  */
46
- export interface StaticConfig extends Omit<StaticDirOptions, 'dir'> {
46
+ interface StaticConfig extends Omit<StaticDirOptions, 'dir'> {
47
47
  /**
48
48
  * static files store dir
49
49
  * Default to `${baseDir}/app/public`
@@ -55,10 +55,10 @@ export interface StaticConfig extends Omit<StaticDirOptions, 'dir'> {
55
55
  */
56
56
  dirs?: Array<string | StaticDirOptions>;
57
57
  }
58
-
59
- declare module '@eggjs/core' {
60
- // add EggAppConfig overrides types
58
+ declare module 'egg' {
61
59
  interface EggAppConfig {
62
60
  static: StaticConfig;
63
61
  }
64
62
  }
63
+ //#endregion
64
+ export { StaticConfig, StaticDirOptions };
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export { };
package/package.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "name": "@eggjs/static",
3
- "version": "3.0.0",
3
+ "version": "4.0.0-beta.15",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "description": "static server plugin for egg",
8
8
  "eggPlugin": {
9
- "name": "static",
10
- "exports": {
11
- "import": "./dist/esm",
12
- "require": "./dist/commonjs",
13
- "typescript": "./src"
14
- }
9
+ "name": "static"
15
10
  },
16
11
  "repository": {
17
12
  "type": "git",
18
- "url": "git+https://github.com/eggjs/static.git"
13
+ "url": "https://github.com/eggjs/egg.git",
14
+ "directory": "plugins/static"
15
+ },
16
+ "homepage": "https://github.com/eggjs/egg/tree/next/plugins/static",
17
+ "bugs": {
18
+ "url": "https://github.com/eggjs/egg/issues"
19
19
  },
20
20
  "keywords": [
21
21
  "egg",
@@ -26,68 +26,49 @@
26
26
  "author": "dead_horse",
27
27
  "license": "MIT",
28
28
  "engines": {
29
- "node": ">= 18.19.0"
29
+ "node": ">=22.18.0"
30
30
  },
31
31
  "dependencies": {
32
- "@eggjs/core": "^6.2.13",
33
- "@eggjs/koa-static-cache": "^6.0.0",
34
- "is-type-of": "^2.2.0",
35
32
  "koa-compose": "^4.1.0",
36
33
  "koa-range": "^0.3.0",
37
- "ylru": "^2.0.0"
34
+ "ylru": "^2.0.0",
35
+ "@eggjs/koa-static-cache": "7.0.0-beta.15"
36
+ },
37
+ "peerDependencies": {
38
+ "egg": "4.1.0-beta.15"
38
39
  },
39
40
  "devDependencies": {
40
- "@arethetypeswrong/cli": "^0.17.1",
41
- "@eggjs/bin": "7",
42
- "@eggjs/mock": "^6.0.5",
43
- "@eggjs/tsconfig": "1",
44
41
  "@types/koa-compose": "^3.2.8",
45
42
  "@types/koa-range": "^0.3.5",
46
- "@types/mocha": "10",
47
- "@types/node": "22",
48
- "egg": "4",
49
- "eslint": "8",
50
- "eslint-config-egg": "14",
51
- "rimraf": "6",
52
- "tshy": "3",
53
- "tshy-after": "1",
54
- "typescript": "5"
55
- },
56
- "scripts": {
57
- "lint": "eslint --cache src test --ext .ts",
58
- "pretest": "npm run clean && npm run lint -- --fix",
59
- "test": "egg-bin test",
60
- "preci": "npm run clean && npm run lint",
61
- "ci": "egg-bin cov",
62
- "postci": "npm run prepublishOnly && npm run clean",
63
- "clean": "rimraf dist",
64
- "prepublishOnly": "tshy && tshy-after && attw --pack"
43
+ "oxlint": "^1.18.0",
44
+ "tsdown": "^0.15.4",
45
+ "typescript": "5.9.2",
46
+ "vitest": "4.0.0-beta.13",
47
+ "@eggjs/tsconfig": "3.1.0-beta.15",
48
+ "@eggjs/mock": "7.0.0-beta.15"
65
49
  },
66
50
  "type": "module",
67
- "tshy": {
68
- "exports": {
69
- ".": "./src/index.ts",
70
- "./package.json": "./package.json"
71
- }
72
- },
73
51
  "exports": {
74
- ".": {
75
- "import": {
76
- "types": "./dist/esm/index.d.ts",
77
- "default": "./dist/esm/index.js"
78
- },
79
- "require": {
80
- "types": "./dist/commonjs/index.d.ts",
81
- "default": "./dist/commonjs/index.js"
82
- }
83
- },
52
+ ".": "./dist/index.js",
53
+ "./app": "./dist/app.js",
54
+ "./app/middleware/static": "./dist/app/middleware/static.js",
55
+ "./config/config.default": "./dist/config/config.default.js",
56
+ "./config/config.prod": "./dist/config/config.prod.js",
57
+ "./types": "./dist/types.js",
84
58
  "./package.json": "./package.json"
85
59
  },
86
60
  "files": [
87
- "dist",
88
- "src"
61
+ "dist"
89
62
  ],
90
- "types": "./dist/commonjs/index.d.ts",
91
- "main": "./dist/commonjs/index.js",
92
- "module": "./dist/esm/index.js"
93
- }
63
+ "types": "./dist/index.d.ts",
64
+ "main": "./dist/index.js",
65
+ "module": "./dist/index.js",
66
+ "scripts": {
67
+ "build": "tsdown",
68
+ "typecheck": "tsc --noEmit",
69
+ "lint": "oxlint --type-aware",
70
+ "lint:fix": "npm run lint -- --fix",
71
+ "test": "npm run lint:fix && vitest run",
72
+ "ci": "vitest run --coverage"
73
+ }
74
+ }
@@ -1,5 +0,0 @@
1
- import compose from 'koa-compose';
2
- import type { EggCore, Context } from '@eggjs/core';
3
- import type { StaticConfig } from '../../types.js';
4
- declare const _default: (options: StaticConfig, app: EggCore) => compose.ComposedMiddleware<Context>;
5
- export default _default;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_assert_1 = __importDefault(require("node:assert"));
7
- const node_fs_1 = require("node:fs");
8
- const koa_range_1 = __importDefault(require("koa-range"));
9
- const koa_compose_1 = __importDefault(require("koa-compose"));
10
- const koa_static_cache_1 = require("@eggjs/koa-static-cache");
11
- const ylru_1 = require("ylru");
12
- const is_type_of_1 = require("is-type-of");
13
- exports.default = (options, app) => {
14
- const dirs = (options.dirs ?? []).concat(options.dir);
15
- const prefixes = [];
16
- function rangeMiddleware(ctx, next) {
17
- // if match static file, and use range middleware.
18
- const isMatch = prefixes.some(p => ctx.path.startsWith(p));
19
- if (isMatch) {
20
- return (0, koa_range_1.default)(ctx, next);
21
- }
22
- return next();
23
- }
24
- const middlewares = [rangeMiddleware];
25
- for (const dirObj of dirs) {
26
- (0, node_assert_1.default)((0, is_type_of_1.isObject)(dirObj) || typeof dirObj === 'string', '`config.static.dir` must be `string | Array<string|object>`');
27
- let newOptions;
28
- if (typeof dirObj === 'string') {
29
- // copy origin options to new options ensure the safety of objects
30
- newOptions = {
31
- ...options,
32
- dir: dirObj,
33
- };
34
- }
35
- else {
36
- (0, node_assert_1.default)(typeof dirObj.dir === 'string', '`config.static.dirs` should contains `[].dir` property when object style');
37
- newOptions = {
38
- ...options,
39
- ...dirObj,
40
- };
41
- }
42
- if (newOptions.dynamic && !newOptions.files) {
43
- newOptions.files = new ylru_1.LRU(newOptions.maxFiles);
44
- }
45
- if (newOptions.prefix) {
46
- prefixes.push(newOptions.prefix);
47
- }
48
- // ensure directory exists
49
- if (!(0, node_fs_1.existsSync)(newOptions.dir)) {
50
- (0, node_fs_1.mkdirSync)(newOptions.dir, { recursive: true });
51
- }
52
- middlewares.push((0, koa_static_cache_1.staticCache)(newOptions));
53
- app.coreLogger.info('[@eggjs/static] starting static serve %s -> %s', newOptions.prefix, newOptions.dir);
54
- }
55
- return (0, koa_compose_1.default)(middlewares);
56
- };
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhEQUFpQztBQUNqQyxxQ0FBZ0Q7QUFDaEQsMERBQThCO0FBQzlCLDhEQUFrQztBQUVsQyw4REFBc0Q7QUFDdEQsK0JBQTJCO0FBQzNCLDJDQUFzQztBQUd0QyxrQkFBZSxDQUFDLE9BQXFCLEVBQUUsR0FBWSxFQUFFLEVBQUU7SUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEQsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRTlCLFNBQVMsZUFBZSxDQUFDLEdBQVksRUFBRSxJQUFVO1FBQy9DLGtEQUFrRDtRQUNsRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxJQUFBLG1CQUFLLEVBQUMsR0FBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFFLGVBQWUsQ0FBRSxDQUFDO0lBRXhDLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBQSxxQkFBTSxFQUFDLElBQUEscUJBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQ25ELDZEQUE2RCxDQUFDLENBQUM7UUFFakUsSUFBSSxVQUE0QixDQUFDO1FBQ2pDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0Isa0VBQWtFO1lBQ2xFLFVBQVUsR0FBRztnQkFDWCxHQUFHLE9BQU87Z0JBQ1YsR0FBRyxFQUFFLE1BQU07YUFDWixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixJQUFBLHFCQUFNLEVBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFDbkMsMEVBQTBFLENBQUMsQ0FBQztZQUM5RSxVQUFVLEdBQUc7Z0JBQ1gsR0FBRyxPQUFPO2dCQUNWLEdBQUcsTUFBTTthQUNWLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBQSxtQkFBUyxFQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFBLDhCQUFXLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUV6QyxHQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFDM0UsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sSUFBQSxxQkFBTyxFQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyJ9
@@ -1,6 +0,0 @@
1
- import type { ILifecycleBoot, EggCore } from '@eggjs/core';
2
- export default class AppBoot implements ILifecycleBoot {
3
- private readonly app;
4
- constructor(app: EggCore);
5
- configWillLoad(): Promise<void>;
6
- }
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- class AppBoot {
4
- app;
5
- constructor(app) {
6
- this.app = app;
7
- }
8
- async configWillLoad() {
9
- const app = this.app;
10
- // make sure static middleware is before bodyParser
11
- const index = app.config.coreMiddleware.indexOf('bodyParser');
12
- if (index === -1) {
13
- app.config.coreMiddleware.push('static');
14
- }
15
- else {
16
- app.config.coreMiddleware.splice(index, 0, 'static');
17
- }
18
- }
19
- }
20
- exports.default = AppBoot;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQXFCLE9BQU87SUFDVCxHQUFHLENBQUM7SUFDckIsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxLQUFLLENBQUMsY0FBYztRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLG1EQUFtRDtRQUNuRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBZkQsMEJBZUMifQ==
@@ -1,6 +0,0 @@
1
- import type { EggAppInfo } from '@eggjs/core';
2
- import type { StaticConfig } from '../types.js';
3
- declare const _default: (appInfo: EggAppInfo) => {
4
- static: StaticConfig;
5
- };
6
- export default _default;
@@ -1,22 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const node_path_1 = __importDefault(require("node:path"));
7
- exports.default = (appInfo) => {
8
- return {
9
- static: {
10
- prefix: '/public/',
11
- dir: node_path_1.default.join(appInfo.baseDir, 'app/public'),
12
- // dirs: [ dir1, dir2 ] or [ dir1, { prefix: '/static2', dir: dir2 } ],
13
- dirs: undefined,
14
- // support lazy load
15
- dynamic: true,
16
- preload: false,
17
- buffer: false,
18
- maxFiles: 1000,
19
- },
20
- };
21
- };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQTZCO0FBSTdCLGtCQUFlLENBQUMsT0FBbUIsRUFBRSxFQUFFO0lBQ3JDLE9BQU87UUFDTCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUsVUFBVTtZQUNsQixHQUFHLEVBQUUsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7WUFDN0MsdUVBQXVFO1lBQ3ZFLElBQUksRUFBRSxTQUFTO1lBQ2Ysb0JBQW9CO1lBQ3BCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsT0FBTyxFQUFFLEtBQUs7WUFDZCxNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxJQUFJO1NBQ0M7S0FDbEIsQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
@@ -1,5 +0,0 @@
1
- import type { StaticConfig } from '../types.js';
2
- declare const _default: {
3
- static: StaticConfig;
4
- };
5
- export default _default;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
4
- static: {
5
- maxAge: 31536000,
6
- buffer: true,
7
- },
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnByb2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5wcm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsSUFBSTtLQUNHO0NBQ2xCLENBQUMifQ==
@@ -1 +0,0 @@
1
- import './types.js';
@@ -1,4 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require("./types.js");
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQkFBb0IifQ==
@@ -1,3 +0,0 @@
1
- {
2
- "type": "commonjs"
3
- }
@@ -1,60 +0,0 @@
1
- import type { Options as StaticCacheOptions } from '@eggjs/koa-static-cache';
2
- export interface StaticDirOptions extends Omit<StaticCacheOptions, 'dir'> {
3
- /**
4
- * static files store dir
5
- */
6
- dir: string;
7
- /**
8
- * static files prefix
9
- * Default to `'/public/'`
10
- */
11
- prefix: string;
12
- /**
13
- * cache max age in `seconds`
14
- * Default to `0` on development, `31536000` on production
15
- */
16
- maxAge: number;
17
- /**
18
- * dynamic load file which not cached on initialization
19
- * Default to `true
20
- */
21
- dynamic: boolean;
22
- /**
23
- * caches the assets on initialization or not,
24
- * always work together with `options.dynamic`
25
- * Default to `false`
26
- */
27
- preload: boolean;
28
- /**
29
- * buffer the file content or not
30
- * Default to `false` on development, `true` on production
31
- */
32
- buffer: boolean;
33
- /**
34
- * max files count in store
35
- * Default to `1000`
36
- */
37
- maxFiles: number;
38
- }
39
- /**
40
- * Static file serve
41
- * @member Config#static
42
- * @see https://github.com/koajs/static-cache
43
- */
44
- export interface StaticConfig extends Omit<StaticDirOptions, 'dir'> {
45
- /**
46
- * static files store dir
47
- * Default to `${baseDir}/app/public`
48
- */
49
- dir: string | Array<string | StaticDirOptions>;
50
- /**
51
- * static files store dirs
52
- * @deprecated use `dir` instead
53
- */
54
- dirs?: Array<string | StaticDirOptions>;
55
- }
56
- declare module '@eggjs/core' {
57
- interface EggAppConfig {
58
- static: StaticConfig;
59
- }
60
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,5 +0,0 @@
1
- import compose from 'koa-compose';
2
- import type { EggCore, Context } from '@eggjs/core';
3
- import type { StaticConfig } from '../../types.js';
4
- declare const _default: (options: StaticConfig, app: EggCore) => compose.ComposedMiddleware<Context>;
5
- export default _default;
@@ -1,52 +0,0 @@
1
- import assert from 'node:assert';
2
- import { mkdirSync, existsSync } from 'node:fs';
3
- import range from 'koa-range';
4
- import compose from 'koa-compose';
5
- import { staticCache } from '@eggjs/koa-static-cache';
6
- import { LRU } from 'ylru';
7
- import { isObject } from 'is-type-of';
8
- export default (options, app) => {
9
- const dirs = (options.dirs ?? []).concat(options.dir);
10
- const prefixes = [];
11
- function rangeMiddleware(ctx, next) {
12
- // if match static file, and use range middleware.
13
- const isMatch = prefixes.some(p => ctx.path.startsWith(p));
14
- if (isMatch) {
15
- return range(ctx, next);
16
- }
17
- return next();
18
- }
19
- const middlewares = [rangeMiddleware];
20
- for (const dirObj of dirs) {
21
- assert(isObject(dirObj) || typeof dirObj === 'string', '`config.static.dir` must be `string | Array<string|object>`');
22
- let newOptions;
23
- if (typeof dirObj === 'string') {
24
- // copy origin options to new options ensure the safety of objects
25
- newOptions = {
26
- ...options,
27
- dir: dirObj,
28
- };
29
- }
30
- else {
31
- assert(typeof dirObj.dir === 'string', '`config.static.dirs` should contains `[].dir` property when object style');
32
- newOptions = {
33
- ...options,
34
- ...dirObj,
35
- };
36
- }
37
- if (newOptions.dynamic && !newOptions.files) {
38
- newOptions.files = new LRU(newOptions.maxFiles);
39
- }
40
- if (newOptions.prefix) {
41
- prefixes.push(newOptions.prefix);
42
- }
43
- // ensure directory exists
44
- if (!existsSync(newOptions.dir)) {
45
- mkdirSync(newOptions.dir, { recursive: true });
46
- }
47
- middlewares.push(staticCache(newOptions));
48
- app.coreLogger.info('[@eggjs/static] starting static serve %s -> %s', newOptions.prefix, newOptions.dir);
49
- }
50
- return compose(middlewares);
51
- };
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9taWRkbGV3YXJlL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sV0FBVyxDQUFDO0FBQzlCLE9BQU8sT0FBTyxNQUFNLGFBQWEsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR3RDLGVBQWUsQ0FBQyxPQUFxQixFQUFFLEdBQVksRUFBRSxFQUFFO0lBQ3JELE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRELE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUU5QixTQUFTLGVBQWUsQ0FBQyxHQUFZLEVBQUUsSUFBVTtRQUMvQyxrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sS0FBSyxDQUFDLEdBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBRSxlQUFlLENBQUUsQ0FBQztJQUV4QyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUNuRCw2REFBNkQsQ0FBQyxDQUFDO1FBRWpFLElBQUksVUFBNEIsQ0FBQztRQUNqQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLGtFQUFrRTtZQUNsRSxVQUFVLEdBQUc7Z0JBQ1gsR0FBRyxPQUFPO2dCQUNWLEdBQUcsRUFBRSxNQUFNO2FBQ1osQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQ25DLDBFQUEwRSxDQUFDLENBQUM7WUFDOUUsVUFBVSxHQUFHO2dCQUNYLEdBQUcsT0FBTztnQkFDVixHQUFHLE1BQU07YUFDVixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekMsR0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQzNFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUMifQ==
package/dist/esm/app.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { ILifecycleBoot, EggCore } from '@eggjs/core';
2
- export default class AppBoot implements ILifecycleBoot {
3
- private readonly app;
4
- constructor(app: EggCore);
5
- configWillLoad(): Promise<void>;
6
- }
package/dist/esm/app.js DELETED
@@ -1,18 +0,0 @@
1
- export default class AppBoot {
2
- app;
3
- constructor(app) {
4
- this.app = app;
5
- }
6
- async configWillLoad() {
7
- const app = this.app;
8
- // make sure static middleware is before bodyParser
9
- const index = app.config.coreMiddleware.indexOf('bodyParser');
10
- if (index === -1) {
11
- app.config.coreMiddleware.push('static');
12
- }
13
- else {
14
- app.config.coreMiddleware.splice(index, 0, 'static');
15
- }
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDVCxHQUFHLENBQUM7SUFDckIsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxLQUFLLENBQUMsY0FBYztRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLG1EQUFtRDtRQUNuRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -1,6 +0,0 @@
1
- import type { EggAppInfo } from '@eggjs/core';
2
- import type { StaticConfig } from '../types.js';
3
- declare const _default: (appInfo: EggAppInfo) => {
4
- static: StaticConfig;
5
- };
6
- export default _default;
@@ -1,17 +0,0 @@
1
- import path from 'node:path';
2
- export default (appInfo) => {
3
- return {
4
- static: {
5
- prefix: '/public/',
6
- dir: path.join(appInfo.baseDir, 'app/public'),
7
- // dirs: [ dir1, dir2 ] or [ dir1, { prefix: '/static2', dir: dir2 } ],
8
- dirs: undefined,
9
- // support lazy load
10
- dynamic: true,
11
- preload: false,
12
- buffer: false,
13
- maxFiles: 1000,
14
- },
15
- };
16
- };
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUk3QixlQUFlLENBQUMsT0FBbUIsRUFBRSxFQUFFO0lBQ3JDLE9BQU87UUFDTCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUsVUFBVTtZQUNsQixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztZQUM3Qyx1RUFBdUU7WUFDdkUsSUFBSSxFQUFFLFNBQVM7WUFDZixvQkFBb0I7WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLElBQUk7U0FDQztLQUNsQixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -1,5 +0,0 @@
1
- import type { StaticConfig } from '../types.js';
2
- declare const _default: {
3
- static: StaticConfig;
4
- };
5
- export default _default;
@@ -1,7 +0,0 @@
1
- export default {
2
- static: {
3
- maxAge: 31536000,
4
- buffer: true,
5
- },
6
- };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnByb2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5wcm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGVBQWU7SUFDYixNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsUUFBUTtRQUNoQixNQUFNLEVBQUUsSUFBSTtLQUNHO0NBQ2xCLENBQUMifQ==
@@ -1 +0,0 @@
1
- import './types.js';
package/dist/esm/index.js DELETED
@@ -1,2 +0,0 @@
1
- import './types.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }
@@ -1,60 +0,0 @@
1
- import type { Options as StaticCacheOptions } from '@eggjs/koa-static-cache';
2
- export interface StaticDirOptions extends Omit<StaticCacheOptions, 'dir'> {
3
- /**
4
- * static files store dir
5
- */
6
- dir: string;
7
- /**
8
- * static files prefix
9
- * Default to `'/public/'`
10
- */
11
- prefix: string;
12
- /**
13
- * cache max age in `seconds`
14
- * Default to `0` on development, `31536000` on production
15
- */
16
- maxAge: number;
17
- /**
18
- * dynamic load file which not cached on initialization
19
- * Default to `true
20
- */
21
- dynamic: boolean;
22
- /**
23
- * caches the assets on initialization or not,
24
- * always work together with `options.dynamic`
25
- * Default to `false`
26
- */
27
- preload: boolean;
28
- /**
29
- * buffer the file content or not
30
- * Default to `false` on development, `true` on production
31
- */
32
- buffer: boolean;
33
- /**
34
- * max files count in store
35
- * Default to `1000`
36
- */
37
- maxFiles: number;
38
- }
39
- /**
40
- * Static file serve
41
- * @member Config#static
42
- * @see https://github.com/koajs/static-cache
43
- */
44
- export interface StaticConfig extends Omit<StaticDirOptions, 'dir'> {
45
- /**
46
- * static files store dir
47
- * Default to `${baseDir}/app/public`
48
- */
49
- dir: string | Array<string | StaticDirOptions>;
50
- /**
51
- * static files store dirs
52
- * @deprecated use `dir` instead
53
- */
54
- dirs?: Array<string | StaticDirOptions>;
55
- }
56
- declare module '@eggjs/core' {
57
- interface EggAppConfig {
58
- static: StaticConfig;
59
- }
60
- }
package/dist/esm/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
package/dist/package.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "name": "@eggjs/static",
3
- "version": "3.0.0"
4
- }
@@ -1,66 +0,0 @@
1
- import assert from 'node:assert';
2
- import { mkdirSync, existsSync } from 'node:fs';
3
- import range from 'koa-range';
4
- import compose from 'koa-compose';
5
- import type { EggCore, Context, Next } from '@eggjs/core';
6
- import { staticCache } from '@eggjs/koa-static-cache';
7
- import { LRU } from 'ylru';
8
- import { isObject } from 'is-type-of';
9
- import type { StaticConfig, StaticDirOptions } from '../../types.js';
10
-
11
- export default (options: StaticConfig, app: EggCore) => {
12
- const dirs = (options.dirs ?? []).concat(options.dir);
13
-
14
- const prefixes: string[] = [];
15
-
16
- function rangeMiddleware(ctx: Context, next: Next) {
17
- // if match static file, and use range middleware.
18
- const isMatch = prefixes.some(p => ctx.path.startsWith(p));
19
- if (isMatch) {
20
- return range(ctx as any, next);
21
- }
22
- return next();
23
- }
24
-
25
- const middlewares = [ rangeMiddleware ];
26
-
27
- for (const dirObj of dirs) {
28
- assert(isObject(dirObj) || typeof dirObj === 'string',
29
- '`config.static.dir` must be `string | Array<string|object>`');
30
-
31
- let newOptions: StaticDirOptions;
32
- if (typeof dirObj === 'string') {
33
- // copy origin options to new options ensure the safety of objects
34
- newOptions = {
35
- ...options,
36
- dir: dirObj,
37
- };
38
- } else {
39
- assert(typeof dirObj.dir === 'string',
40
- '`config.static.dirs` should contains `[].dir` property when object style');
41
- newOptions = {
42
- ...options,
43
- ...dirObj,
44
- };
45
- }
46
-
47
- if (newOptions.dynamic && !newOptions.files) {
48
- newOptions.files = new LRU(newOptions.maxFiles);
49
- }
50
-
51
- if (newOptions.prefix) {
52
- prefixes.push(newOptions.prefix);
53
- }
54
-
55
- // ensure directory exists
56
- if (!existsSync(newOptions.dir)) {
57
- mkdirSync(newOptions.dir, { recursive: true });
58
- }
59
- middlewares.push(staticCache(newOptions));
60
-
61
- (app as any).coreLogger.info('[@eggjs/static] starting static serve %s -> %s',
62
- newOptions.prefix, newOptions.dir);
63
- }
64
-
65
- return compose(middlewares);
66
- };
package/src/app.ts DELETED
@@ -1,18 +0,0 @@
1
- import type { ILifecycleBoot, EggCore } from '@eggjs/core';
2
-
3
- export default class AppBoot implements ILifecycleBoot {
4
- private readonly app;
5
- constructor(app: EggCore) {
6
- this.app = app;
7
- }
8
- async configWillLoad() {
9
- const app = this.app;
10
- // make sure static middleware is before bodyParser
11
- const index = app.config.coreMiddleware.indexOf('bodyParser');
12
- if (index === -1) {
13
- app.config.coreMiddleware.push('static');
14
- } else {
15
- app.config.coreMiddleware.splice(index, 0, 'static');
16
- }
17
- }
18
- }
@@ -1,19 +0,0 @@
1
- import path from 'node:path';
2
- import type { EggAppInfo } from '@eggjs/core';
3
- import type { StaticConfig } from '../types.js';
4
-
5
- export default (appInfo: EggAppInfo) => {
6
- return {
7
- static: {
8
- prefix: '/public/',
9
- dir: path.join(appInfo.baseDir, 'app/public'),
10
- // dirs: [ dir1, dir2 ] or [ dir1, { prefix: '/static2', dir: dir2 } ],
11
- dirs: undefined,
12
- // support lazy load
13
- dynamic: true,
14
- preload: false,
15
- buffer: false,
16
- maxFiles: 1000,
17
- } as StaticConfig,
18
- };
19
- };
@@ -1,8 +0,0 @@
1
- import type { StaticConfig } from '../types.js';
2
-
3
- export default {
4
- static: {
5
- maxAge: 31536000,
6
- buffer: true,
7
- } as StaticConfig,
8
- };
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- import './types.js';
@@ -1,4 +0,0 @@
1
- // make sure to import egg typings and let typescript know about it
2
- // @see https://github.com/whxaxes/blog/issues/11
3
- // and https://www.typescriptlang.org/docs/handbook/declaration-merging.html
4
- import 'egg';