midway-public-file 1.0.0

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.
@@ -0,0 +1,4 @@
1
+ export declare const customKey: {
2
+ a: number;
3
+ b: string;
4
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.customKey = void 0;
4
+ exports.customKey = {
5
+ a: 1,
6
+ b: 'hello',
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLENBQUMsRUFBRSxDQUFDO0lBQ0osQ0FBQyxFQUFFLE9BQU87Q0FDWCxDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ import { IMidwayContainer, MidwayApplicationManager } from '@midwayjs/core';
2
+ export declare class StaticFileConfiguration {
3
+ applicationManager: MidwayApplicationManager;
4
+ onConfigLoad(): Promise<{
5
+ staticFile: {
6
+ buffer: boolean;
7
+ };
8
+ }>;
9
+ onReady(container: IMidwayContainer): Promise<void>;
10
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.StaticFileConfiguration = void 0;
46
+ const core_1 = require("@midwayjs/core");
47
+ const DefaultConfig = __importStar(require("./config/config.default"));
48
+ const static_middleware_1 = require("./middleware/static.middleware");
49
+ let StaticFileConfiguration = class StaticFileConfiguration {
50
+ async onConfigLoad() {
51
+ if (this.applicationManager.getApplication('faas')) {
52
+ return {
53
+ staticFile: {
54
+ buffer: true,
55
+ },
56
+ };
57
+ }
58
+ }
59
+ async onReady(container) {
60
+ this.applicationManager
61
+ .getApplications(['koa', 'faas', 'egg'])
62
+ .forEach(app => {
63
+ if (container.hasNamespace('cross-domain')) {
64
+ app.getMiddleware().insertAfter(static_middleware_1.StaticMiddleware, 'cors');
65
+ }
66
+ else {
67
+ app.getMiddleware().insertFirst(static_middleware_1.StaticMiddleware);
68
+ }
69
+ });
70
+ }
71
+ };
72
+ exports.StaticFileConfiguration = StaticFileConfiguration;
73
+ __decorate([
74
+ (0, core_1.Inject)(),
75
+ __metadata("design:type", core_1.MidwayApplicationManager)
76
+ ], StaticFileConfiguration.prototype, "applicationManager", void 0);
77
+ exports.StaticFileConfiguration = StaticFileConfiguration = __decorate([
78
+ (0, core_1.Configuration)({
79
+ namespace: 'static-file',
80
+ importConfigs: [
81
+ {
82
+ default: DefaultConfig,
83
+ },
84
+ ],
85
+ })
86
+ ], StaticFileConfiguration);
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUFtRztBQUNuRyx1RUFBeUQ7QUFDekQsc0VBQWtFO0FBVTNELElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQXVCO0lBSWxDLEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU87Z0JBQ0wsVUFBVSxFQUFFO29CQUNWLE1BQU0sRUFBRSxJQUFJO2lCQUNiO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUEyQjtRQUN2QyxJQUFJLENBQUMsa0JBQWtCO2FBQ3BCLGVBQWUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxXQUFXLENBQUMsb0NBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxXQUFXLENBQUMsb0NBQWdCLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YsQ0FBQTtBQXpCWSwwREFBdUI7QUFFbEM7SUFEQyxJQUFBLGFBQU0sR0FBRTs4QkFDVywrQkFBd0I7bUVBQUM7a0NBRmxDLHVCQUF1QjtJQVJuQyxJQUFBLG9CQUFhLEVBQUM7UUFDYixTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhLEVBQUU7WUFDYjtnQkFDRSxPQUFPLEVBQUUsYUFBYTthQUN2QjtTQUNGO0tBQ0YsQ0FBQztHQUNXLHVCQUF1QixDQXlCbkMifQ==
@@ -0,0 +1,7 @@
1
+ import { MidwayError } from '@midwayjs/core';
2
+ export declare const StaticFileErrorEnum: {
3
+ readonly DIRECTORY_NOT_EXISTS: "STATIC_FILE_10000";
4
+ };
5
+ export declare class DirectoryNotFoundError extends MidwayError {
6
+ constructor(p: string);
7
+ }
package/dist/error.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectoryNotFoundError = exports.StaticFileErrorEnum = void 0;
4
+ const core_1 = require("@midwayjs/core");
5
+ exports.StaticFileErrorEnum = (0, core_1.registerErrorCode)('static_file', {
6
+ DIRECTORY_NOT_EXISTS: 10000,
7
+ });
8
+ class DirectoryNotFoundError extends core_1.MidwayError {
9
+ constructor(p) {
10
+ super(`Path ${p} not exist, please check it.`, exports.StaticFileErrorEnum.DIRECTORY_NOT_EXISTS);
11
+ }
12
+ }
13
+ exports.DirectoryNotFoundError = DirectoryNotFoundError;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQWdFO0FBRW5ELFFBQUEsbUJBQW1CLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxhQUFhLEVBQUU7SUFDbEUsb0JBQW9CLEVBQUUsS0FBSztDQUNuQixDQUFDLENBQUM7QUFFWixNQUFhLHNCQUF1QixTQUFRLGtCQUFXO0lBQ3JELFlBQVksQ0FBUztRQUNuQixLQUFLLENBQ0gsUUFBUSxDQUFDLDhCQUE4QixFQUN2QywyQkFBbUIsQ0FBQyxvQkFBb0IsQ0FDekMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQVBELHdEQU9DIn0=
@@ -0,0 +1,4 @@
1
+ export { StaticFileConfiguration as Configuration } from './configuration';
2
+ export * from './middleware/static.middleware';
3
+ export * from './interface';
4
+ export * from './error';
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Configuration = void 0;
18
+ var configuration_1 = require("./configuration");
19
+ Object.defineProperty(exports, "Configuration", { enumerable: true, get: function () { return configuration_1.StaticFileConfiguration; } });
20
+ __exportStar(require("./middleware/static.middleware"), exports);
21
+ __exportStar(require("./interface"), exports);
22
+ __exportStar(require("./error"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBMkU7QUFBbEUsOEdBQUEsdUJBQXVCLE9BQWlCO0FBQ2pELGlFQUErQztBQUMvQyw4Q0FBNEI7QUFDNUIsMENBQXdCIn0=
@@ -0,0 +1,53 @@
1
+ export interface StaticFileOption {
2
+ /**
3
+ * url prefix
4
+ */
5
+ prefix?: string;
6
+ /**
7
+ * the directory you wish to serve
8
+ */
9
+ dir?: string;
10
+ /**
11
+ * dynamic load file which not cached on initialization.
12
+ */
13
+ dynamic?: boolean;
14
+ /**
15
+ * caches the assets on initialization or not, default to true. always work together with options.dynamic.
16
+ */
17
+ preload?: boolean;
18
+ /**
19
+ * store the files in memory instead of streaming from the filesystem on each request.
20
+ */
21
+ buffer?: boolean;
22
+ /**
23
+ * cache control max age for the files, 0 by default.
24
+ */
25
+ maxFiles?: number;
26
+ /**
27
+ * cache control max age for the files, 0 by default.
28
+ */
29
+ maxAge?: number;
30
+ /**
31
+ * optional cache control header. Overrides options.maxAge.
32
+ */
33
+ cacheControl?: string;
34
+ /**
35
+ * when request's accept-encoding include gzip, files will compressed by gzip.
36
+ */
37
+ gzip?: boolean;
38
+ /**
39
+ * object map of aliases
40
+ */
41
+ alias?: {
42
+ [aliasName: string]: string;
43
+ };
44
+ /**
45
+ * filter files at init dir, for example - skip non build (source) files. If array set - allow only listed files
46
+ */
47
+ filter?: ((...args: any[]) => any) | string[];
48
+ }
49
+ export interface StaticFileOptions extends Omit<StaticFileOption, 'prefix' | 'dir'> {
50
+ dirs?: {
51
+ [pathName: string]: StaticFileOption;
52
+ };
53
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,29 @@
1
+ export interface CachedFile {
2
+ path: string;
3
+ cacheControl?: string;
4
+ maxAge: number;
5
+ type: string;
6
+ mime: string;
7
+ mtime: Date;
8
+ length: number;
9
+ md5: string | null;
10
+ buffer?: Buffer | null;
11
+ zipBuffer?: Buffer | null;
12
+ }
13
+ export interface StaticCacheOptions {
14
+ prefix?: string;
15
+ dir?: string;
16
+ gzip?: boolean;
17
+ filter?: string[] | ((file: string) => boolean);
18
+ preload?: boolean;
19
+ dynamic?: boolean;
20
+ buffer?: boolean;
21
+ maxAge?: number;
22
+ maxFiles?: number;
23
+ cacheControl?: string;
24
+ alias?: Record<string, string>;
25
+ files?: Map<string, CachedFile> | Record<string, CachedFile>;
26
+ usePrecompiledGzip?: boolean;
27
+ [key: string]: unknown;
28
+ }
29
+ export default function staticCache(dir?: string | StaticCacheOptions, options?: StaticCacheOptions, files?: Map<string, CachedFile> | Record<string, CachedFile>): (ctx: any, next: () => Promise<any>) => Promise<any>;
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
36
+ if (kind === "m") throw new TypeError("Private method is not writable");
37
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
38
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
39
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
40
+ };
41
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
42
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
43
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
44
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
45
+ };
46
+ var _FileManager_store, _FileManager_map;
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.default = staticCache;
49
+ const crypto = __importStar(require("node:crypto"));
50
+ const node_fs_1 = require("node:fs");
51
+ const promises_1 = require("node:fs/promises");
52
+ const node_zlib_1 = require("node:zlib");
53
+ const node_util_1 = require("node:util");
54
+ const path = __importStar(require("node:path"));
55
+ const gzipAsync = (0, node_util_1.promisify)(node_zlib_1.gzip);
56
+ // ---------------------------------------------------------------------------
57
+ // Minimal MIME-type lookup (replaces `mime-types`)
58
+ // ---------------------------------------------------------------------------
59
+ const MIME_MAP = {
60
+ '.html': 'text/html',
61
+ '.css': 'text/css',
62
+ '.js': 'application/javascript',
63
+ '.mjs': 'application/javascript',
64
+ '.cjs': 'application/javascript',
65
+ '.json': 'application/json',
66
+ '.png': 'image/png',
67
+ '.jpg': 'image/jpeg',
68
+ '.jpeg': 'image/jpeg',
69
+ '.gif': 'image/gif',
70
+ '.svg': 'image/svg+xml',
71
+ '.ico': 'image/x-icon',
72
+ '.woff': 'font/woff',
73
+ '.woff2': 'font/woff2',
74
+ '.ttf': 'font/ttf',
75
+ '.otf': 'font/otf',
76
+ '.eot': 'application/vnd.ms-fontobject',
77
+ '.pdf': 'application/pdf',
78
+ '.zip': 'application/zip',
79
+ '.gz': 'application/gzip',
80
+ '.txt': 'text/plain',
81
+ '.xml': 'application/xml',
82
+ '.webp': 'image/webp',
83
+ '.avif': 'image/avif',
84
+ '.map': 'application/json',
85
+ '.wasm': 'application/wasm',
86
+ '.mp4': 'video/mp4',
87
+ '.webm': 'video/webm',
88
+ '.mp3': 'audio/mpeg',
89
+ '.wav': 'audio/wav',
90
+ '.aac': 'audio/aac',
91
+ '.ts': 'video/mp2t',
92
+ '.m3u8': 'application/vnd.apple.mpegurl',
93
+ };
94
+ function lookupMime(filename) {
95
+ const ext = path.extname(filename).toLowerCase();
96
+ return MIME_MAP[ext] ?? 'application/octet-stream';
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Minimal compressible check (replaces `compressible`)
100
+ // ---------------------------------------------------------------------------
101
+ const INCOMPRESSIBLE_MIME = new Set([
102
+ 'image/png',
103
+ 'image/jpeg',
104
+ 'image/gif',
105
+ 'image/webp',
106
+ 'image/avif',
107
+ 'image/x-icon',
108
+ 'video/mp4',
109
+ 'video/webm',
110
+ 'video/mp2t',
111
+ 'audio/mpeg',
112
+ 'audio/wav',
113
+ 'audio/aac',
114
+ 'application/zip',
115
+ 'application/gzip',
116
+ 'application/pdf',
117
+ 'application/wasm',
118
+ 'application/vnd.ms-fontobject',
119
+ 'font/woff',
120
+ 'font/woff2',
121
+ 'font/ttf',
122
+ 'font/otf',
123
+ ]);
124
+ function isCompressible(mimeType) {
125
+ return !INCOMPRESSIBLE_MIME.has(mimeType);
126
+ }
127
+ // ---------------------------------------------------------------------------
128
+ // Minimal debug logger (replaces `debug` package)
129
+ // ---------------------------------------------------------------------------
130
+ function createDebug(namespace) {
131
+ const debugEnv = process.env.DEBUG ?? '';
132
+ const namespaces = debugEnv.split(',').map(s => s.trim());
133
+ const enabled = namespaces.some(ns => {
134
+ if (ns.endsWith('*')) {
135
+ return namespace.startsWith(ns.slice(0, -1));
136
+ }
137
+ return ns === namespace;
138
+ });
139
+ if (!enabled)
140
+ return () => { };
141
+ return (msg) => {
142
+ process.stderr.write(`${namespace} ${new Date().toISOString()} ${msg}\n`);
143
+ };
144
+ }
145
+ const debug = createDebug('koa-static-cache');
146
+ // ---------------------------------------------------------------------------
147
+ // FileManager
148
+ // ---------------------------------------------------------------------------
149
+ class FileManager {
150
+ constructor(store) {
151
+ _FileManager_store.set(this, void 0);
152
+ _FileManager_map.set(this, void 0);
153
+ if (store instanceof Map) {
154
+ __classPrivateFieldSet(this, _FileManager_store, store, "f");
155
+ __classPrivateFieldSet(this, _FileManager_map, {}, "f");
156
+ }
157
+ else {
158
+ __classPrivateFieldSet(this, _FileManager_map, store ?? Object.create(null), "f");
159
+ }
160
+ }
161
+ get(key) {
162
+ return __classPrivateFieldGet(this, _FileManager_store, "f") ? __classPrivateFieldGet(this, _FileManager_store, "f").get(key) : __classPrivateFieldGet(this, _FileManager_map, "f")[key];
163
+ }
164
+ set(key, value) {
165
+ if (__classPrivateFieldGet(this, _FileManager_store, "f")) {
166
+ __classPrivateFieldGet(this, _FileManager_store, "f").set(key, value);
167
+ }
168
+ else {
169
+ __classPrivateFieldGet(this, _FileManager_map, "f")[key] = value;
170
+ }
171
+ }
172
+ }
173
+ _FileManager_store = new WeakMap(), _FileManager_map = new WeakMap();
174
+ // ---------------------------------------------------------------------------
175
+ // Helpers
176
+ // ---------------------------------------------------------------------------
177
+ function safeDecodeURIComponent(text) {
178
+ try {
179
+ return decodeURIComponent(text);
180
+ }
181
+ catch {
182
+ return text;
183
+ }
184
+ }
185
+ function loadFile(name, dir, options, files) {
186
+ const prefix = options.prefix ?? '/';
187
+ const pathname = path.normalize(path.join(prefix, name));
188
+ if (!files.get(pathname)) {
189
+ files.set(pathname, {});
190
+ }
191
+ const obj = files.get(pathname);
192
+ const filename = (obj.path = path.join(dir, name));
193
+ const stats = (0, node_fs_1.statSync)(filename);
194
+ const buffer = (0, node_fs_1.readFileSync)(filename);
195
+ obj.cacheControl = options.cacheControl;
196
+ obj.maxAge = (typeof obj.maxAge === 'number' ? obj.maxAge : options.maxAge) ?? 0;
197
+ obj.type = lookupMime(pathname);
198
+ obj.mime = obj.type;
199
+ obj.mtime = stats.mtime;
200
+ obj.length = stats.size;
201
+ obj.md5 = crypto.createHash('md5').update(buffer).digest('base64');
202
+ debug(`file: ${JSON.stringify(obj, null, 2)}`);
203
+ if (options.buffer) {
204
+ obj.buffer = buffer;
205
+ }
206
+ return obj;
207
+ }
208
+ // ---------------------------------------------------------------------------
209
+ // Main middleware factory
210
+ // ---------------------------------------------------------------------------
211
+ function staticCache(dir, options, files) {
212
+ // Allow calling with a single options object
213
+ if (typeof dir === 'object' && dir !== null) {
214
+ files = options;
215
+ options = dir;
216
+ dir = undefined;
217
+ }
218
+ options = { ...(options ?? {}) };
219
+ options.prefix = (options.prefix ?? '').replace(/\/*$/, '/');
220
+ const resolvedFiles = new FileManager(files ?? options.files);
221
+ const resolvedDir = path.normalize(dir ?? options.dir ?? process.cwd());
222
+ const enableGzip = !!options.gzip;
223
+ const filePrefix = path.normalize(options.prefix.replace(/^\//, ''));
224
+ // -- filter --
225
+ let fileFilter = () => true;
226
+ if (Array.isArray(options.filter)) {
227
+ const allowed = options.filter;
228
+ fileFilter = (file) => allowed.includes(file);
229
+ }
230
+ else if (typeof options.filter === 'function') {
231
+ fileFilter = options.filter;
232
+ }
233
+ // -- preload (Node.js >= 20: readdirSync with recursive: true) --
234
+ if (options.preload !== false) {
235
+ const entries = (0, node_fs_1.readdirSync)(resolvedDir, {
236
+ recursive: true,
237
+ withFileTypes: true,
238
+ });
239
+ for (const entry of entries) {
240
+ if (entry.isFile() && fileFilter(entry.name)) {
241
+ loadFile(entry.name, resolvedDir, options, resolvedFiles);
242
+ }
243
+ }
244
+ }
245
+ // -- Middleware --
246
+ return async (ctx, next) => {
247
+ // Only accept HEAD and GET
248
+ if (ctx.method !== 'HEAD' && ctx.method !== 'GET') {
249
+ return await next();
250
+ }
251
+ // Check prefix
252
+ if (!ctx.path.startsWith(options.prefix)) {
253
+ return await next();
254
+ }
255
+ // Decode + normalize
256
+ let filename = path.normalize(safeDecodeURIComponent(ctx.path));
257
+ // Alias
258
+ if (options.alias?.[filename]) {
259
+ filename = options.alias[filename];
260
+ }
261
+ let file = resolvedFiles.get(filename);
262
+ // -- Dynamic loading --
263
+ if (!file) {
264
+ if (!options.dynamic)
265
+ return await next();
266
+ if (path.basename(filename)[0] === '.')
267
+ return await next();
268
+ if (filename.charAt(0) === path.sep)
269
+ filename = filename.slice(1);
270
+ // Trim prefix
271
+ if (options.prefix !== '/') {
272
+ if (!filename.startsWith(filePrefix))
273
+ return await next();
274
+ filename = filename.slice(filePrefix.length);
275
+ }
276
+ const fullpath = path.join(resolvedDir, filename);
277
+ // Security: file must be under resolvedDir
278
+ if (!fullpath.startsWith(resolvedDir)) {
279
+ return await next();
280
+ }
281
+ let stats;
282
+ try {
283
+ stats = await (0, promises_1.stat)(fullpath);
284
+ }
285
+ catch {
286
+ return await next();
287
+ }
288
+ if (!stats.isFile())
289
+ return await next();
290
+ file = loadFile(filename, resolvedDir, options, resolvedFiles);
291
+ }
292
+ // -- Response handling --
293
+ ctx.status = 200;
294
+ if (enableGzip) {
295
+ ctx.vary('Accept-Encoding');
296
+ }
297
+ // Update file info if not buffered
298
+ if (!file.buffer) {
299
+ const stats = await (0, promises_1.stat)(file.path);
300
+ if (stats.mtime.getTime() !== file.mtime.getTime()) {
301
+ file.mtime = stats.mtime;
302
+ file.md5 = null;
303
+ file.length = stats.size;
304
+ }
305
+ }
306
+ ctx.response.lastModified = file.mtime;
307
+ if (file.md5)
308
+ ctx.response.etag = file.md5;
309
+ // Fresh / 304
310
+ if (ctx.fresh) {
311
+ ctx.status = 304;
312
+ return;
313
+ }
314
+ ctx.type = file.type;
315
+ ctx.length = file.zipBuffer ? file.zipBuffer.length : file.length;
316
+ ctx.set('cache-control', file.cacheControl ?? `public, max-age=${file.maxAge}`);
317
+ if (file.md5)
318
+ ctx.set('content-md5', file.md5);
319
+ if (ctx.method === 'HEAD')
320
+ return;
321
+ const acceptGzip = ctx.acceptsEncodings('gzip') === 'gzip';
322
+ // Already has pre-computed zip buffer
323
+ if (file.zipBuffer) {
324
+ if (acceptGzip) {
325
+ ctx.set('content-encoding', 'gzip');
326
+ ctx.body = file.zipBuffer;
327
+ }
328
+ else {
329
+ ctx.body = file.buffer;
330
+ }
331
+ return;
332
+ }
333
+ const shouldGzip = enableGzip && file.length > 1024 && acceptGzip && isCompressible(file.type);
334
+ // Buffered file – gzip in memory
335
+ if (file.buffer) {
336
+ if (shouldGzip) {
337
+ const gzFile = resolvedFiles.get(filename + '.gz');
338
+ if (options.usePrecompiledGzip && gzFile?.buffer) {
339
+ file.zipBuffer = gzFile.buffer;
340
+ }
341
+ else {
342
+ file.zipBuffer = await gzipAsync(file.buffer);
343
+ }
344
+ ctx.set('content-encoding', 'gzip');
345
+ ctx.body = file.zipBuffer;
346
+ }
347
+ else {
348
+ ctx.body = file.buffer;
349
+ }
350
+ return;
351
+ }
352
+ // Stream file from disk
353
+ const stream = (0, node_fs_1.createReadStream)(file.path);
354
+ // Compute MD5 hash on-the-fly
355
+ if (!file.md5) {
356
+ const hash = crypto.createHash('md5');
357
+ stream.on('data', (chunk) => hash.update(chunk));
358
+ stream.on('end', () => {
359
+ file.md5 = hash.digest('base64');
360
+ });
361
+ }
362
+ ctx.body = stream;
363
+ if (shouldGzip) {
364
+ ctx.remove('content-length');
365
+ ctx.set('content-encoding', 'gzip');
366
+ ctx.body = stream.pipe((0, node_zlib_1.createGzip)());
367
+ }
368
+ };
369
+ }
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9zdGF0aWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE4TkEsOEJBeUxDO0FBdlpELG9EQUFzQztBQUN0QyxxQ0FBZ0Y7QUFDaEYsK0NBQXdDO0FBQ3hDLHlDQUE2RDtBQUM3RCx5Q0FBc0M7QUFDdEMsZ0RBQWtDO0FBRWxDLE1BQU0sU0FBUyxHQUFHLElBQUEscUJBQVMsRUFBQyxnQkFBWSxDQUFDLENBQUM7QUFvQzFDLDhFQUE4RTtBQUM5RSxtREFBbUQ7QUFDbkQsOEVBQThFO0FBRTlFLE1BQU0sUUFBUSxHQUEyQjtJQUN2QyxPQUFPLEVBQUUsV0FBVztJQUNwQixNQUFNLEVBQUUsVUFBVTtJQUNsQixLQUFLLEVBQUUsd0JBQXdCO0lBQy9CLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQyxPQUFPLEVBQUUsa0JBQWtCO0lBQzNCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxZQUFZO0lBQ3BCLE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLE9BQU8sRUFBRSxXQUFXO0lBQ3BCLFFBQVEsRUFBRSxZQUFZO0lBQ3RCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLE1BQU0sRUFBRSwrQkFBK0I7SUFDdkMsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixNQUFNLEVBQUUsaUJBQWlCO0lBQ3pCLEtBQUssRUFBRSxrQkFBa0I7SUFDekIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsTUFBTSxFQUFFLGlCQUFpQjtJQUN6QixPQUFPLEVBQUUsWUFBWTtJQUNyQixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUs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
@@ -0,0 +1,12 @@
1
+ import { MidwayEnvironmentService, MidwayMiddlewareService } from '@midwayjs/core';
2
+ export declare class StaticMiddleware {
3
+ private staticFileConfig;
4
+ middlewareService: MidwayMiddlewareService<any, any>;
5
+ environmentService: MidwayEnvironmentService;
6
+ logger: any;
7
+ resolve(app: any): Promise<{
8
+ (context: any, next?: any): Promise<any>;
9
+ _name: string;
10
+ }>;
11
+ static getName(): string;
12
+ }
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.StaticMiddleware = void 0;
49
+ const core_1 = require("@midwayjs/core");
50
+ const assert = __importStar(require("assert"));
51
+ const fs = __importStar(require("fs"));
52
+ const range = __importStar(require("koa-range"));
53
+ const ylru_1 = require("ylru");
54
+ const error_1 = require("../error");
55
+ const static_1 = __importDefault(require("../lib/static"));
56
+ let StaticMiddleware = class StaticMiddleware {
57
+ async resolve(app) {
58
+ const dirs = Object.values(this.staticFileConfig.dirs);
59
+ if (this.staticFileConfig.dir) {
60
+ dirs.push(this.staticFileConfig.dir);
61
+ }
62
+ const prefixs = [];
63
+ function rangeMiddleware(ctx, next) {
64
+ // if match static file, and use range middleware.
65
+ const isMatch = prefixs.some(p => ctx.path.startsWith(p));
66
+ if (isMatch) {
67
+ return range(ctx, next);
68
+ }
69
+ return next();
70
+ }
71
+ const middlewares = [rangeMiddleware];
72
+ for (const dirObj of dirs) {
73
+ assert.ok(core_1.Types.isObject(dirObj) || core_1.Types.isString(dirObj), '`config.static.dir` must be `string | Array<string|object>`.');
74
+ const newOptions = Object.assign({}, this.staticFileConfig, dirObj);
75
+ if (newOptions.dynamic && !newOptions.files) {
76
+ newOptions.files = new ylru_1.LRU(newOptions.maxFiles);
77
+ }
78
+ if (newOptions.prefix) {
79
+ prefixs.push(newOptions.prefix);
80
+ }
81
+ // ensure directory exists
82
+ if (this.environmentService.isPkgEnvironment()) {
83
+ if (!fs.existsSync(newOptions.dir)) {
84
+ throw new error_1.DirectoryNotFoundError(newOptions.dir);
85
+ }
86
+ }
87
+ else {
88
+ if (!(await core_1.FileUtils.exists(newOptions.dir))) {
89
+ throw new error_1.DirectoryNotFoundError(newOptions.dir);
90
+ }
91
+ }
92
+ this.logger.info('[midway:static] starting static serve %s -> %s', newOptions.prefix, newOptions.dir);
93
+ middlewares.push((0, static_1.default)(newOptions));
94
+ }
95
+ return await this.middlewareService.compose(middlewares, app, 'staticFile');
96
+ }
97
+ static getName() {
98
+ return 'staticFile';
99
+ }
100
+ };
101
+ exports.StaticMiddleware = StaticMiddleware;
102
+ __decorate([
103
+ (0, core_1.Config)('staticFile'),
104
+ __metadata("design:type", Object)
105
+ ], StaticMiddleware.prototype, "staticFileConfig", void 0);
106
+ __decorate([
107
+ (0, core_1.Inject)(),
108
+ __metadata("design:type", core_1.MidwayMiddlewareService)
109
+ ], StaticMiddleware.prototype, "middlewareService", void 0);
110
+ __decorate([
111
+ (0, core_1.Inject)(),
112
+ __metadata("design:type", core_1.MidwayEnvironmentService)
113
+ ], StaticMiddleware.prototype, "environmentService", void 0);
114
+ __decorate([
115
+ (0, core_1.Logger)('coreLogger'),
116
+ __metadata("design:type", Object)
117
+ ], StaticMiddleware.prototype, "logger", void 0);
118
+ exports.StaticMiddleware = StaticMiddleware = __decorate([
119
+ (0, core_1.Middleware)()
120
+ ], StaticMiddleware);
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLm1pZGRsZXdhcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9zdGF0aWMubWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FVd0I7QUFDeEIsK0NBQWlDO0FBQ2pDLHVDQUF5QjtBQUN6QixpREFBbUM7QUFDbkMsK0JBQTJCO0FBQzNCLG9DQUFrRDtBQUNsRCwyREFBd0M7QUFHakMsSUFBTSxnQkFBZ0IsR0FBdEIsTUFBTSxnQkFBZ0I7SUFhM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFPO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBWSxFQUFFLENBQUM7UUFFNUIsU0FBUyxlQUFlLENBQUMsR0FBTyxFQUFFLElBQWlCO1lBQ2pELGtEQUFrRDtZQUNsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0QyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxFQUFFLENBQ1AsWUFBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUNoRCw4REFBOEQsQ0FDL0QsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVwRSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzVDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUVELDBCQUEwQjtZQUMxQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNuQyxNQUFNLElBQUksOEJBQXNCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsTUFBTSxJQUFJLDhCQUFzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxnREFBZ0QsRUFDaEQsVUFBVSxDQUFDLE1BQU0sRUFDakIsVUFBVSxDQUFDLEdBQUcsQ0FDZixDQUFDO1lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFBLGdCQUFXLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0YsQ0FBQTtBQXpFWSw0Q0FBZ0I7QUFFbkI7SUFEUCxJQUFBLGFBQU0sRUFBQyxZQUFZLENBQUM7OzBEQUNRO0FBRzdCO0lBREMsSUFBQSxhQUFNLEdBQUU7OEJBQ1UsOEJBQXVCOzJEQUFXO0FBR3JEO0lBREMsSUFBQSxhQUFNLEdBQUU7OEJBQ1csK0JBQXdCOzREQUFDO0FBRzdDO0lBREMsSUFBQSxhQUFNLEVBQUMsWUFBWSxDQUFDOztnREFDVjsyQkFYQSxnQkFBZ0I7SUFENUIsSUFBQSxpQkFBVSxHQUFFO0dBQ0EsZ0JBQWdCLENBeUU1QiJ9
@@ -0,0 +1,3 @@
1
+ export declare class BookService {
2
+ getBookById(): Promise<string>;
3
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.BookService = void 0;
10
+ const core_1 = require("@midwayjs/core");
11
+ let BookService = class BookService {
12
+ async getBookById() {
13
+ return 'hello world';
14
+ }
15
+ };
16
+ exports.BookService = BookService;
17
+ exports.BookService = BookService = __decorate([
18
+ (0, core_1.Provide)()
19
+ ], BookService);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2UvYm9vay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHlDQUF5QztBQUdsQyxJQUFNLFdBQVcsR0FBakIsTUFBTSxXQUFXO0lBQ3RCLEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGLENBQUE7QUFKWSxrQ0FBVztzQkFBWCxXQUFXO0lBRHZCLElBQUEsY0FBTyxHQUFFO0dBQ0csV0FBVyxDQUl2QiJ9
package/index.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from './dist/index';
2
+
3
+ declare module '@midwayjs/core/dist/interface' {
4
+ interface MidwayConfig {
5
+ book?: PowerPartial<{
6
+ a: number;
7
+ b: string;
8
+ }>;
9
+ }
10
+ }
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "midway-public-file",
3
+ "version": "1.0.0",
4
+ "description": "This is a midway component sample",
5
+ "main": "dist/index.js",
6
+ "typings": "index.d.ts",
7
+ "scripts": {
8
+ "build": "mwtsc --cleanOutDir",
9
+ "test": "cross-env NODE_ENV=unittest jest",
10
+ "cov": "jest --coverage",
11
+ "lint": "mwts check",
12
+ "lint:fix": "mwts fix"
13
+ },
14
+ "keywords": [],
15
+ "author": "",
16
+ "files": [
17
+ "dist/**/*.js",
18
+ "dist/**/*.d.ts",
19
+ "index.d.ts"
20
+ ],
21
+ "license": "MIT",
22
+ "devDependencies": {
23
+ "@midwayjs/core": "^4.0.0",
24
+ "@midwayjs/logger": "^4.0.0",
25
+ "@midwayjs/mock": "^4.0.0",
26
+ "@types/jest": "^29.2.0",
27
+ "@types/koa-range": "^0.3.6",
28
+ "@types/node": "20",
29
+ "cross-env": "^7.0.3",
30
+ "jest": "^29.7.0",
31
+ "mwts": "^2.0.4",
32
+ "mwtsc": "^1.4.0",
33
+ "ts-jest": "^29.4.0",
34
+ "typescript": "^5.3.0"
35
+ },
36
+ "dependencies": {
37
+ "koa-range": "^0.3.0",
38
+ "ylru": "^2.0.0"
39
+ }
40
+ }