apiskill 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/vite.config.ts CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  openApiStats,
16
16
  } from './src/manualApiConfig';
17
17
  import { startMockServer } from './scripts/lib/mock-server.mjs';
18
- import { getDefaultCacheDir } from './scripts/lib/cache-paths.mjs';
18
+ import { getCacheSettings, getDefaultCacheDir, resetDefaultCacheDir, setDefaultCacheDir } from './scripts/lib/cache-paths.mjs';
19
19
 
20
20
  const appRootDir = process.env.APISKILL_ROOT || process.cwd();
21
21
  const cacheDir = getDefaultCacheDir();
@@ -91,6 +91,26 @@ function openapiImportPlugin() {
91
91
  }
92
92
  });
93
93
 
94
+ server.middlewares.use('/api/cache-settings', async (req, res) => {
95
+ try {
96
+ if (req.method === 'GET') {
97
+ sendJson(res, 200, webCacheSettings());
98
+ return;
99
+ }
100
+ if (req.method !== 'POST') {
101
+ sendJson(res, 405, { error: 'Method Not Allowed' });
102
+ return;
103
+ }
104
+
105
+ const body = (await readJsonBody(req)) as { cacheDir?: unknown; reset?: boolean };
106
+ if (body.reset) await resetDefaultCacheDir();
107
+ else await setDefaultCacheDir(requiredText(body.cacheDir, '请输入默认缓存地址'));
108
+ sendJson(res, 200, webCacheSettings());
109
+ } catch (error) {
110
+ sendJson(res, 400, { error: error instanceof Error ? error.message : 'Save cache settings failed' });
111
+ }
112
+ });
113
+
94
114
  server.middlewares.use('/api/openapi/version-select', async (req, res) => {
95
115
  if (req.method !== 'POST') {
96
116
  sendJson(res, 405, { error: 'Method Not Allowed' });
@@ -197,6 +217,66 @@ function openapiImportPlugin() {
197
217
  }
198
218
  });
199
219
 
220
+ server.middlewares.use('/api/openapi/version-sync-cache', async (req, res) => {
221
+ if (req.method !== 'POST') {
222
+ sendJson(res, 405, { error: 'Method Not Allowed' });
223
+ return;
224
+ }
225
+
226
+ try {
227
+ const body = (await readJsonBody(req)) as { versionId?: string };
228
+ const versionId = requiredText(body.versionId, '请选择要同步的文档版本');
229
+ assertSafeVersionId(versionId);
230
+ const settings = getCacheSettings();
231
+ const targetCacheDir = settings.defaultCacheDir;
232
+ const payload = await readCachedDocument(versionId);
233
+ const sourceDocumentPath = typeof payload.meta?.savedPath === 'string'
234
+ ? payload.meta.savedPath
235
+ : resolve(versionsDir, `${versionId}.json`);
236
+
237
+ if (resolve(targetCacheDir) === resolve(cacheDir)) {
238
+ sendJson(res, 200, {
239
+ status: 'already-current',
240
+ versionId,
241
+ sourceCacheDir: cacheDir,
242
+ sourceDocumentPath,
243
+ targetCacheDir,
244
+ targetDocumentPath: sourceDocumentPath,
245
+ });
246
+ return;
247
+ }
248
+
249
+ const targetVersionsDir = resolve(targetCacheDir, 'versions');
250
+ const targetDocumentPath = resolve(targetVersionsDir, `${versionId}.json`);
251
+ const targetMetaPath = resolve(targetVersionsDir, `${versionId}.meta.json`);
252
+ const syncedAt = new Date().toISOString();
253
+ const targetMeta = {
254
+ ...(payload.meta ?? {}),
255
+ versionId,
256
+ savedFile: basename(targetDocumentPath),
257
+ savedPath: targetDocumentPath,
258
+ cacheSyncedAt: syncedAt,
259
+ cacheSyncedFrom: sourceDocumentPath,
260
+ };
261
+
262
+ await mkdir(targetVersionsDir, { recursive: true });
263
+ await writeFile(targetDocumentPath, JSON.stringify(payload.document, null, 2));
264
+ await writeFile(targetMetaPath, JSON.stringify(targetMeta, null, 2));
265
+ await writeFile(resolve(targetCacheDir, 'latest-import.json'), JSON.stringify(targetMeta, null, 2));
266
+ sendJson(res, 200, {
267
+ status: 'synced',
268
+ versionId,
269
+ sourceCacheDir: cacheDir,
270
+ sourceDocumentPath,
271
+ targetCacheDir,
272
+ targetDocumentPath,
273
+ syncedAt,
274
+ });
275
+ } catch (error) {
276
+ sendJson(res, 400, { error: error instanceof Error ? error.message : 'Sync version cache failed' });
277
+ }
278
+ });
279
+
200
280
  server.middlewares.use('/api/openapi/auth-check', async (req, res) => {
201
281
  if (req.method !== 'POST') {
202
282
  sendJson(res, 405, { error: 'Method Not Allowed' });
@@ -536,6 +616,17 @@ function openapiImportPlugin() {
536
616
  };
537
617
  }
538
618
 
619
+ function webCacheSettings() {
620
+ const settings = getCacheSettings();
621
+ return {
622
+ ...settings,
623
+ activeCacheDir: cacheDir,
624
+ effectiveNextCacheDir: settings.cacheDir,
625
+ restartRequired: resolve(cacheDir) !== resolve(settings.cacheDir),
626
+ activeMatchesDefault: resolve(cacheDir) === resolve(settings.defaultCacheDir),
627
+ };
628
+ }
629
+
539
630
  async function readCachedDocument(versionId?: string) {
540
631
  if (versionId) {
541
632
  assertSafeVersionId(versionId);