@yongdall/file 0.6.2 → 0.6.4

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,20 @@
1
+ import { Query, actions } from "@yongdall/model";
2
+ import { getModel } from "@yongdall/core";
3
+ import { useDatabase } from "@yongdall/connection";
4
+
5
+ //#region plugins/file/getCabinet.mjs
6
+ /**
7
+ *
8
+ * @param {string} cabinetId
9
+ * @returns {Promise<{mode: string; storeId: string; storePath: string; uploadPath: string; public: boolean}?>}
10
+ */
11
+ async function getCabinet(cabinetId) {
12
+ const pageModel = await getModel("fileCabinet");
13
+ if (!pageModel) return null;
14
+ const sql = new Query(pageModel, true).where("id", cabinetId);
15
+ return await useDatabase(pageModel.databaseId).call(actions.first(sql)) || null;
16
+ }
17
+
18
+ //#endregion
19
+ export { getCabinet as t };
20
+ //# sourceMappingURL=getCabinet-oLwx_M7c.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCabinet-oLwx_M7c.mjs","names":[],"sources":["../../plugins/file/getCabinet.mjs"],"sourcesContent":["import { getModel } from '@yongdall/core';\nimport { actions, Query } from '@yongdall/model';\nimport { useDatabase } from '@yongdall/connection';\n\n\n\n/**\n * \n * @param {string} cabinetId \n * @returns {Promise<{mode: string; storeId: string; storePath: string; uploadPath: string; public: boolean}?>}\n */\nexport default async function getCabinet(cabinetId) {\n\n\tconst pageModel = await getModel('fileCabinet');\n\tif (!pageModel) { return null; }\n\n\tconst sql = new Query(pageModel, true).where('id', cabinetId);\n\tconst database = useDatabase(pageModel.databaseId);\n\treturn await database.call(actions.first(sql)) || null;\n}\n"],"mappings":";;;;;;;;;;AAWA,eAA8B,WAAW,WAAW;CAEnD,MAAM,YAAY,MAAM,SAAS,cAAc;AAC/C,KAAI,CAAC,UAAa,QAAO;CAEzB,MAAM,MAAM,IAAI,MAAM,WAAW,KAAK,CAAC,MAAM,MAAM,UAAU;AAE7D,QAAO,MADU,YAAY,UAAU,WAAW,CAC5B,KAAK,QAAQ,MAAM,IAAI,CAAC,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yongdall/file",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "type": "module",
5
5
  "main": "./index.mjs",
6
6
  "exports": {
@@ -12,16 +12,16 @@
12
12
  "author": "",
13
13
  "license": "ISC",
14
14
  "dependencies": {
15
- "@yongdall/core": "^0.6.2",
16
- "@yongdall/connection": "^0.6.2",
17
- "@yongdall/model": "^0.6.2",
18
- "@yongdall/http": "^0.6.2"
15
+ "@yongdall/core": "^0.6.4",
16
+ "@yongdall/connection": "^0.6.4",
17
+ "@yongdall/model": "^0.6.4",
18
+ "@yongdall/http": "^0.6.4"
19
19
  },
20
20
  "devDependencies": {
21
- "@yongdall/migrate": "^0.6.2",
22
- "@yongdall/web": "^0.6.2"
21
+ "@yongdall/migrate": "^0.6.4",
22
+ "@yongdall/web": "^0.6.4"
23
23
  },
24
24
  "peerDependencies": {
25
- "@yongdall/web": "^0.6.2"
25
+ "@yongdall/web": "^0.6.4"
26
26
  }
27
27
  }
@@ -1,22 +1,8 @@
1
+ import { t as getCabinet } from "../getCabinet-oLwx_M7c.mjs";
1
2
  import { ApiRouter, Param, e404 } from "@yongdall/http";
2
- import { getModel, getUser } from "@yongdall/core";
3
- import { useConnection, useDatabase } from "@yongdall/connection";
4
- import { Query, actions } from "@yongdall/model";
3
+ import { getUser } from "@yongdall/core";
4
+ import { useConnection } from "@yongdall/connection";
5
5
 
6
- //#region plugins/file/getCabinet.mjs
7
- /**
8
- *
9
- * @param {string} cabinetId
10
- * @returns {Promise<{mode: string; storeId: string; storePath: string; uploadPath: string; public: boolean}?>}
11
- */
12
- async function getCabinet(cabinetId) {
13
- const pageModel = await getModel("fileCabinet");
14
- if (!pageModel) return null;
15
- const sql = new Query(pageModel, true).where("id", cabinetId);
16
- return await useDatabase(pageModel.databaseId).call(actions.first(sql)) || null;
17
- }
18
-
19
- //#endregion
20
6
  //#region plugins/file/common/replacePath.mjs
21
7
  /**
22
8
  *
@@ -48,12 +34,12 @@ function replacePath(path, date, data) {
48
34
 
49
35
  //#endregion
50
36
  //#region plugins/file/routers/api.mjs
51
- const fileCabinetId$1 = new Param();
52
- const filePathParam$1 = new Param();
37
+ const fileCabinetId = new Param();
38
+ const filePathParam = new Param();
53
39
  const apiRouter = new ApiRouter();
54
- apiRouter.put`${fileCabinetId$1}/files/${filePathParam$1}+`(async (ctx) => {
55
- const cabinetId = fileCabinetId$1.param(ctx) || "_";
56
- const filePath = filePathParam$1.params(ctx);
40
+ apiRouter.put`${fileCabinetId}/files/${filePathParam}+`(async (ctx) => {
41
+ const cabinetId = fileCabinetId.param(ctx) || "_";
42
+ const filePath = filePathParam.params(ctx);
57
43
  if (!filePath?.length) return e404();
58
44
  const paths = filePath;
59
45
  const path = filePath.join("/");
@@ -93,36 +79,5 @@ apiRouter.put`${fileCabinetId$1}/files/${filePathParam$1}+`(async (ctx) => {
93
79
  var api_default = apiRouter;
94
80
 
95
81
  //#endregion
96
- //#region plugins/file/routers/download.mjs
97
- const fileCabinetId = new Param();
98
- const filePathParam = new Param();
99
- const downloadRouter = new ApiRouter();
100
- downloadRouter.get`${fileCabinetId}/files/${filePathParam}+`(async (ctx) => {
101
- const cabinetId = fileCabinetId.param(ctx) || "_";
102
- const filePath = filePathParam.params(ctx);
103
- if (!filePath?.length) return e404();
104
- const cabinet = await getCabinet(cabinetId);
105
- if (!cabinet) return e404();
106
- let link = "";
107
- switch (cabinet.mode) {
108
- case "map": {
109
- const store = useConnection("fs", cabinet.storeId);
110
- const path = [...cabinet.storePath?.split("/")?.filter(Boolean) || [], ...filePath].join("/");
111
- link = await store.urlRead(path);
112
- break;
113
- }
114
- }
115
- if (!link) return e404();
116
- ctx.responseHeaders.set("Location", link);
117
- ctx.status = 302;
118
- });
119
- var download_default = downloadRouter;
120
-
121
- //#endregion
122
- //#region plugins/file/routers/index.mjs
123
- const clientApi = { fileCabinets: api_default };
124
- const api = { fileCabinets: download_default };
125
-
126
- //#endregion
127
- export { api, clientApi };
128
- //# sourceMappingURL=routers.yongdall.mjs.map
82
+ export { api_default as fileCabinets };
83
+ //# sourceMappingURL=api-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.mjs","names":[],"sources":["../../../plugins/file/common/replacePath.mjs","../../../plugins/file/routers/api.mjs"],"sourcesContent":["\n/**\n * \n * @param {string} path \n * @param {Date} date \n * @param {Record<string, any>} data \n */\nexport default function replacePath(path, date, data) {\n\treturn path.replace(/\\{([a-zA-Z]+)\\}/g, (_, v) => {\n\t\tswitch (v) {\n\t\t\tcase 'YYYY':\n\t\t\tcase 'YYY':\n\t\t\tcase 'YY':\n\t\t\t\tconst year = date.getFullYear();\n\t\t\t\treturn `${year}`.slice(-v.length);\n\t\t\tcase 'MM':\n\t\t\tcase 'M':\n\t\t\t\tconst month = date.getMonth() + 1;\n\t\t\t\treturn `${month}`.padStart(v.length, '0');\n\t\t\tcase 'DD':\n\t\t\tcase 'D':\n\t\t\t\tconst day = date.getDate();\n\t\t\t\treturn `${day}`.padStart(v.length, '0');\n\t\t\tcase 'hh':\n\t\t\tcase 'h':\n\t\t\t\tconst hour = date.getHours();\n\t\t\t\treturn `${hour}`.padStart(v.length, '0');\n\t\t\tcase 'mm':\n\t\t\tcase 'm':\n\t\t\t\tconst minute = date.getMinutes();\n\t\t\t\treturn `${minute}`.padStart(v.length, '0');\n\t\t\tcase 'ss':\n\t\t\tcase 's':\n\t\t\t\tconst second = date.getSeconds();\n\t\t\t\treturn `${second}`.padStart(v.length, '0');\n\t\t\tdefault: {\n\t\t\t\tif (Object.hasOwn(data, v)) {\n\t\t\t\t\treturn data[v];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _;\n\t});\n}\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { e404 } from '@yongdall/http';\nimport { getUser } from '@yongdall/core';\nimport { useConnection } from '@yongdall/connection';\nimport getCabinet from '../getCabinet.mjs';\nimport replacePath from '../common/replacePath.mjs';\n\n\n\n\nconst fileCabinetId = new Param();\nconst filePathParam = new Param();\n\n\n\nconst apiRouter = new ApiRouter();\n\napiRouter.put`${fileCabinetId}/files/${filePathParam}+`(async ctx => {\n\tconst cabinetId = fileCabinetId.param(ctx) || '_';\n\tconst filePath = filePathParam.params(ctx);\n\tif (!filePath?.length) { return e404(); }\n\tconst paths = filePath;\n\tconst path = filePath.join('/');\n\tconst fileName = paths.pop()?.replace(/[\\\\\\/#?{}~@:&^$()]/g, '') || '';\n\tif (!fileName) { return e404(); }\n\tconst dirname = paths.join('/');\n\n\tconst index = fileName.lastIndexOf('.');\n\tconst filename = fileName.slice(0, index) || '_';\n\tconst extname = index >= 0 ? fileName.slice(index) : '';\n\n\tconst cabinet = await getCabinet(cabinetId);\n\tif (!cabinet) { return e404(); }\n\tconst uploadPath = cabinet.uploadPath;\n\tconst subPath = uploadPath ? replacePath(uploadPath, new Date, {\n\t\tuser: await getUser() || '_', filename, extname, dirname,\n\t}) : path;\n\t/** @type {{id?: number, link: string; domain: string; path: string}?} */\n\tlet link = null;\n\tswitch (cabinet.mode) {\n\t\tcase 'map': {\n\t\t\tconst store = useConnection('fs', cabinet.storeId);\n\t\t\tconst path = [\n\t\t\t\t...cabinet.storePath?.split('/')?.filter(Boolean) || [],\n\t\t\t\tsubPath,\n\t\t\t].join('/');\n\t\t\tlink = {\n\t\t\t\tlink: await store.urlWrite(path),\n\t\t\t\tpath: subPath, domain: cabinetId,\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!link) { return e404(); }\n\n\tctx.responseHeaders.set('Location', link.link);\n\treturn link;\n});\nexport default apiRouter;\n"],"mappings":";;;;;;;;;;;;AAOA,SAAwB,YAAY,MAAM,MAAM,MAAM;AACrD,QAAO,KAAK,QAAQ,qBAAqB,GAAG,MAAM;AACjD,UAAQ,GAAR;GACC,KAAK;GACL,KAAK;GACL,KAAK,KAEJ,QAAO,GADM,KAAK,aAAa,GACd,MAAM,CAAC,EAAE,OAAO;GAClC,KAAK;GACL,KAAK,IAEJ,QAAO,GADO,KAAK,UAAU,GAAG,IACd,SAAS,EAAE,QAAQ,IAAI;GAC1C,KAAK;GACL,KAAK,IAEJ,QAAO,GADK,KAAK,SAAS,GACV,SAAS,EAAE,QAAQ,IAAI;GACxC,KAAK;GACL,KAAK,IAEJ,QAAO,GADM,KAAK,UAAU,GACX,SAAS,EAAE,QAAQ,IAAI;GACzC,KAAK;GACL,KAAK,IAEJ,QAAO,GADQ,KAAK,YAAY,GACb,SAAS,EAAE,QAAQ,IAAI;GAC3C,KAAK;GACL,KAAK,IAEJ,QAAO,GADQ,KAAK,YAAY,GACb,SAAS,EAAE,QAAQ,IAAI;GAC3C,QACC,KAAI,OAAO,OAAO,MAAM,EAAE,CACzB,QAAO,KAAK;;AAIf,SAAO;GACN;;;;;AChCH,MAAM,gBAAgB,IAAI,OAAO;AACjC,MAAM,gBAAgB,IAAI,OAAO;AAIjC,MAAM,YAAY,IAAI,WAAW;AAEjC,UAAU,GAAG,GAAG,cAAc,SAAS,cAAc,GAAG,OAAM,QAAO;CACpE,MAAM,YAAY,cAAc,MAAM,IAAI,IAAI;CAC9C,MAAM,WAAW,cAAc,OAAO,IAAI;AAC1C,KAAI,CAAC,UAAU,OAAU,QAAO,MAAM;CACtC,MAAM,QAAQ;CACd,MAAM,OAAO,SAAS,KAAK,IAAI;CAC/B,MAAM,WAAW,MAAM,KAAK,EAAE,QAAQ,uBAAuB,GAAG,IAAI;AACpE,KAAI,CAAC,SAAY,QAAO,MAAM;CAC9B,MAAM,UAAU,MAAM,KAAK,IAAI;CAE/B,MAAM,QAAQ,SAAS,YAAY,IAAI;CACvC,MAAM,WAAW,SAAS,MAAM,GAAG,MAAM,IAAI;CAC7C,MAAM,UAAU,SAAS,IAAI,SAAS,MAAM,MAAM,GAAG;CAErD,MAAM,UAAU,MAAM,WAAW,UAAU;AAC3C,KAAI,CAAC,QAAW,QAAO,MAAM;CAC7B,MAAM,aAAa,QAAQ;CAC3B,MAAM,UAAU,aAAa,YAAY,4BAAY,IAAI,MAAI,EAAE;EAC9D,MAAM,MAAM,SAAS,IAAI;EAAK;EAAU;EAAS;EACjD,CAAC,GAAG;;CAEL,IAAI,OAAO;AACX,SAAQ,QAAQ,MAAhB;EACC,KAAK,OAAO;GACX,MAAM,QAAQ,cAAc,MAAM,QAAQ,QAAQ;GAClD,MAAM,OAAO,CACZ,GAAG,QAAQ,WAAW,MAAM,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,EACvD,QACA,CAAC,KAAK,IAAI;AACX,UAAO;IACN,MAAM,MAAM,MAAM,SAAS,KAAK;IAChC,MAAM;IAAS,QAAQ;IACvB;AACD;;;AAGF,KAAI,CAAC,KAAQ,QAAO,MAAM;AAE1B,KAAI,gBAAgB,IAAI,YAAY,KAAK,KAAK;AAC9C,QAAO;EACN;AACF,kBAAe"}
@@ -0,0 +1,32 @@
1
+ import { t as getCabinet } from "../getCabinet-oLwx_M7c.mjs";
2
+ import { ApiRouter, Param, e404 } from "@yongdall/http";
3
+ import { useConnection } from "@yongdall/connection";
4
+
5
+ //#region plugins/file/routers/download.mjs
6
+ const fileCabinetId = new Param();
7
+ const filePathParam = new Param();
8
+ const downloadRouter = new ApiRouter();
9
+ downloadRouter.get`${fileCabinetId}/files/${filePathParam}+`(async (ctx) => {
10
+ const cabinetId = fileCabinetId.param(ctx) || "_";
11
+ const filePath = filePathParam.params(ctx);
12
+ if (!filePath?.length) return e404();
13
+ const cabinet = await getCabinet(cabinetId);
14
+ if (!cabinet) return e404();
15
+ let link = "";
16
+ switch (cabinet.mode) {
17
+ case "map": {
18
+ const store = useConnection("fs", cabinet.storeId);
19
+ const path = [...cabinet.storePath?.split("/")?.filter(Boolean) || [], ...filePath].join("/");
20
+ link = await store.urlRead(path);
21
+ break;
22
+ }
23
+ }
24
+ if (!link) return e404();
25
+ ctx.responseHeaders.set("Location", link);
26
+ ctx.status = 302;
27
+ });
28
+ var download_default = downloadRouter;
29
+
30
+ //#endregion
31
+ export { download_default as fileCabinets };
32
+ //# sourceMappingURL=routes@api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes@api.mjs","names":[],"sources":["../../../plugins/file/routers/download.mjs"],"sourcesContent":["import { ApiRouter, Param } from '@yongdall/http';\nimport { e404 } from '@yongdall/http';\nimport { useConnection } from '@yongdall/connection';\nimport getCabinet from '../getCabinet.mjs';\n\n\nconst fileCabinetId = new Param();\nconst filePathParam = new Param();\nconst downloadRouter = new ApiRouter();\n\ndownloadRouter.get`${fileCabinetId}/files/${filePathParam}+`(async ctx => {\n\tconst cabinetId = fileCabinetId.param(ctx) || '_';\n\tconst filePath = filePathParam.params(ctx);\n\tif (!filePath?.length) { return e404(); }\n\tconst cabinet = await getCabinet(cabinetId);\n\tif (!cabinet) { return e404(); }\n\n\tlet link = '';\n\tswitch (cabinet.mode) {\n\t\tcase 'map': {\n\t\t\tconst store = useConnection('fs', cabinet.storeId);\n\t\t\tconst path = [\n\t\t\t\t...cabinet.storePath?.split('/')?.filter(Boolean) || [],\n\t\t\t\t...filePath,\n\t\t\t].join('/');\n\t\t\tlink = await store.urlRead(path);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!link) { return e404(); }\n\tctx.responseHeaders.set('Location', link);\n\tctx.status = 302;\n});\nexport default downloadRouter;\n"],"mappings":";;;;;AAMA,MAAM,gBAAgB,IAAI,OAAO;AACjC,MAAM,gBAAgB,IAAI,OAAO;AACjC,MAAM,iBAAiB,IAAI,WAAW;AAEtC,eAAe,GAAG,GAAG,cAAc,SAAS,cAAc,GAAG,OAAM,QAAO;CACzE,MAAM,YAAY,cAAc,MAAM,IAAI,IAAI;CAC9C,MAAM,WAAW,cAAc,OAAO,IAAI;AAC1C,KAAI,CAAC,UAAU,OAAU,QAAO,MAAM;CACtC,MAAM,UAAU,MAAM,WAAW,UAAU;AAC3C,KAAI,CAAC,QAAW,QAAO,MAAM;CAE7B,IAAI,OAAO;AACX,SAAQ,QAAQ,MAAhB;EACC,KAAK,OAAO;GACX,MAAM,QAAQ,cAAc,MAAM,QAAQ,QAAQ;GAClD,MAAM,OAAO,CACZ,GAAG,QAAQ,WAAW,MAAM,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,EACvD,GAAG,SACH,CAAC,KAAK,IAAI;AACX,UAAO,MAAM,MAAM,QAAQ,KAAK;AAChC;;;AAGF,KAAI,CAAC,KAAQ,QAAO,MAAM;AAC1B,KAAI,gBAAgB,IAAI,YAAY,KAAK;AACzC,KAAI,SAAS;EACZ;AACF,uBAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"routers.yongdall.mjs","names":["fileCabinetId","filePathParam","apiRouter","download"],"sources":["../../plugins/file/getCabinet.mjs","../../plugins/file/common/replacePath.mjs","../../plugins/file/routers/api.mjs","../../plugins/file/routers/download.mjs","../../plugins/file/routers/index.mjs"],"sourcesContent":["import { getModel } from '@yongdall/core';\nimport { actions, Query } from '@yongdall/model';\nimport { useDatabase } from '@yongdall/connection';\n\n\n\n/**\n * \n * @param {string} cabinetId \n * @returns {Promise<{mode: string; storeId: string; storePath: string; uploadPath: string; public: boolean}?>}\n */\nexport default async function getCabinet(cabinetId) {\n\n\tconst pageModel = await getModel('fileCabinet');\n\tif (!pageModel) { return null; }\n\n\tconst sql = new Query(pageModel, true).where('id', cabinetId);\n\tconst database = useDatabase(pageModel.databaseId);\n\treturn await database.call(actions.first(sql)) || null;\n}\n","\n/**\n * \n * @param {string} path \n * @param {Date} date \n * @param {Record<string, any>} data \n */\nexport default function replacePath(path, date, data) {\n\treturn path.replace(/\\{([a-zA-Z]+)\\}/g, (_, v) => {\n\t\tswitch (v) {\n\t\t\tcase 'YYYY':\n\t\t\tcase 'YYY':\n\t\t\tcase 'YY':\n\t\t\t\tconst year = date.getFullYear();\n\t\t\t\treturn `${year}`.slice(-v.length);\n\t\t\tcase 'MM':\n\t\t\tcase 'M':\n\t\t\t\tconst month = date.getMonth() + 1;\n\t\t\t\treturn `${month}`.padStart(v.length, '0');\n\t\t\tcase 'DD':\n\t\t\tcase 'D':\n\t\t\t\tconst day = date.getDate();\n\t\t\t\treturn `${day}`.padStart(v.length, '0');\n\t\t\tcase 'hh':\n\t\t\tcase 'h':\n\t\t\t\tconst hour = date.getHours();\n\t\t\t\treturn `${hour}`.padStart(v.length, '0');\n\t\t\tcase 'mm':\n\t\t\tcase 'm':\n\t\t\t\tconst minute = date.getMinutes();\n\t\t\t\treturn `${minute}`.padStart(v.length, '0');\n\t\t\tcase 'ss':\n\t\t\tcase 's':\n\t\t\t\tconst second = date.getSeconds();\n\t\t\t\treturn `${second}`.padStart(v.length, '0');\n\t\t\tdefault: {\n\t\t\t\tif (Object.hasOwn(data, v)) {\n\t\t\t\t\treturn data[v];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn _;\n\t});\n}\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { e404 } from '@yongdall/http';\nimport { getUser } from '@yongdall/core';\nimport { useConnection } from '@yongdall/connection';\nimport getCabinet from '../getCabinet.mjs';\nimport replacePath from '../common/replacePath.mjs';\n\n\n\n\nconst fileCabinetId = new Param();\nconst filePathParam = new Param();\n\n\n\nconst apiRouter = new ApiRouter();\n\napiRouter.put`${fileCabinetId}/files/${filePathParam}+`(async ctx => {\n\tconst cabinetId = fileCabinetId.param(ctx) || '_';\n\tconst filePath = filePathParam.params(ctx);\n\tif (!filePath?.length) { return e404(); }\n\tconst paths = filePath;\n\tconst path = filePath.join('/');\n\tconst fileName = paths.pop()?.replace(/[\\\\\\/#?{}~@:&^$()]/g, '') || '';\n\tif (!fileName) { return e404(); }\n\tconst dirname = paths.join('/');\n\n\tconst index = fileName.lastIndexOf('.');\n\tconst filename = fileName.slice(0, index) || '_';\n\tconst extname = index >= 0 ? fileName.slice(index) : '';\n\n\tconst cabinet = await getCabinet(cabinetId);\n\tif (!cabinet) { return e404(); }\n\tconst uploadPath = cabinet.uploadPath;\n\tconst subPath = uploadPath ? replacePath(uploadPath, new Date, {\n\t\tuser: await getUser() || '_', filename, extname, dirname,\n\t}) : path;\n\t/** @type {{id?: number, link: string; domain: string; path: string}?} */\n\tlet link = null;\n\tswitch (cabinet.mode) {\n\t\tcase 'map': {\n\t\t\tconst store = useConnection('fs', cabinet.storeId);\n\t\t\tconst path = [\n\t\t\t\t...cabinet.storePath?.split('/')?.filter(Boolean) || [],\n\t\t\t\tsubPath,\n\t\t\t].join('/');\n\t\t\tlink = {\n\t\t\t\tlink: await store.urlWrite(path),\n\t\t\t\tpath: subPath, domain: cabinetId,\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!link) { return e404(); }\n\n\tctx.responseHeaders.set('Location', link.link);\n\treturn link;\n});\nexport default apiRouter;\n","import { ApiRouter, Param } from '@yongdall/http';\nimport { e404 } from '@yongdall/http';\nimport { useConnection } from '@yongdall/connection';\nimport getCabinet from '../getCabinet.mjs';\n\n\nconst fileCabinetId = new Param();\nconst filePathParam = new Param();\nconst downloadRouter = new ApiRouter();\n\ndownloadRouter.get`${fileCabinetId}/files/${filePathParam}+`(async ctx => {\n\tconst cabinetId = fileCabinetId.param(ctx) || '_';\n\tconst filePath = filePathParam.params(ctx);\n\tif (!filePath?.length) { return e404(); }\n\tconst cabinet = await getCabinet(cabinetId);\n\tif (!cabinet) { return e404(); }\n\n\tlet link = '';\n\tswitch (cabinet.mode) {\n\t\tcase 'map': {\n\t\t\tconst store = useConnection('fs', cabinet.storeId);\n\t\t\tconst path = [\n\t\t\t\t...cabinet.storePath?.split('/')?.filter(Boolean) || [],\n\t\t\t\t...filePath,\n\t\t\t].join('/');\n\t\t\tlink = await store.urlRead(path);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!link) { return e404(); }\n\tctx.responseHeaders.set('Location', link);\n\tctx.status = 302;\n});\nexport default downloadRouter;\n","import apiRouter from './api.mjs';\nimport download from './download.mjs';\n\nexport const clientApi = {\n\tfileCabinets: apiRouter,\n}\nexport const api = {\n\tfileCabinets: download,\n}\n"],"mappings":";;;;;;;;;;;AAWA,eAA8B,WAAW,WAAW;CAEnD,MAAM,YAAY,MAAM,SAAS,cAAc;AAC/C,KAAI,CAAC,UAAa,QAAO;CAEzB,MAAM,MAAM,IAAI,MAAM,WAAW,KAAK,CAAC,MAAM,MAAM,UAAU;AAE7D,QAAO,MADU,YAAY,UAAU,WAAW,CAC5B,KAAK,QAAQ,MAAM,IAAI,CAAC,IAAI;;;;;;;;;;;ACXnD,SAAwB,YAAY,MAAM,MAAM,MAAM;AACrD,QAAO,KAAK,QAAQ,qBAAqB,GAAG,MAAM;AACjD,UAAQ,GAAR;GACC,KAAK;GACL,KAAK;GACL,KAAK,KAEJ,QAAO,GADM,KAAK,aAAa,GACd,MAAM,CAAC,EAAE,OAAO;GAClC,KAAK;GACL,KAAK,IAEJ,QAAO,GADO,KAAK,UAAU,GAAG,IACd,SAAS,EAAE,QAAQ,IAAI;GAC1C,KAAK;GACL,KAAK,IAEJ,QAAO,GADK,KAAK,SAAS,GACV,SAAS,EAAE,QAAQ,IAAI;GACxC,KAAK;GACL,KAAK,IAEJ,QAAO,GADM,KAAK,UAAU,GACX,SAAS,EAAE,QAAQ,IAAI;GACzC,KAAK;GACL,KAAK,IAEJ,QAAO,GADQ,KAAK,YAAY,GACb,SAAS,EAAE,QAAQ,IAAI;GAC3C,KAAK;GACL,KAAK,IAEJ,QAAO,GADQ,KAAK,YAAY,GACb,SAAS,EAAE,QAAQ,IAAI;GAC3C,QACC,KAAI,OAAO,OAAO,MAAM,EAAE,CACzB,QAAO,KAAK;;AAIf,SAAO;GACN;;;;;AChCH,MAAMA,kBAAgB,IAAI,OAAO;AACjC,MAAMC,kBAAgB,IAAI,OAAO;AAIjC,MAAM,YAAY,IAAI,WAAW;AAEjC,UAAU,GAAG,GAAGD,gBAAc,SAASC,gBAAc,GAAG,OAAM,QAAO;CACpE,MAAM,YAAYD,gBAAc,MAAM,IAAI,IAAI;CAC9C,MAAM,WAAWC,gBAAc,OAAO,IAAI;AAC1C,KAAI,CAAC,UAAU,OAAU,QAAO,MAAM;CACtC,MAAM,QAAQ;CACd,MAAM,OAAO,SAAS,KAAK,IAAI;CAC/B,MAAM,WAAW,MAAM,KAAK,EAAE,QAAQ,uBAAuB,GAAG,IAAI;AACpE,KAAI,CAAC,SAAY,QAAO,MAAM;CAC9B,MAAM,UAAU,MAAM,KAAK,IAAI;CAE/B,MAAM,QAAQ,SAAS,YAAY,IAAI;CACvC,MAAM,WAAW,SAAS,MAAM,GAAG,MAAM,IAAI;CAC7C,MAAM,UAAU,SAAS,IAAI,SAAS,MAAM,MAAM,GAAG;CAErD,MAAM,UAAU,MAAM,WAAW,UAAU;AAC3C,KAAI,CAAC,QAAW,QAAO,MAAM;CAC7B,MAAM,aAAa,QAAQ;CAC3B,MAAM,UAAU,aAAa,YAAY,4BAAY,IAAI,MAAI,EAAE;EAC9D,MAAM,MAAM,SAAS,IAAI;EAAK;EAAU;EAAS;EACjD,CAAC,GAAG;;CAEL,IAAI,OAAO;AACX,SAAQ,QAAQ,MAAhB;EACC,KAAK,OAAO;GACX,MAAM,QAAQ,cAAc,MAAM,QAAQ,QAAQ;GAClD,MAAM,OAAO,CACZ,GAAG,QAAQ,WAAW,MAAM,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,EACvD,QACA,CAAC,KAAK,IAAI;AACX,UAAO;IACN,MAAM,MAAM,MAAM,SAAS,KAAK;IAChC,MAAM;IAAS,QAAQ;IACvB;AACD;;;AAGF,KAAI,CAAC,KAAQ,QAAO,MAAM;AAE1B,KAAI,gBAAgB,IAAI,YAAY,KAAK,KAAK;AAC9C,QAAO;EACN;AACF,kBAAe;;;;ACpDf,MAAM,gBAAgB,IAAI,OAAO;AACjC,MAAM,gBAAgB,IAAI,OAAO;AACjC,MAAM,iBAAiB,IAAI,WAAW;AAEtC,eAAe,GAAG,GAAG,cAAc,SAAS,cAAc,GAAG,OAAM,QAAO;CACzE,MAAM,YAAY,cAAc,MAAM,IAAI,IAAI;CAC9C,MAAM,WAAW,cAAc,OAAO,IAAI;AAC1C,KAAI,CAAC,UAAU,OAAU,QAAO,MAAM;CACtC,MAAM,UAAU,MAAM,WAAW,UAAU;AAC3C,KAAI,CAAC,QAAW,QAAO,MAAM;CAE7B,IAAI,OAAO;AACX,SAAQ,QAAQ,MAAhB;EACC,KAAK,OAAO;GACX,MAAM,QAAQ,cAAc,MAAM,QAAQ,QAAQ;GAClD,MAAM,OAAO,CACZ,GAAG,QAAQ,WAAW,MAAM,IAAI,EAAE,OAAO,QAAQ,IAAI,EAAE,EACvD,GAAG,SACH,CAAC,KAAK,IAAI;AACX,UAAO,MAAM,MAAM,QAAQ,KAAK;AAChC;;;AAGF,KAAI,CAAC,KAAQ,QAAO,MAAM;AAC1B,KAAI,gBAAgB,IAAI,YAAY,KAAK;AACzC,KAAI,SAAS;EACZ;AACF,uBAAe;;;;AC9Bf,MAAa,YAAY,EACxB,cAAcC,aACd;AACD,MAAa,MAAM,EAClB,cAAcC,kBACd"}