esa-pcg-cli 0.1.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.
Files changed (55) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/_inline-overrides.js +7 -0
  4. package/dist/_protocol/endpoints.d.ts +14 -0
  5. package/dist/_protocol/endpoints.js +24 -0
  6. package/dist/_protocol/index.d.ts +3 -0
  7. package/dist/_protocol/index.js +20 -0
  8. package/dist/_protocol/keys.d.ts +27 -0
  9. package/dist/_protocol/keys.js +36 -0
  10. package/dist/_protocol/types.d.ts +72 -0
  11. package/dist/_protocol/types.js +3 -0
  12. package/dist/adapters/adapter.interface.d.ts +8 -0
  13. package/dist/adapters/adapter.interface.js +3 -0
  14. package/dist/adapters/converters/passthrough.d.ts +16 -0
  15. package/dist/adapters/converters/passthrough.js +19 -0
  16. package/dist/adapters/index.d.ts +3 -0
  17. package/dist/adapters/index.js +8 -0
  18. package/dist/adapters/local-fs.adapter.d.ts +12 -0
  19. package/dist/adapters/local-fs.adapter.js +37 -0
  20. package/dist/adapters/oss.adapter.d.ts +13 -0
  21. package/dist/adapters/oss.adapter.js +26 -0
  22. package/dist/adapters/wrappers/node-server.d.ts +57 -0
  23. package/dist/adapters/wrappers/node-server.js +282 -0
  24. package/dist/bin/cli.d.ts +2 -0
  25. package/dist/bin/cli.js +21 -0
  26. package/dist/commands/build.d.ts +10 -0
  27. package/dist/commands/build.js +247 -0
  28. package/dist/commands/deploy.d.ts +11 -0
  29. package/dist/commands/deploy.js +116 -0
  30. package/dist/commands/purge.d.ts +15 -0
  31. package/dist/commands/purge.js +135 -0
  32. package/dist/commands/serve.d.ts +14 -0
  33. package/dist/commands/serve.js +162 -0
  34. package/dist/commands/upload-assets.d.ts +12 -0
  35. package/dist/commands/upload-assets.js +46 -0
  36. package/dist/commands/upload-cache.d.ts +13 -0
  37. package/dist/commands/upload-cache.js +70 -0
  38. package/dist/compile/compileCacheAssetsManifest.d.ts +1 -0
  39. package/dist/compile/compileCacheAssetsManifest.js +67 -0
  40. package/dist/config/default-open-next-config.d.ts +3 -0
  41. package/dist/config/default-open-next-config.js +30 -0
  42. package/dist/index.d.ts +13 -0
  43. package/dist/index.js +36 -0
  44. package/dist/overrides/incrementalCache/gateway.d.ts +32 -0
  45. package/dist/overrides/incrementalCache/gateway.js +160 -0
  46. package/dist/overrides/tagCache/gateway.d.ts +26 -0
  47. package/dist/overrides/tagCache/gateway.js +211 -0
  48. package/dist/runtime/gateway-auth.d.ts +51 -0
  49. package/dist/runtime/gateway-auth.js +121 -0
  50. package/dist/runtime/image-proxy.d.ts +16 -0
  51. package/dist/runtime/image-proxy.js +149 -0
  52. package/dist/util/fs.d.ts +3 -0
  53. package/dist/util/fs.js +39 -0
  54. package/package.json +47 -0
  55. package/runtime/pcg-image-loader.js +13 -0
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServeCommand = exports.runServe = void 0;
4
+ const path = require("path");
5
+ const fs = require("fs");
6
+ const http = require("http");
7
+ const child_process_1 = require("child_process");
8
+ const commander_1 = require("commander");
9
+ /**
10
+ * Poll the child server's /__health endpoint until it responds 200 or we time out.
11
+ * node-server wrapper exposes /__health unconditionally, so this is now load-bearing
12
+ * (the old impl always fell through to a setTimeout because platform-function had
13
+ * no /__health).
14
+ */
15
+ async function waitForReady(port, timeoutMs = 30000) {
16
+ const deadline = Date.now() + timeoutMs;
17
+ return new Promise((resolve, reject) => {
18
+ const probe = () => {
19
+ const req = http.request({
20
+ hostname: '127.0.0.1',
21
+ port,
22
+ path: '/__health',
23
+ method: 'GET',
24
+ timeout: 1000,
25
+ }, res => {
26
+ res.resume();
27
+ if (res.statusCode === 200) {
28
+ resolve();
29
+ return;
30
+ }
31
+ if (Date.now() > deadline) {
32
+ reject(new Error(`/__health returned ${res.statusCode}`));
33
+ return;
34
+ }
35
+ setTimeout(probe, 200);
36
+ });
37
+ req.on('error', () => {
38
+ if (Date.now() > deadline) {
39
+ reject(new Error('Timed out waiting for child server'));
40
+ return;
41
+ }
42
+ setTimeout(probe, 200);
43
+ });
44
+ req.end();
45
+ };
46
+ probe();
47
+ });
48
+ }
49
+ async function runServe(opts) {
50
+ var _a, _b;
51
+ const projectDir = path.resolve(opts.dir);
52
+ const assetsDir = path.join(projectDir, '.open-next', 'assets');
53
+ const serverDir = path.join(projectDir, '.open-next', 'server-functions', 'default');
54
+ const serverEntry = path.join(serverDir, 'index.mjs');
55
+ if (!fs.existsSync(serverEntry)) {
56
+ throw new Error(`.open-next/server-functions/default/index.mjs not found. Run "pcg build" first.`);
57
+ }
58
+ const port = opts.port;
59
+ const childEnv = {
60
+ ...process.env,
61
+ PORT: String(port),
62
+ };
63
+ if (opts.gateway) {
64
+ let rawGateway = opts.gateway.replace(/\/+$/, '');
65
+ if (!/^https?:\/\//i.test(rawGateway)) {
66
+ rawGateway = `http://${rawGateway}`;
67
+ }
68
+ const gatewayUrl = rawGateway;
69
+ const appId = opts.appId || 'local_user/local_app';
70
+ const secret = opts.secret || opts.token || 'local-dev-secret';
71
+ if (!opts.secret && opts.token) {
72
+ console.warn('[serve] --token is deprecated, use --secret to provide HMAC auth key');
73
+ }
74
+ const slashIdx = appId.indexOf('/');
75
+ if (slashIdx <= 0 || slashIdx === appId.length - 1) {
76
+ throw new Error(`[serve] --app-id 格式错误: "${appId}",期望 "<aliuid>/<routinename>"`);
77
+ }
78
+ const aliuid = appId.slice(0, slashIdx);
79
+ const routinename = appId.slice(slashIdx + 1);
80
+ let buildId = '';
81
+ const buildIdPath = path.join(assetsDir, 'BUILD_ID');
82
+ try {
83
+ buildId = fs.readFileSync(buildIdPath, 'utf-8').trim();
84
+ }
85
+ catch (_c) {
86
+ console.warn('[serve] Warning: BUILD_ID not found, tag/cache key may be incorrect');
87
+ }
88
+ childEnv.ESA_CACHE_GW_GATEWAY_ENDPOINT = gatewayUrl;
89
+ childEnv.ESA_CACHE_GW_AUTH_KEY = secret;
90
+ childEnv.ESA_CACHE_GW_ALIUID = aliuid;
91
+ childEnv.ESA_CACHE_GW_ROUTINENAME = routinename;
92
+ if (buildId)
93
+ childEnv.ESA_CACHE_GW_VERSION = buildId;
94
+ console.log('[serve] Gateway mode enabled:');
95
+ console.log(` ESA_CACHE_GW_GATEWAY_ENDPOINT = ${gatewayUrl}`);
96
+ console.log(` ESA_CACHE_GW_ALIUID = ${aliuid}`);
97
+ console.log(` ESA_CACHE_GW_ROUTINENAME = ${routinename}`);
98
+ console.log(` ESA_CACHE_GW_VERSION = ${buildId || '(not found)'}`);
99
+ console.log(' Image proxy = /_pcg/image/* (intercepted by node-server wrapper)');
100
+ }
101
+ const child = (0, child_process_1.spawn)('node', ['index.mjs'], {
102
+ cwd: serverDir,
103
+ env: childEnv,
104
+ stdio: ['pipe', 'pipe', 'pipe'],
105
+ });
106
+ (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
107
+ process.stdout.write(`[next] ${data}`);
108
+ });
109
+ (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
110
+ process.stderr.write(`[next] ${data}`);
111
+ });
112
+ let shuttingDown = false;
113
+ const stopChild = (signal = 'SIGTERM') => {
114
+ if (shuttingDown)
115
+ return;
116
+ shuttingDown = true;
117
+ if (!child.killed)
118
+ child.kill(signal);
119
+ };
120
+ child.on('exit', code => {
121
+ if (!shuttingDown) {
122
+ console.error(`[serve] Next.js server exited unexpectedly with code ${code}`);
123
+ }
124
+ process.exit(code !== null && code !== void 0 ? code : 0);
125
+ });
126
+ process.on('SIGINT', () => stopChild('SIGINT'));
127
+ process.on('SIGTERM', () => stopChild('SIGTERM'));
128
+ try {
129
+ await waitForReady(port);
130
+ }
131
+ catch (err) {
132
+ console.error(`[serve] Child server failed to become ready: ${err.message}`);
133
+ stopChild('SIGTERM');
134
+ process.exit(1);
135
+ }
136
+ console.log(`[serve] Ready at http://localhost:${port}`);
137
+ console.log(`[serve] assets -> .open-next/assets/ (served by wrapper)`);
138
+ console.log(`[serve] health -> /__health`);
139
+ }
140
+ exports.runServe = runServe;
141
+ function createServeCommand() {
142
+ return new commander_1.Command('serve')
143
+ .description('Start a local dev server for a built Next.js project')
144
+ .option('--dir <path>', 'Next.js project directory', '.')
145
+ .option('-p, --port <number>', 'Port number', '3000')
146
+ .option('--gateway <url>', 'Gateway URL (auto-injects auth env vars)')
147
+ .option('--app-id <id>', 'App ID for gateway auth (default: local_user/local_app)')
148
+ .option('--secret <secret>', 'HMAC secret for ESA_CACHE_GW_AUTH_KEY (default: local-dev-secret)')
149
+ .option('--token <token>', '[deprecated] alias for --secret, will be removed')
150
+ .action(async (options) => {
151
+ await runServe({
152
+ dir: options.dir,
153
+ port: parseInt(options.port, 10),
154
+ gateway: options.gateway,
155
+ appId: options.appId,
156
+ secret: options.secret,
157
+ token: options.token,
158
+ });
159
+ });
160
+ }
161
+ exports.createServeCommand = createServeCommand;
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc2VydmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaURBQW9EO0FBQ3BELHlDQUFvQztBQWNwQzs7Ozs7R0FLRztBQUNILEtBQUssVUFBVSxZQUFZLENBQ3pCLElBQVksRUFDWixTQUFTLEdBQUcsS0FBTTtJQUVsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxLQUFLLEdBQUcsR0FBUyxFQUFFO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3RCO2dCQUNFLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixJQUFJO2dCQUNKLElBQUksRUFBRSxXQUFXO2dCQUNqQixNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUUsSUFBSzthQUNmLEVBQ0QsR0FBRyxDQUFDLEVBQUU7Z0JBQ0osR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUU7b0JBQzFCLE9BQU8sRUFBRSxDQUFDO29CQUNWLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFO29CQUN6QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFELE9BQU87aUJBQ1I7Z0JBQ0QsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQ0YsQ0FBQztZQUNGLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdB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UCxDQUFDO0FBNUJELGdEQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IHsgc3Bhd24sIENoaWxkUHJvY2VzcyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVPcHRpb25zIHtcbiAgZGlyOiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgZ2F0ZXdheT86IHN0cmluZztcbiAgLyoqIOacrOWcsOS+v+WIqTpgPGFsaXVpZD4vPHJvdXRpbmVuYW1lPmAs5YaF6YOo5ouG5oiQIEVTQV9DQUNIRV9HV19BTElVSUQgKyBST1VUSU5FTkFNRSAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIEhNQUMgc2VjcmV0LOazqOWFpeWIsCBFU0FfQ0FDSEVfR1dfQVVUSF9LRVnjgILkvJjlhYjnuqfpq5jkuo4gdG9rZW7jgIIgKi9cbiAgc2VjcmV0Pzogc3RyaW5nO1xuICAvKiogQGRlcHJlY2F0ZWQg5penIEpXVCzlt7LkuI3lho3kvb/nlKgs5LuF5L+d55WZ5ZCR5ZCO5YW85a65ICovXG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBvbGwgdGhlIGNoaWxkIHNlcnZlcidzIC9fX2hlYWx0aCBlbmRwb2ludCB1bnRpbCBpdCByZXNwb25kcyAyMDAgb3Igd2UgdGltZSBvdXQuXG4gKiBub2RlLXNlcnZlciB3cmFwcGVyIGV4cG9zZXMgL19faGVhbHRoIHVuY29uZGl0aW9uYWxseSwgc28gdGhpcyBpcyBub3cgbG9hZC1iZWFyaW5nXG4gKiAodGhlIG9sZCBpbXBsIGFsd2F5cyBmZWxsIHRocm91Z2ggdG8gYSBzZXRUaW1lb3V0IGJlY2F1c2UgcGxhdGZvcm0tZnVuY3Rpb24gaGFkXG4gKiBubyAvX19oZWFsdGgpLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yUmVhZHkoXG4gIHBvcnQ6IG51bWJlcixcbiAgdGltZW91dE1zID0gMzBfMDAwXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1zO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2JlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgcmVxID0gaHR0cC5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgaG9zdG5hbWU6ICcxMjcuMC4wLjEnLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgcGF0aDogJy9fX2hlYWx0aCcsXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICB0aW1lb3V0OiAxXzAwMCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICByZXMucmVzdW1lKCk7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKERhdGUubm93KCkgPiBkZWFkbGluZSkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgL19faGVhbHRoIHJldHVybmVkICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRUaW1lb3V0KHByb2JlLCAyMDApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmVxLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgPiBkZWFkbGluZSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBjaGlsZCBzZXJ2ZXInKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQocHJvYmUsIDIwMCk7XG4gICAgICB9KTtcbiAgICAgIHJlcS5lbmQoKTtcbiAgICB9O1xuICAgIHByb2JlKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2VydmUob3B0czogU2VydmVPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2plY3REaXIgPSBwYXRoLnJlc29sdmUob3B0cy5kaXIpO1xuICBjb25zdCBhc3NldHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJy5vcGVuLW5leHQnLCAnYXNzZXRzJyk7XG4gIGNvbnN0IHNlcnZlckRpciA9IHBhdGguam9pbihcbiAgICBwcm9qZWN0RGlyLFxuICAgICcub3Blbi1uZXh0JyxcbiAgICAnc2VydmVyLWZ1bmN0aW9ucycsXG4gICAgJ2RlZmF1bHQnXG4gICk7XG4gIGNvbnN0IHNlcnZlckVudHJ5ID0gcGF0aC5qb2luKHNlcnZlckRpciwgJ2luZGV4Lm1qcycpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhzZXJ2ZXJFbnRyeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgLm9wZW4tbmV4dC9zZXJ2ZXItZnVuY3Rpb25zL2RlZmF1bHQvaW5kZXgubWpzIG5vdCBmb3VuZC4gUnVuIFwicGNnIGJ1aWxkXCIgZmlyc3QuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBwb3J0ID0gb3B0cy5wb3J0O1xuXG4gIGNvbnN0IGNoaWxkRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIC4uLihwcm9jZXNzLmVudiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSxcbiAgICBQT1JUOiBTdHJpbmcocG9ydCksXG4gIH07XG5cbiAgaWYgKG9wdHMuZ2F0ZXdheSkge1xuICAgIGxldCByYXdHYXRld2F5ID0gb3B0cy5nYXRld2F5LnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgIGlmICghL15odHRwcz86XFwvXFwvL2kudGVzdChyYXdHYXRld2F5KSkge1xuICAgICAgcmF3R2F0ZXdheSA9IGBodHRwOi8vJHtyYXdHYXRld2F5fWA7XG4gICAgfVxuICAgIGNvbnN0IGdhdGV3YXlVcmwgPSByYXdHYXRld2F5O1xuICAgIGNvbnN0IGFwcElkID0gb3B0cy5hcHBJZCB8fCAnbG9jYWxfdXNlci9sb2NhbF9hcHAnO1xuICAgIGNvbnN0IHNlY3JldCA9IG9wdHMuc2VjcmV0IHx8IG9wdHMudG9rZW4gfHwgJ2xvY2FsLWRldi1zZWNyZXQnO1xuICAgIGlmICghb3B0cy5zZWNyZXQgJiYgb3B0cy50b2tlbikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW3NlcnZlXSAtLXRva2VuIGlzIGRlcHJlY2F0ZWQsIHVzZSAtLXNlY3JldCB0byBwcm92aWRlIEhNQUMgYXV0aCBrZXknXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNsYXNoSWR4ID0gYXBwSWQuaW5kZXhPZignLycpO1xuICAgIGlmIChzbGFzaElkeCA8PSAwIHx8IHNsYXNoSWR4ID09PSBhcHBJZC5sZW5ndGggLSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbc2VydmVdIC0tYXBwLWlkIOagvOW8j+mUmeivrzogXCIke2FwcElkfVwiLOacn+acmyBcIjxhbGl1aWQ+Lzxyb3V0aW5lbmFtZT5cImBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFsaXVpZCA9IGFwcElkLnNsaWNlKDAsIHNsYXNoSWR4KTtcbiAgICBjb25zdCByb3V0aW5lbmFtZSA9IGFwcElkLnNsaWNlKHNsYXNoSWR4ICsgMSk7XG5cbiAgICBsZXQgYnVpbGRJZCA9ICcnO1xuICAgIGNvbnN0IGJ1aWxkSWRQYXRoID0gcGF0aC5qb2luKGFzc2V0c0RpciwgJ0JVSUxEX0lEJyk7XG4gICAgdHJ5IHtcbiAgICAgIGJ1aWxkSWQgPSBmcy5yZWFkRmlsZVN5bmMoYnVpbGRJZFBhdGgsICd1dGYtOCcpLnRyaW0oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tzZXJ2ZV0gV2FybmluZzogQlVJTERfSUQgbm90IGZvdW5kLCB0YWcvY2FjaGUga2V5IG1heSBiZSBpbmNvcnJlY3QnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNoaWxkRW52LkVTQV9DQUNIRV9HV19HQVRFV0FZX0VORFBPSU5UID0gZ2F0ZXdheVVybDtcbiAgICBjaGlsZEVudi5FU0FfQ0FDSEVfR1dfQVVUSF9LRVkgPSBzZWNyZXQ7XG4gICAgY2hpbGRFbnYuRVNBX0NBQ0hFX0dXX0FMSVVJRCA9IGFsaXVpZDtcbiAgICBjaGlsZEVudi5FU0FfQ0FDSEVfR1dfUk9VVElORU5BTUUgPSByb3V0aW5lbmFtZTtcbiAgICBpZiAoYnVpbGRJZCkgY2hpbGRFbnYuRVNBX0NBQ0hFX0dXX1ZFUlNJT04gPSBidWlsZElkO1xuXG4gICAgY29uc29sZS5sb2coJ1tzZXJ2ZV0gR2F0ZXdheSBtb2RlIGVuYWJsZWQ6Jyk7XG4gICAgY29uc29sZS5sb2coYCAgRVNBX0NBQ0hFX0dXX0dBVEVXQVlfRU5EUE9JTlQgPSAke2dhdGV3YXlVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgRVNBX0NBQ0hFX0dXX0FMSVVJRCAgICAgICAgICAgPSAke2FsaXVpZH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBFU0FfQ0FDSEVfR1dfUk9VVElORU5BTUUgICAgICA9ICR7cm91dGluZW5hbWV9YCk7XG4gICAgY29uc29sZS5sb2coYCAgRVNBX0NBQ0hFX0dXX1ZFUlNJT04gICAgICAgICAgPSAke2J1aWxkSWQgfHwgJyhub3QgZm91bmQpJ31gKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICcgIEltYWdlIHByb3h5ICAgICAgICAgICAgICAgICA9IC9fcGNnL2ltYWdlLyogKGludGVyY2VwdGVkIGJ5IG5vZGUtc2VydmVyIHdyYXBwZXIpJ1xuICAgICk7XG4gIH1cblxuICBjb25zdCBjaGlsZDogQ2hpbGRQcm9jZXNzID0gc3Bhd24oJ25vZGUnLCBbJ2luZGV4Lm1qcyddLCB7XG4gICAgY3dkOiBzZXJ2ZXJEaXIsXG4gICAgZW52OiBjaGlsZEVudixcbiAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcblxuICBjaGlsZC5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBbbmV4dF0gJHtkYXRhfWApO1xuICB9KTtcbiAgY2hpbGQuc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgW25leHRdICR7ZGF0YX1gKTtcbiAgfSk7XG5cbiAgbGV0IHNodXR0aW5nRG93biA9IGZhbHNlO1xuICBjb25zdCBzdG9wQ2hpbGQgPSAoc2lnbmFsOiBOb2RlSlMuU2lnbmFscyA9ICdTSUdURVJNJyk6IHZvaWQgPT4ge1xuICAgIGlmIChzaHV0dGluZ0Rvd24pIHJldHVybjtcbiAgICBzaHV0dGluZ0Rvd24gPSB0cnVlO1xuICAgIGlmICghY2hpbGQua2lsbGVkKSBjaGlsZC5raWxsKHNpZ25hbCk7XG4gIH07XG5cbiAgY2hpbGQub24oJ2V4aXQnLCBjb2RlID0+IHtcbiAgICBpZiAoIXNodXR0aW5nRG93bikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3NlcnZlXSBOZXh0LmpzIHNlcnZlciBleGl0ZWQgdW5leHBlY3RlZGx5IHdpdGggY29kZSAke2NvZGV9YCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdChjb2RlID8/IDApO1xuICB9KTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiBzdG9wQ2hpbGQoJ1NJR0lOVCcpKTtcbiAgcHJvY2Vzcy5vbignU0lHVEVSTScsICgpID0+IHN0b3BDaGlsZCgnU0lHVEVSTScpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JSZWFkeShwb3J0KTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBbc2VydmVdIENoaWxkIHNlcnZlciBmYWlsZWQgdG8gYmVjb21lIHJlYWR5OiAke2Vyci5tZXNzYWdlfWApO1xuICAgIHN0b3BDaGlsZCgnU0lHVEVSTScpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBbc2VydmVdIFJlYWR5IGF0IGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fWApO1xuICBjb25zb2xlLmxvZyhgW3NlcnZlXSAgIGFzc2V0cyAgLT4gLm9wZW4tbmV4dC9hc3NldHMvIChzZXJ2ZWQgYnkgd3JhcHBlcilgKTtcbiAgY29uc29sZS5sb2coYFtzZXJ2ZV0gICBoZWFsdGggIC0+IC9fX2hlYWx0aGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmVDb21tYW5kKCk6IENvbW1hbmQge1xuICByZXR1cm4gbmV3IENvbW1hbmQoJ3NlcnZlJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IGEgbG9jYWwgZGV2IHNlcnZlciBmb3IgYSBidWlsdCBOZXh0LmpzIHByb2plY3QnKVxuICAgIC5vcHRpb24oJy0tZGlyIDxwYXRoPicsICdOZXh0LmpzIHByb2plY3QgZGlyZWN0b3J5JywgJy4nKVxuICAgIC5vcHRpb24oJy1wLCAtLXBvcnQgPG51bWJlcj4nLCAnUG9ydCBudW1iZXInLCAnMzAwMCcpXG4gICAgLm9wdGlvbignLS1nYXRld2F5IDx1cmw+JywgJ0dhdGV3YXkgVVJMIChhdXRvLWluamVjdHMgYXV0aCBlbnYgdmFycyknKVxuICAgIC5vcHRpb24oXG4gICAgICAnLS1hcHAtaWQgPGlkPicsXG4gICAgICAnQXBwIElEIGZvciBnYXRld2F5IGF1dGggKGRlZmF1bHQ6IGxvY2FsX3VzZXIvbG9jYWxfYXBwKSdcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgICctLXNlY3JldCA8c2VjcmV0PicsXG4gICAgICAnSE1BQyBzZWNyZXQgZm9yIEVTQV9DQUNIRV9HV19BVVRIX0tFWSAoZGVmYXVsdDogbG9jYWwtZGV2LXNlY3JldCknXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICAnLS10b2tlbiA8dG9rZW4+JyxcbiAgICAgICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0tc2VjcmV0LCB3aWxsIGJlIHJlbW92ZWQnXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgb3B0aW9ucyA9PiB7XG4gICAgICBhd2FpdCBydW5TZXJ2ZSh7XG4gICAgICAgIGRpcjogb3B0aW9ucy5kaXIsXG4gICAgICAgIHBvcnQ6IHBhcnNlSW50KG9wdGlvbnMucG9ydCwgMTApLFxuICAgICAgICBnYXRld2F5OiBvcHRpb25zLmdhdGV3YXksXG4gICAgICAgIGFwcElkOiBvcHRpb25zLmFwcElkLFxuICAgICAgICBzZWNyZXQ6IG9wdGlvbnMuc2VjcmV0LFxuICAgICAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICAgIH0pO1xuICAgIH0pO1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ import { IUploadAdapter } from '../adapters/adapter.interface';
3
+ export interface UploadAssetsOptions {
4
+ dir: string;
5
+ appId: string;
6
+ adapter: IUploadAdapter;
7
+ }
8
+ export declare function runUploadAssets(opts: UploadAssetsOptions): Promise<{
9
+ total: number;
10
+ failed: number;
11
+ }>;
12
+ export declare function createUploadAssetsCommand(): Command;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUploadAssetsCommand = exports.runUploadAssets = void 0;
4
+ const path = require("path");
5
+ const commander_1 = require("commander");
6
+ const protocol_1 = require("../_protocol");
7
+ const fs_1 = require("../util/fs");
8
+ async function runUploadAssets(opts) {
9
+ const assetsDir = path.join(opts.dir, '.open-next', 'assets');
10
+ if (!(await (0, fs_1.dirExists)(assetsDir))) {
11
+ console.warn(`[upload-assets] assets directory not found: ${assetsDir}, skipping.`);
12
+ return { total: 0, failed: 0 };
13
+ }
14
+ const files = await (0, fs_1.walkDir)(assetsDir);
15
+ let uploaded = 0;
16
+ let failed = 0;
17
+ for (const filePath of files) {
18
+ const relativePath = path.relative(assetsDir, filePath);
19
+ const ossKey = (0, protocol_1.buildStaticAssetKey)({
20
+ appId: opts.appId,
21
+ path: relativePath,
22
+ });
23
+ try {
24
+ await opts.adapter.uploadFile(ossKey, filePath);
25
+ uploaded++;
26
+ if (uploaded % 100 === 0) {
27
+ console.log(`[upload-assets] progress: ${uploaded}/${files.length}`);
28
+ }
29
+ }
30
+ catch (err) {
31
+ console.error(`[upload-assets] failed to upload ${relativePath}:`, err);
32
+ failed++;
33
+ }
34
+ }
35
+ console.log(`[upload-assets] done: ${uploaded} uploaded, ${failed} failed, total ${files.length}`);
36
+ return { total: files.length, failed };
37
+ }
38
+ exports.runUploadAssets = runUploadAssets;
39
+ function createUploadAssetsCommand() {
40
+ return new commander_1.Command('upload-assets')
41
+ .description('Upload static assets from .open-next/assets/ to OSS or local directory')
42
+ .option('-d, --dir <path>', 'Build output directory', '.')
43
+ .option('--cache-mode <mode>', 'Cache mode: local | central');
44
+ }
45
+ exports.createUploadAssetsCommand = createUploadAssetsCommand;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFzc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtYXNzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3Qix5Q0FBb0M7QUFDcEMsNENBQW9EO0FBRXBELG1DQUFnRDtBQVF6QyxLQUFLLFVBQVUsZUFBZSxDQUFDLElBQXlCO0lBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFOUQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFBLGNBQVMsRUFBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0NBQStDLFNBQVMsYUFBYSxDQUFDLENBQUM7UUFDcEYsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ2hDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLFlBQU8sRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLEVBQUU7UUFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBQSw4QkFBbUIsRUFBQztZQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSTtZQUNGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3RFO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLFlBQVksR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7S0FDRjtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLFFBQVEsY0FBYyxNQUFNLGtCQUFrQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQWpDRCwwQ0FpQ0M7QUFFRCxTQUFnQix5QkFBeUI7SUFDdkMsT0FBTyxJQUFJLG1CQUFPLENBQUMsZUFBZSxDQUFDO1NBQ2hDLFdBQVcsQ0FBQyx3RUFBd0UsQ0FBQztTQUNyRixNQUFNLENBQUMsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsR0FBRyxDQUFDO1NBQ3pELE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFMRCw4REFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGJ1aWxkU3RhdGljQXNzZXRLZXkgfSBmcm9tICdAcGNnL3Byb3RvY29sJztcbmltcG9ydCB7IElVcGxvYWRBZGFwdGVyIH0gZnJvbSAnLi4vYWRhcHRlcnMvYWRhcHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgd2Fsa0RpciwgZGlyRXhpc3RzIH0gZnJvbSAnLi4vdXRpbC9mcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkQXNzZXRzT3B0aW9ucyB7XG4gIGRpcjogc3RyaW5nO1xuICBhcHBJZDogc3RyaW5nO1xuICBhZGFwdGVyOiBJVXBsb2FkQWRhcHRlcjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blVwbG9hZEFzc2V0cyhvcHRzOiBVcGxvYWRBc3NldHNPcHRpb25zKTogUHJvbWlzZTx7IHRvdGFsOiBudW1iZXI7IGZhaWxlZDogbnVtYmVyIH0+IHtcbiAgY29uc3QgYXNzZXRzRGlyID0gcGF0aC5qb2luKG9wdHMuZGlyLCAnLm9wZW4tbmV4dCcsICdhc3NldHMnKTtcblxuICBpZiAoIShhd2FpdCBkaXJFeGlzdHMoYXNzZXRzRGlyKSkpIHtcbiAgICBjb25zb2xlLndhcm4oYFt1cGxvYWQtYXNzZXRzXSBhc3NldHMgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHthc3NldHNEaXJ9LCBza2lwcGluZy5gKTtcbiAgICByZXR1cm4geyB0b3RhbDogMCwgZmFpbGVkOiAwIH07XG4gIH1cblxuICBjb25zdCBmaWxlcyA9IGF3YWl0IHdhbGtEaXIoYXNzZXRzRGlyKTtcbiAgbGV0IHVwbG9hZGVkID0gMDtcbiAgbGV0IGZhaWxlZCA9IDA7XG5cbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBmaWxlcykge1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoYXNzZXRzRGlyLCBmaWxlUGF0aCk7XG4gICAgY29uc3Qgb3NzS2V5ID0gYnVpbGRTdGF0aWNBc3NldEtleSh7XG4gICAgICBhcHBJZDogb3B0cy5hcHBJZCxcbiAgICAgIHBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcHRzLmFkYXB0ZXIudXBsb2FkRmlsZShvc3NLZXksIGZpbGVQYXRoKTtcbiAgICAgIHVwbG9hZGVkKys7XG4gICAgICBpZiAodXBsb2FkZWQgJSAxMDAgPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYFt1cGxvYWQtYXNzZXRzXSBwcm9ncmVzczogJHt1cGxvYWRlZH0vJHtmaWxlcy5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdXBsb2FkLWFzc2V0c10gZmFpbGVkIHRvIHVwbG9hZCAke3JlbGF0aXZlUGF0aH06YCwgZXJyKTtcbiAgICAgIGZhaWxlZCsrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBbdXBsb2FkLWFzc2V0c10gZG9uZTogJHt1cGxvYWRlZH0gdXBsb2FkZWQsICR7ZmFpbGVkfSBmYWlsZWQsIHRvdGFsICR7ZmlsZXMubGVuZ3RofWApO1xuICByZXR1cm4geyB0b3RhbDogZmlsZXMubGVuZ3RoLCBmYWlsZWQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZEFzc2V0c0NvbW1hbmQoKTogQ29tbWFuZCB7XG4gIHJldHVybiBuZXcgQ29tbWFuZCgndXBsb2FkLWFzc2V0cycpXG4gICAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgc3RhdGljIGFzc2V0cyBmcm9tIC5vcGVuLW5leHQvYXNzZXRzLyB0byBPU1Mgb3IgbG9jYWwgZGlyZWN0b3J5JylcbiAgICAub3B0aW9uKCctZCwgLS1kaXIgPHBhdGg+JywgJ0J1aWxkIG91dHB1dCBkaXJlY3RvcnknLCAnLicpXG4gICAgLm9wdGlvbignLS1jYWNoZS1tb2RlIDxtb2RlPicsICdDYWNoZSBtb2RlOiBsb2NhbCB8IGNlbnRyYWwnKTtcbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ import { IUploadAdapter } from '../adapters/adapter.interface';
3
+ export interface UploadCacheOptions {
4
+ dir: string;
5
+ appId: string;
6
+ buildId: string;
7
+ adapter: IUploadAdapter;
8
+ }
9
+ export declare function runUploadCache(opts: UploadCacheOptions): Promise<{
10
+ total: number;
11
+ failed: number;
12
+ }>;
13
+ export declare function createUploadCacheCommand(): Command;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createUploadCacheCommand = exports.runUploadCache = void 0;
4
+ const path = require("path");
5
+ const fs = require("fs/promises");
6
+ const commander_1 = require("commander");
7
+ const protocol_1 = require("../_protocol");
8
+ const fs_1 = require("../util/fs");
9
+ function determineCacheType(relativePath) {
10
+ if (relativePath.startsWith('__fetch') || relativePath.includes('/__fetch/')) {
11
+ return 'fetch';
12
+ }
13
+ return 'cache';
14
+ }
15
+ async function runUploadCache(opts) {
16
+ const cacheDir = path.join(opts.dir, '.open-next', 'cache');
17
+ if (!(await (0, fs_1.dirExists)(cacheDir))) {
18
+ console.warn(`[upload-cache] cache directory not found: ${cacheDir}, skipping.`);
19
+ return { total: 0, failed: 0 };
20
+ }
21
+ const files = await (0, fs_1.walkDir)(cacheDir);
22
+ let uploaded = 0;
23
+ let failed = 0;
24
+ for (const filePath of files) {
25
+ const relativePath = path.relative(cacheDir, filePath);
26
+ const cacheType = determineCacheType(relativePath);
27
+ const keyPath = cacheType === 'fetch'
28
+ ? relativePath.replace(/^__fetch\//, '')
29
+ : relativePath.replace(/\.cache$/, '');
30
+ const ossKey = (0, protocol_1.buildOssKey)({
31
+ appId: opts.appId,
32
+ buildId: opts.buildId,
33
+ key: keyPath,
34
+ cacheType,
35
+ });
36
+ try {
37
+ const raw = await fs.readFile(filePath, 'utf-8');
38
+ let value;
39
+ try {
40
+ value = JSON.parse(raw);
41
+ }
42
+ catch (_a) {
43
+ console.error(`[upload-cache] skip non-JSON file: ${relativePath}`);
44
+ failed++;
45
+ continue;
46
+ }
47
+ const envelope = JSON.stringify({ lastModified: Date.now(), value });
48
+ await opts.adapter.upload(ossKey, Buffer.from(envelope, 'utf-8'));
49
+ uploaded++;
50
+ if (uploaded % 100 === 0) {
51
+ console.log(`[upload-cache] progress: ${uploaded}/${files.length}`);
52
+ }
53
+ }
54
+ catch (err) {
55
+ console.error(`[upload-cache] failed to upload ${relativePath}:`, err);
56
+ failed++;
57
+ }
58
+ }
59
+ console.log(`[upload-cache] done: ${uploaded} uploaded, ${failed} failed, total ${files.length}`);
60
+ return { total: files.length, failed };
61
+ }
62
+ exports.runUploadCache = runUploadCache;
63
+ function createUploadCacheCommand() {
64
+ return new commander_1.Command('upload-cache')
65
+ .description('Upload pre-rendered cache from .open-next/cache/ to OSS or local directory')
66
+ .option('-d, --dir <path>', 'Build output directory', '.')
67
+ .option('--cache-mode <mode>', 'Cache mode: local | central');
68
+ }
69
+ exports.createUploadCacheCommand = createUploadCacheCommand;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VwbG9hZC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFDN0Isa0NBQWtDO0FBQ2xDLHlDQUFvQztBQUNwQyw0Q0FBNEM7QUFFNUMsbUNBQWdEO0FBU2hELFNBQVMsa0JBQWtCLENBQUMsWUFBb0I7SUFDOUMsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDNUUsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRU0sS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUF3QjtJQUMzRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBQSxjQUFTLEVBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtRQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxRQUFRLGFBQWEsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUNoQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSxZQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDdEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVmLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFO1FBQzVCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5ELE1BQU0sT0FBTyxHQUFHLFNBQVMsS0FBSyxPQUFPO1lBQ25DLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQVcsRUFBQztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLEdBQUcsRUFBRSxPQUFPO1lBQ1osU0FBUztTQUNWLENBQUMsQ0FBQztRQUVILElBQUk7WUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELElBQUksS0FBYyxDQUFDO1lBQ25CLElBQUk7Z0JBQ0YsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDekI7WUFBQyxXQUFNO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQ1gsc0NBQXNDLFlBQVksRUFBRSxDQUNyRCxDQUFDO2dCQUNGLE1BQU0sRUFBRSxDQUFDO2dCQUNULFNBQVM7YUFDVjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNsRSxRQUFRLEVBQUUsQ0FBQztZQUNYLElBQUksUUFBUSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNyRTtTQUNGO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxZQUFZLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RSxNQUFNLEVBQUUsQ0FBQztTQUNWO0tBQ0Y7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixRQUFRLGNBQWMsTUFBTSxrQkFBa0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEcsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFyREQsd0NBcURDO0FBRUQsU0FBZ0Isd0JBQXdCO0lBQ3RDLE9BQU8sSUFBSSxtQkFBTyxDQUFDLGNBQWMsQ0FBQztTQUMvQixXQUFXLENBQUMsNEVBQTRFLENBQUM7U0FDekYsTUFBTSxDQUFDLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLEdBQUcsQ0FBQztTQUN6RCxNQUFNLENBQUMscUJBQXFCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBTEQsNERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBidWlsZE9zc0tleSB9IGZyb20gJ0BwY2cvcHJvdG9jb2wnO1xuaW1wb3J0IHsgSVVwbG9hZEFkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVycy9hZGFwdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyB3YWxrRGlyLCBkaXJFeGlzdHMgfSBmcm9tICcuLi91dGlsL2ZzJztcblxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRDYWNoZU9wdGlvbnMge1xuICBkaXI6IHN0cmluZztcbiAgYXBwSWQ6IHN0cmluZztcbiAgYnVpbGRJZDogc3RyaW5nO1xuICBhZGFwdGVyOiBJVXBsb2FkQWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lQ2FjaGVUeXBlKHJlbGF0aXZlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCdfX2ZldGNoJykgfHwgcmVsYXRpdmVQYXRoLmluY2x1ZGVzKCcvX19mZXRjaC8nKSkge1xuICAgIHJldHVybiAnZmV0Y2gnO1xuICB9XG4gIHJldHVybiAnY2FjaGUnO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuVXBsb2FkQ2FjaGUob3B0czogVXBsb2FkQ2FjaGVPcHRpb25zKTogUHJvbWlzZTx7IHRvdGFsOiBudW1iZXI7IGZhaWxlZDogbnVtYmVyIH0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ob3B0cy5kaXIsICcub3Blbi1uZXh0JywgJ2NhY2hlJyk7XG5cbiAgaWYgKCEoYXdhaXQgZGlyRXhpc3RzKGNhY2hlRGlyKSkpIHtcbiAgICBjb25zb2xlLndhcm4oYFt1cGxvYWQtY2FjaGVdIGNhY2hlIGRpcmVjdG9yeSBub3QgZm91bmQ6ICR7Y2FjaGVEaXJ9LCBza2lwcGluZy5gKTtcbiAgICByZXR1cm4geyB0b3RhbDogMCwgZmFpbGVkOiAwIH07XG4gIH1cblxuICBjb25zdCBmaWxlcyA9IGF3YWl0IHdhbGtEaXIoY2FjaGVEaXIpO1xuICBsZXQgdXBsb2FkZWQgPSAwO1xuICBsZXQgZmFpbGVkID0gMDtcblxuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShjYWNoZURpciwgZmlsZVBhdGgpO1xuICAgIGNvbnN0IGNhY2hlVHlwZSA9IGRldGVybWluZUNhY2hlVHlwZShyZWxhdGl2ZVBhdGgpO1xuXG4gICAgY29uc3Qga2V5UGF0aCA9IGNhY2hlVHlwZSA9PT0gJ2ZldGNoJ1xuICAgICAgPyByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXl9fZmV0Y2hcXC8vLCAnJylcbiAgICAgIDogcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNhY2hlJC8sICcnKTtcblxuICAgIGNvbnN0IG9zc0tleSA9IGJ1aWxkT3NzS2V5KHtcbiAgICAgIGFwcElkOiBvcHRzLmFwcElkLFxuICAgICAgYnVpbGRJZDogb3B0cy5idWlsZElkLFxuICAgICAga2V5OiBrZXlQYXRoLFxuICAgICAgY2FjaGVUeXBlLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShyYXcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFt1cGxvYWQtY2FjaGVdIHNraXAgbm9uLUpTT04gZmlsZTogJHtyZWxhdGl2ZVBhdGh9YFxuICAgICAgICApO1xuICAgICAgICBmYWlsZWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnZlbG9wZSA9IEpTT04uc3RyaW5naWZ5KHsgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLCB2YWx1ZSB9KTtcbiAgICAgIGF3YWl0IG9wdHMuYWRhcHRlci51cGxvYWQob3NzS2V5LCBCdWZmZXIuZnJvbShlbnZlbG9wZSwgJ3V0Zi04JykpO1xuICAgICAgdXBsb2FkZWQrKztcbiAgICAgIGlmICh1cGxvYWRlZCAlIDEwMCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgW3VwbG9hZC1jYWNoZV0gcHJvZ3Jlc3M6ICR7dXBsb2FkZWR9LyR7ZmlsZXMubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgW3VwbG9hZC1jYWNoZV0gZmFpbGVkIHRvIHVwbG9hZCAke3JlbGF0aXZlUGF0aH06YCwgZXJyKTtcbiAgICAgIGZhaWxlZCsrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUubG9nKGBbdXBsb2FkLWNhY2hlXSBkb25lOiAke3VwbG9hZGVkfSB1cGxvYWRlZCwgJHtmYWlsZWR9IGZhaWxlZCwgdG90YWwgJHtmaWxlcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHRvdGFsOiBmaWxlcy5sZW5ndGgsIGZhaWxlZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVXBsb2FkQ2FjaGVDb21tYW5kKCk6IENvbW1hbmQge1xuICByZXR1cm4gbmV3IENvbW1hbmQoJ3VwbG9hZC1jYWNoZScpXG4gICAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgcHJlLXJlbmRlcmVkIGNhY2hlIGZyb20gLm9wZW4tbmV4dC9jYWNoZS8gdG8gT1NTIG9yIGxvY2FsIGRpcmVjdG9yeScpXG4gICAgLm9wdGlvbignLWQsIC0tZGlyIDxwYXRoPicsICdCdWlsZCBvdXRwdXQgZGlyZWN0b3J5JywgJy4nKVxuICAgIC5vcHRpb24oJy0tY2FjaGUtbW9kZSA8bW9kZT4nLCAnQ2FjaGUgbW9kZTogbG9jYWwgfCBjZW50cmFsJyk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export declare function compileCacheAssetsManifest(openNextDir: string): Promise<Record<string, string[]>>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileCacheAssetsManifest = void 0;
4
+ const fs = require("fs/promises");
5
+ const path = require("path");
6
+ const fs_1 = require("../util/fs");
7
+ async function compileCacheAssetsManifest(openNextDir) {
8
+ var _a, _b;
9
+ const manifest = {};
10
+ const assetsDir = path.join(openNextDir, 'assets');
11
+ let buildId = '';
12
+ try {
13
+ buildId = (await fs.readFile(path.join(assetsDir, 'BUILD_ID'), 'utf-8')).trim();
14
+ }
15
+ catch (_c) {
16
+ console.warn('[build] BUILD_ID not found, skipping cache-assets-manifest compilation');
17
+ return manifest;
18
+ }
19
+ const cacheDir = path.join(openNextDir, 'cache', buildId);
20
+ if (await (0, fs_1.dirExists)(cacheDir)) {
21
+ const files = await (0, fs_1.walkDir)(cacheDir);
22
+ for (const filePath of files) {
23
+ if (!filePath.endsWith('.cache'))
24
+ continue;
25
+ try {
26
+ const content = await fs.readFile(filePath, 'utf-8');
27
+ const parsed = JSON.parse(content);
28
+ const tags = (_b = (_a = parsed === null || parsed === void 0 ? void 0 : parsed.meta) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? void 0 : _b['x-next-cache-tags'];
29
+ if (tags) {
30
+ const relativePath = path.relative(cacheDir, filePath);
31
+ const routePath = cacheFileToRoute(relativePath);
32
+ manifest[routePath] = tags.split(',').map((t) => t.trim());
33
+ }
34
+ }
35
+ catch (_d) {
36
+ // skip unparseable files
37
+ }
38
+ }
39
+ }
40
+ const fetchDir = path.join(openNextDir, 'cache', '__fetch', buildId);
41
+ if (await (0, fs_1.dirExists)(fetchDir)) {
42
+ const files = await (0, fs_1.walkDir)(fetchDir);
43
+ for (const filePath of files) {
44
+ try {
45
+ const content = await fs.readFile(filePath, 'utf-8');
46
+ const parsed = JSON.parse(content);
47
+ if ((parsed === null || parsed === void 0 ? void 0 : parsed.tags) && Array.isArray(parsed.tags)) {
48
+ const key = path.basename(filePath);
49
+ manifest[key] = parsed.tags;
50
+ }
51
+ }
52
+ catch (_e) {
53
+ // skip unparseable files
54
+ }
55
+ }
56
+ }
57
+ return manifest;
58
+ }
59
+ exports.compileCacheAssetsManifest = compileCacheAssetsManifest;
60
+ function cacheFileToRoute(relativePath) {
61
+ let route = relativePath.replace(/\.cache$/, '');
62
+ route = route.replace(/\\/g, '/');
63
+ if (route === 'index')
64
+ return '/';
65
+ return '/' + route;
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZUNhY2hlQXNzZXRzTWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcGlsZS9jb21waWxlQ2FjaGVBc3NldHNNYW5pZmVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrQ0FBa0M7QUFDbEMsNkJBQTZCO0FBQzdCLG1DQUFnRDtBQUV6QyxLQUFLLFVBQVUsMEJBQTBCLENBQUMsV0FBbUI7O0lBQ2xFLE1BQU0sUUFBUSxHQUE2QixFQUFFLENBQUM7SUFFOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkQsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLElBQUk7UUFDRixPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNqRjtJQUFDLFdBQU07UUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDdkYsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsSUFBSSxNQUFNLElBQUEsY0FBUyxFQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBQSxZQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUFFLFNBQVM7WUFDM0MsSUFBSTtnQkFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLElBQUksR0FBRyxNQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksMENBQUUsT0FBTywwQ0FBRyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLElBQUksRUFBRTtvQkFDUixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDdkQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ2pELFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3BFO2FBQ0Y7WUFBQyxXQUFNO2dCQUNOLHlCQUF5QjthQUMxQjtTQUNGO0tBQ0Y7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLElBQUksTUFBTSxJQUFBLGNBQVMsRUFBQyxRQUFRLENBQUMsRUFBRTtRQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsWUFBTyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxFQUFFO1lBQzVCLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLEtBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3BDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUM3QjthQUNGO1lBQUMsV0FBTTtnQkFDTix5QkFBeUI7YUFDMUI7U0FDRjtLQUNGO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQWxERCxnRUFrREM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFlBQW9CO0lBQzVDLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxJQUFJLEtBQUssS0FBSyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDbEMsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2Fsa0RpciwgZGlyRXhpc3RzIH0gZnJvbSAnLi4vdXRpbC9mcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21waWxlQ2FjaGVBc3NldHNNYW5pZmVzdChvcGVuTmV4dERpcjogc3RyaW5nKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IHtcbiAgY29uc3QgbWFuaWZlc3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG4gIGNvbnN0IGFzc2V0c0RpciA9IHBhdGguam9pbihvcGVuTmV4dERpciwgJ2Fzc2V0cycpO1xuICBsZXQgYnVpbGRJZCA9ICcnO1xuICB0cnkge1xuICAgIGJ1aWxkSWQgPSAoYXdhaXQgZnMucmVhZEZpbGUocGF0aC5qb2luKGFzc2V0c0RpciwgJ0JVSUxEX0lEJyksICd1dGYtOCcpKS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUud2FybignW2J1aWxkXSBCVUlMRF9JRCBub3QgZm91bmQsIHNraXBwaW5nIGNhY2hlLWFzc2V0cy1tYW5pZmVzdCBjb21waWxhdGlvbicpO1xuICAgIHJldHVybiBtYW5pZmVzdDtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlRGlyID0gcGF0aC5qb2luKG9wZW5OZXh0RGlyLCAnY2FjaGUnLCBidWlsZElkKTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhjYWNoZURpcikpIHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHdhbGtEaXIoY2FjaGVEaXIpO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghZmlsZVBhdGguZW5kc1dpdGgoJy5jYWNoZScpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBwYXJzZWQ/Lm1ldGE/LmhlYWRlcnM/LlsneC1uZXh0LWNhY2hlLXRhZ3MnXTtcbiAgICAgICAgaWYgKHRhZ3MpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGNhY2hlRGlyLCBmaWxlUGF0aCk7XG4gICAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gY2FjaGVGaWxlVG9Sb3V0ZShyZWxhdGl2ZVBhdGgpO1xuICAgICAgICAgIG1hbmlmZXN0W3JvdXRlUGF0aF0gPSB0YWdzLnNwbGl0KCcsJykubWFwKCh0OiBzdHJpbmcpID0+IHQudHJpbSgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIHNraXAgdW5wYXJzZWFibGUgZmlsZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmZXRjaERpciA9IHBhdGguam9pbihvcGVuTmV4dERpciwgJ2NhY2hlJywgJ19fZmV0Y2gnLCBidWlsZElkKTtcbiAgaWYgKGF3YWl0IGRpckV4aXN0cyhmZXRjaERpcikpIHtcbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHdhbGtEaXIoZmV0Y2hEaXIpO1xuICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgZmlsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgIGlmIChwYXJzZWQ/LnRhZ3MgJiYgQXJyYXkuaXNBcnJheShwYXJzZWQudGFncykpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcbiAgICAgICAgICBtYW5pZmVzdFtrZXldID0gcGFyc2VkLnRhZ3M7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBza2lwIHVucGFyc2VhYmxlIGZpbGVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hbmlmZXN0O1xufVxuXG5mdW5jdGlvbiBjYWNoZUZpbGVUb1JvdXRlKHJlbGF0aXZlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJvdXRlID0gcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLmNhY2hlJC8sICcnKTtcbiAgcm91dGUgPSByb3V0ZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gIGlmIChyb3V0ZSA9PT0gJ2luZGV4JykgcmV0dXJuICcvJztcbiAgcmV0dXJuICcvJyArIHJvdXRlO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ export declare function generateDefaultConfig(options: {
2
+ overridesDir: string;
3
+ }): string;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateDefaultConfig = void 0;
4
+ function generateDefaultConfig(options) {
5
+ const d = options.overridesDir.replace(/\\/g, '/').replace(/\/$/, '');
6
+ return `// @ts-nocheck
7
+ // Auto-generated by pcg build — do not edit
8
+ const config = {
9
+ default: {
10
+ override: {
11
+ wrapper: () => import("${d}/adapters/wrappers/node-server.js").then(m => m.default),
12
+ converter: () => import("${d}/adapters/converters/passthrough.js").then(m => m.default),
13
+ incrementalCache: () => import("${d}/overrides/incrementalCache/gateway.js").then(m => new m.default()),
14
+ tagCache: () => import("${d}/overrides/tagCache/gateway.js").then(m => new m.default()),
15
+ queue: "direct",
16
+ proxyExternalRequest: "fetch",
17
+ },
18
+ },
19
+ imageOptimization: {
20
+ install: false,
21
+ },
22
+ buildOutputPath: ".",
23
+ appPath: ".",
24
+ };
25
+
26
+ export default config;
27
+ `;
28
+ }
29
+ exports.generateDefaultConfig = generateDefaultConfig;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vcGVuLW5leHQtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9kZWZhdWx0LW9wZW4tbmV4dC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IscUJBQXFCLENBQUMsT0FFckM7SUFDQyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPOzs7OzsrQkFLc0IsQ0FBQztpQ0FDQyxDQUFDO3dDQUNNLENBQUM7Z0NBQ1QsQ0FBQzs7Ozs7Ozs7Ozs7OztDQWFoQyxDQUFDO0FBQ0YsQ0FBQztBQTFCRCxzREEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEZWZhdWx0Q29uZmlnKG9wdGlvbnM6IHtcbiAgb3ZlcnJpZGVzRGlyOiBzdHJpbmc7XG59KTogc3RyaW5nIHtcbiAgY29uc3QgZCA9IG9wdGlvbnMub3ZlcnJpZGVzRGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICByZXR1cm4gYC8vIEB0cy1ub2NoZWNrXG4vLyBBdXRvLWdlbmVyYXRlZCBieSBwY2cgYnVpbGQg4oCUIGRvIG5vdCBlZGl0XG5jb25zdCBjb25maWcgPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICBvdmVycmlkZToge1xuICAgICAgd3JhcHBlcjogKCkgPT4gaW1wb3J0KFwiJHtkfS9hZGFwdGVycy93cmFwcGVycy9ub2RlLXNlcnZlci5qc1wiKS50aGVuKG0gPT4gbS5kZWZhdWx0KSxcbiAgICAgIGNvbnZlcnRlcjogKCkgPT4gaW1wb3J0KFwiJHtkfS9hZGFwdGVycy9jb252ZXJ0ZXJzL3Bhc3N0aHJvdWdoLmpzXCIpLnRoZW4obSA9PiBtLmRlZmF1bHQpLFxuICAgICAgaW5jcmVtZW50YWxDYWNoZTogKCkgPT4gaW1wb3J0KFwiJHtkfS9vdmVycmlkZXMvaW5jcmVtZW50YWxDYWNoZS9nYXRld2F5LmpzXCIpLnRoZW4obSA9PiBuZXcgbS5kZWZhdWx0KCkpLFxuICAgICAgdGFnQ2FjaGU6ICgpID0+IGltcG9ydChcIiR7ZH0vb3ZlcnJpZGVzL3RhZ0NhY2hlL2dhdGV3YXkuanNcIikudGhlbihtID0+IG5ldyBtLmRlZmF1bHQoKSksXG4gICAgICBxdWV1ZTogXCJkaXJlY3RcIixcbiAgICAgIHByb3h5RXh0ZXJuYWxSZXF1ZXN0OiBcImZldGNoXCIsXG4gICAgfSxcbiAgfSxcbiAgaW1hZ2VPcHRpbWl6YXRpb246IHtcbiAgICBpbnN0YWxsOiBmYWxzZSxcbiAgfSxcbiAgYnVpbGRPdXRwdXRQYXRoOiBcIi5cIixcbiAgYXBwUGF0aDogXCIuXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25maWc7XG5gO1xufVxuIl19
@@ -0,0 +1,13 @@
1
+ export { IUploadAdapter } from './adapters/adapter.interface';
2
+ export { LocalFSUploadAdapter } from './adapters/local-fs.adapter';
3
+ export { OSSUploadAdapter } from './adapters/oss.adapter';
4
+ export { runBuild, BuildOptions, createBuildCommand } from './commands/build';
5
+ export { runDeploy, DeployOptions, createDeployCommand } from './commands/deploy';
6
+ export { runUploadCache, UploadCacheOptions, createUploadCacheCommand } from './commands/upload-cache';
7
+ export { generateDefaultConfig } from './config/default-open-next-config';
8
+ export { default as GatewayIncrementalCache } from './overrides/incrementalCache/gateway';
9
+ export { default as GatewayTagCache } from './overrides/tagCache/gateway';
10
+ export { default as nodeServerWrapper } from './adapters/wrappers/node-server';
11
+ export { default as passthroughConverter } from './adapters/converters/passthrough';
12
+ export { loadGatewayAuthConfig, signGatewayHeaders, gatewayFetch, GatewayAuthConfig, GatewaySignedHeaders, } from './runtime/gateway-auth';
13
+ export { handleImageProxy } from './runtime/image-proxy';
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleImageProxy = exports.gatewayFetch = exports.signGatewayHeaders = exports.loadGatewayAuthConfig = exports.passthroughConverter = exports.nodeServerWrapper = exports.GatewayTagCache = exports.GatewayIncrementalCache = exports.generateDefaultConfig = exports.createUploadCacheCommand = exports.runUploadCache = exports.createDeployCommand = exports.runDeploy = exports.createBuildCommand = exports.runBuild = exports.OSSUploadAdapter = exports.LocalFSUploadAdapter = void 0;
4
+ var local_fs_adapter_1 = require("./adapters/local-fs.adapter");
5
+ Object.defineProperty(exports, "LocalFSUploadAdapter", { enumerable: true, get: function () { return local_fs_adapter_1.LocalFSUploadAdapter; } });
6
+ var oss_adapter_1 = require("./adapters/oss.adapter");
7
+ Object.defineProperty(exports, "OSSUploadAdapter", { enumerable: true, get: function () { return oss_adapter_1.OSSUploadAdapter; } });
8
+ var build_1 = require("./commands/build");
9
+ Object.defineProperty(exports, "runBuild", { enumerable: true, get: function () { return build_1.runBuild; } });
10
+ Object.defineProperty(exports, "createBuildCommand", { enumerable: true, get: function () { return build_1.createBuildCommand; } });
11
+ var deploy_1 = require("./commands/deploy");
12
+ Object.defineProperty(exports, "runDeploy", { enumerable: true, get: function () { return deploy_1.runDeploy; } });
13
+ Object.defineProperty(exports, "createDeployCommand", { enumerable: true, get: function () { return deploy_1.createDeployCommand; } });
14
+ var upload_cache_1 = require("./commands/upload-cache");
15
+ Object.defineProperty(exports, "runUploadCache", { enumerable: true, get: function () { return upload_cache_1.runUploadCache; } });
16
+ Object.defineProperty(exports, "createUploadCacheCommand", { enumerable: true, get: function () { return upload_cache_1.createUploadCacheCommand; } });
17
+ var default_open_next_config_1 = require("./config/default-open-next-config");
18
+ Object.defineProperty(exports, "generateDefaultConfig", { enumerable: true, get: function () { return default_open_next_config_1.generateDefaultConfig; } });
19
+ // Runtime overrides (used by OpenNext config at build time, executed in Function at runtime)
20
+ var gateway_1 = require("./overrides/incrementalCache/gateway");
21
+ Object.defineProperty(exports, "GatewayIncrementalCache", { enumerable: true, get: function () { return gateway_1.default; } });
22
+ var gateway_2 = require("./overrides/tagCache/gateway");
23
+ Object.defineProperty(exports, "GatewayTagCache", { enumerable: true, get: function () { return gateway_2.default; } });
24
+ // Adapters (used by OpenNext config)
25
+ var node_server_1 = require("./adapters/wrappers/node-server");
26
+ Object.defineProperty(exports, "nodeServerWrapper", { enumerable: true, get: function () { return node_server_1.default; } });
27
+ var passthrough_1 = require("./adapters/converters/passthrough");
28
+ Object.defineProperty(exports, "passthroughConverter", { enumerable: true, get: function () { return passthrough_1.default; } });
29
+ // Runtime: Gateway 鉴权 client + 图片代理处理函数
30
+ var gateway_auth_1 = require("./runtime/gateway-auth");
31
+ Object.defineProperty(exports, "loadGatewayAuthConfig", { enumerable: true, get: function () { return gateway_auth_1.loadGatewayAuthConfig; } });
32
+ Object.defineProperty(exports, "signGatewayHeaders", { enumerable: true, get: function () { return gateway_auth_1.signGatewayHeaders; } });
33
+ Object.defineProperty(exports, "gatewayFetch", { enumerable: true, get: function () { return gateway_auth_1.gatewayFetch; } });
34
+ var image_proxy_1 = require("./runtime/image-proxy");
35
+ Object.defineProperty(exports, "handleImageProxy", { enumerable: true, get: function () { return image_proxy_1.handleImageProxy; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsZ0VBQW1FO0FBQTFELHdIQUFBLG9CQUFvQixPQUFBO0FBQzdCLHNEQUEwRDtBQUFqRCwrR0FBQSxnQkFBZ0IsT0FBQTtBQUN6QiwwQ0FBOEU7QUFBckUsaUdBQUEsUUFBUSxPQUFBO0FBQWdCLDJHQUFBLGtCQUFrQixPQUFBO0FBQ25ELDRDQUFrRjtBQUF6RSxtR0FBQSxTQUFTLE9BQUE7QUFBaUIsNkdBQUEsbUJBQW1CLE9BQUE7QUFDdEQsd0RBQXVHO0FBQTlGLDhHQUFBLGNBQWMsT0FBQTtBQUFzQix3SEFBQSx3QkFBd0IsT0FBQTtBQUNyRSw4RUFBMEU7QUFBakUsaUlBQUEscUJBQXFCLE9BQUE7QUFFOUIsNkZBQTZGO0FBQzdGLGdFQUEwRjtBQUFqRixrSEFBQSxPQUFPLE9BQTJCO0FBQzNDLHdEQUEwRTtBQUFqRSwwR0FBQSxPQUFPLE9BQW1CO0FBRW5DLHFDQUFxQztBQUNyQywrREFBK0U7QUFBdEUsZ0hBQUEsT0FBTyxPQUFxQjtBQUNyQyxpRUFBb0Y7QUFBM0UsbUhBQUEsT0FBTyxPQUF3QjtBQUV4Qyx3Q0FBd0M7QUFDeEMsdURBTWdDO0FBTDlCLHFIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLGtIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDRHQUFBLFlBQVksT0FBQTtBQUlkLHFEQUF5RDtBQUFoRCwrR0FBQSxnQkFBZ0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IElVcGxvYWRBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVyLmludGVyZmFjZSc7XG5leHBvcnQgeyBMb2NhbEZTVXBsb2FkQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcnMvbG9jYWwtZnMuYWRhcHRlcic7XG5leHBvcnQgeyBPU1NVcGxvYWRBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVycy9vc3MuYWRhcHRlcic7XG5leHBvcnQgeyBydW5CdWlsZCwgQnVpbGRPcHRpb25zLCBjcmVhdGVCdWlsZENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkJztcbmV4cG9ydCB7IHJ1bkRlcGxveSwgRGVwbG95T3B0aW9ucywgY3JlYXRlRGVwbG95Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvZGVwbG95JztcbmV4cG9ydCB7IHJ1blVwbG9hZENhY2hlLCBVcGxvYWRDYWNoZU9wdGlvbnMsIGNyZWF0ZVVwbG9hZENhY2hlQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvdXBsb2FkLWNhY2hlJztcbmV4cG9ydCB7IGdlbmVyYXRlRGVmYXVsdENvbmZpZyB9IGZyb20gJy4vY29uZmlnL2RlZmF1bHQtb3Blbi1uZXh0LWNvbmZpZyc7XG5cbi8vIFJ1bnRpbWUgb3ZlcnJpZGVzICh1c2VkIGJ5IE9wZW5OZXh0IGNvbmZpZyBhdCBidWlsZCB0aW1lLCBleGVjdXRlZCBpbiBGdW5jdGlvbiBhdCBydW50aW1lKVxuZXhwb3J0IHsgZGVmYXVsdCBhcyBHYXRld2F5SW5jcmVtZW50YWxDYWNoZSB9IGZyb20gJy4vb3ZlcnJpZGVzL2luY3JlbWVudGFsQ2FjaGUvZ2F0ZXdheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdhdGV3YXlUYWdDYWNoZSB9IGZyb20gJy4vb3ZlcnJpZGVzL3RhZ0NhY2hlL2dhdGV3YXknO1xuXG4vLyBBZGFwdGVycyAodXNlZCBieSBPcGVuTmV4dCBjb25maWcpXG5leHBvcnQgeyBkZWZhdWx0IGFzIG5vZGVTZXJ2ZXJXcmFwcGVyIH0gZnJvbSAnLi9hZGFwdGVycy93cmFwcGVycy9ub2RlLXNlcnZlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhc3N0aHJvdWdoQ29udmVydGVyIH0gZnJvbSAnLi9hZGFwdGVycy9jb252ZXJ0ZXJzL3Bhc3N0aHJvdWdoJztcblxuLy8gUnVudGltZTogR2F0ZXdheSDpibTmnYMgY2xpZW50ICsg5Zu+54mH5Luj55CG5aSE55CG5Ye95pWwXG5leHBvcnQge1xuICBsb2FkR2F0ZXdheUF1dGhDb25maWcsXG4gIHNpZ25HYXRld2F5SGVhZGVycyxcbiAgZ2F0ZXdheUZldGNoLFxuICBHYXRld2F5QXV0aENvbmZpZyxcbiAgR2F0ZXdheVNpZ25lZEhlYWRlcnMsXG59IGZyb20gJy4vcnVudGltZS9nYXRld2F5LWF1dGgnO1xuZXhwb3J0IHsgaGFuZGxlSW1hZ2VQcm94eSB9IGZyb20gJy4vcnVudGltZS9pbWFnZS1wcm94eSc7XG4iXX0=
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Gateway 增量缓存 Override
3
+ *
4
+ * Next.js Function 运行时的增量缓存实现,通过 Gateway 代理读写 OSS。
5
+ * 鉴权统一走 runtime/gateway-auth(HMAC 签名 + 4 header)。
6
+ *
7
+ * @see specs/runtime/incremental-cache-override.spec.md
8
+ */
9
+ export default class GatewayIncrementalCache {
10
+ name: "gateway-incremental-cache";
11
+ private config;
12
+ private configLoaded;
13
+ /**
14
+ * 延迟加载配置,避免在构造函数中因环境变量缺失而阻塞 Function 启动。
15
+ */
16
+ private getConfig;
17
+ /**
18
+ * 从 Gateway 读取缓存。
19
+ */
20
+ get(key: string, isFetch?: boolean): Promise<{
21
+ value: any;
22
+ lastModified: number;
23
+ } | null>;
24
+ /**
25
+ * 向 Gateway 写入缓存。
26
+ */
27
+ set(key: string, value: any, isFetch?: boolean): Promise<void>;
28
+ /**
29
+ * 通过 Gateway 删除缓存。
30
+ */
31
+ delete(key: string, isFetch?: boolean): Promise<void>;
32
+ }