@strapi/provider-upload-local 5.48.1 → 5.50.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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
1
  import { ReadStream } from 'fs';
5
2
  interface File {
6
3
  name: string;
@@ -33,6 +30,8 @@ declare const _default: {
33
30
  checkFileSize(file: File, options: CheckFileSizeOptions): void;
34
31
  uploadStream(file: File): Promise<void>;
35
32
  upload(file: File): Promise<void>;
33
+ replaceStream(newFile: File, oldFile: File): Promise<void>;
34
+ replace(newFile: File, oldFile: File): Promise<void>;
36
35
  delete(file: File): Promise<string | void>;
37
36
  };
38
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,OAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAQpC,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;mDAG+C,WAAW;4BAiBjC,IAAI,WAAW,oBAAoB;2BAkBpC,IAAI,GAAG,QAAQ,IAAI,CAAC;qBAuB1B,IAAI,GAAG,QAAQ,IAAI,CAAC;qBAoBpB,IAAI,GAAG,QAAQ,MAAM,GAAG,IAAI,CAAC;;;AA/EhD,wBAoGE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAQpC,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,UAAU,WAAW;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,oBAAoB;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;mDAG+C,WAAW;4BAiBjC,IAAI,WAAW,oBAAoB;2BAkBpC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;qBAuB1B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;+BAoBV,IAAI,WAAW,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;yBAoCzC,IAAI,WAAW,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;qBAiCvC,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;;;AApJhD,wBAyKE"}
package/dist/index.js CHANGED
@@ -6,7 +6,10 @@ var path = require('path');
6
6
  var fse = require('fs-extra');
7
7
  var utils = require('@strapi/utils');
8
8
 
9
- function _interopNamespaceDefault(e) {
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
10
13
  var n = Object.create(null);
11
14
  if (e) {
12
15
  Object.keys(e).forEach(function (k) {
@@ -23,7 +26,10 @@ function _interopNamespaceDefault(e) {
23
26
  return Object.freeze(n);
24
27
  }
25
28
 
26
- var utils__namespace = /*#__PURE__*/_interopNamespaceDefault(utils);
29
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
30
+ var path__default = /*#__PURE__*/_interopDefault(path);
31
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
32
+ var utils__namespace = /*#__PURE__*/_interopNamespace(utils);
27
33
 
28
34
  const { PayloadTooLargeError } = utils__namespace.errors;
29
35
  const { kbytesToBytes, bytesToHumanReadable } = utils__namespace.file;
@@ -35,8 +41,8 @@ var index = {
35
41
  process.emitWarning('[deprecated] In future versions, "sizeLimit" argument will be ignored from upload.config.providerOptions. Move it to upload.config');
36
42
  }
37
43
  // Ensure uploads folder exists
38
- const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);
39
- if (!fse.pathExistsSync(uploadPath)) {
44
+ const uploadPath = path__default.default.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);
45
+ if (!fse__default.default.pathExistsSync(uploadPath)) {
40
46
  throw new Error(`The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`);
41
47
  }
42
48
  return {
@@ -55,7 +61,7 @@ var index = {
55
61
  }
56
62
  const { stream: stream$1 } = file;
57
63
  return new Promise((resolve, reject)=>{
58
- stream.pipeline(stream$1, fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)), (err)=>{
64
+ stream.pipeline(stream$1, fs__default.default.createWriteStream(path__default.default.join(uploadPath, `${file.hash}${file.ext}`)), (err)=>{
59
65
  if (err) {
60
66
  return reject(err);
61
67
  }
@@ -71,7 +77,7 @@ var index = {
71
77
  const { buffer } = file;
72
78
  return new Promise((resolve, reject)=>{
73
79
  // write file in public/assets folder
74
- fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err)=>{
80
+ fs__default.default.writeFile(path__default.default.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err)=>{
75
81
  if (err) {
76
82
  return reject(err);
77
83
  }
@@ -80,15 +86,72 @@ var index = {
80
86
  });
81
87
  });
82
88
  },
89
+ replaceStream (newFile, oldFile) {
90
+ if (!newFile.stream) {
91
+ return Promise.reject(new Error('Missing file stream'));
92
+ }
93
+ // If the destination path is unchanged, writing the new file overwrites
94
+ // the old one atomically. If the hash or extension changed, write the
95
+ // new file first then unlink the old one so we never leave a gap.
96
+ const newPath = path__default.default.join(uploadPath, `${newFile.hash}${newFile.ext}`);
97
+ const oldPath = path__default.default.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);
98
+ const samePath = newPath === oldPath;
99
+ const { stream: stream$1 } = newFile;
100
+ return new Promise((resolve, reject)=>{
101
+ stream.pipeline(stream$1, fs__default.default.createWriteStream(newPath), (err)=>{
102
+ if (err) {
103
+ return reject(err);
104
+ }
105
+ newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;
106
+ if (!samePath && fs__default.default.existsSync(oldPath)) {
107
+ fs__default.default.unlink(oldPath, (unlinkErr)=>{
108
+ if (unlinkErr) {
109
+ return reject(unlinkErr);
110
+ }
111
+ resolve();
112
+ });
113
+ return;
114
+ }
115
+ resolve();
116
+ });
117
+ });
118
+ },
119
+ replace (newFile, oldFile) {
120
+ if (!newFile.buffer) {
121
+ return Promise.reject(new Error('Missing file buffer'));
122
+ }
123
+ const newPath = path__default.default.join(uploadPath, `${newFile.hash}${newFile.ext}`);
124
+ const oldPath = path__default.default.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);
125
+ const samePath = newPath === oldPath;
126
+ const { buffer } = newFile;
127
+ return new Promise((resolve, reject)=>{
128
+ fs__default.default.writeFile(newPath, buffer, (err)=>{
129
+ if (err) {
130
+ return reject(err);
131
+ }
132
+ newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;
133
+ if (!samePath && fs__default.default.existsSync(oldPath)) {
134
+ fs__default.default.unlink(oldPath, (unlinkErr)=>{
135
+ if (unlinkErr) {
136
+ return reject(unlinkErr);
137
+ }
138
+ resolve();
139
+ });
140
+ return;
141
+ }
142
+ resolve();
143
+ });
144
+ });
145
+ },
83
146
  delete (file) {
84
147
  return new Promise((resolve, reject)=>{
85
- const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);
86
- if (!fs.existsSync(filePath)) {
148
+ const filePath = path__default.default.join(uploadPath, `${file.hash}${file.ext}`);
149
+ if (!fs__default.default.existsSync(filePath)) {
87
150
  resolve("File doesn't exist");
88
151
  return;
89
152
  }
90
153
  // remove file from public/assets folder
91
- fs.unlink(filePath, (err)=>{
154
+ fs__default.default.unlink(filePath, (err)=>{
92
155
  if (err) {
93
156
  return reject(err);
94
157
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { pipeline } from 'stream';\nimport fs, { ReadStream } from 'fs';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport * as utils from '@strapi/utils';\n\n// Needed to load global.strapi without having to put @strapi/types in the regular dependencies\nimport type {} from '@strapi/types';\n\ninterface File {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record<string, unknown>;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record<string, unknown>;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nconst { PayloadTooLargeError } = utils.errors;\nconst { kbytesToBytes, bytesToHumanReadable } = utils.file;\n\nconst UPLOADS_FOLDER_NAME = 'uploads';\n\ninterface InitOptions {\n sizeLimit?: number;\n}\n\ninterface CheckFileSizeOptions {\n sizeLimit?: number;\n}\n\nexport default {\n init({ sizeLimit: providerOptionsSizeLimit }: InitOptions = {}) {\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n process.emitWarning(\n '[deprecated] In future versions, \"sizeLimit\" argument will be ignored from upload.config.providerOptions. Move it to upload.config'\n );\n }\n\n // Ensure uploads folder exists\n const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);\n if (!fse.pathExistsSync(uploadPath)) {\n throw new Error(\n `The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n\n return {\n checkFileSize(file: File, options: CheckFileSizeOptions) {\n const { sizeLimit } = options ?? {};\n\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n if (kbytesToBytes(file.size) > providerOptionsSizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(\n providerOptionsSizeLimit\n )}.`\n );\n } else if (sizeLimit) {\n if (kbytesToBytes(file.size) > sizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n uploadStream(file: File): Promise<void> {\n if (!file.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n const { stream } = file;\n\n return new Promise((resolve, reject) => {\n pipeline(\n stream,\n fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)),\n (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n }\n );\n });\n },\n upload(file: File): Promise<void> {\n if (!file.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const { buffer } = file;\n\n return new Promise((resolve, reject) => {\n // write file in public/assets folder\n fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n });\n });\n },\n delete(file: File): Promise<string | void> {\n return new Promise((resolve, reject) => {\n const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);\n\n if (!fs.existsSync(filePath)) {\n resolve(\"File doesn't exist\");\n return;\n }\n\n // remove file from public/assets folder\n fs.unlink(filePath, (err) => {\n if (err) {\n return reject(err);\n }\n\n resolve();\n });\n });\n },\n };\n },\n};\n"],"names":["PayloadTooLargeError","utils","errors","kbytesToBytes","bytesToHumanReadable","file","UPLOADS_FOLDER_NAME","init","sizeLimit","providerOptionsSizeLimit","process","emitWarning","uploadPath","path","resolve","strapi","dirs","static","public","fse","pathExistsSync","Error","checkFileSize","options","size","name","uploadStream","stream","Promise","reject","pipeline","fs","createWriteStream","join","hash","ext","err","url","upload","buffer","writeFile","delete","filePath","existsSync","unlink"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { pipeline } from 'stream';\nimport fs, { ReadStream } from 'fs';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport * as utils from '@strapi/utils';\n\n// Needed to load global.strapi without having to put @strapi/types in the regular dependencies\nimport type {} from '@strapi/types';\n\ninterface File {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record<string, unknown>;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record<string, unknown>;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nconst { PayloadTooLargeError } = utils.errors;\nconst { kbytesToBytes, bytesToHumanReadable } = utils.file;\n\nconst UPLOADS_FOLDER_NAME = 'uploads';\n\ninterface InitOptions {\n sizeLimit?: number;\n}\n\ninterface CheckFileSizeOptions {\n sizeLimit?: number;\n}\n\nexport default {\n init({ sizeLimit: providerOptionsSizeLimit }: InitOptions = {}) {\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n process.emitWarning(\n '[deprecated] In future versions, \"sizeLimit\" argument will be ignored from upload.config.providerOptions. Move it to upload.config'\n );\n }\n\n // Ensure uploads folder exists\n const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);\n if (!fse.pathExistsSync(uploadPath)) {\n throw new Error(\n `The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n\n return {\n checkFileSize(file: File, options: CheckFileSizeOptions) {\n const { sizeLimit } = options ?? {};\n\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n if (kbytesToBytes(file.size) > providerOptionsSizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(\n providerOptionsSizeLimit\n )}.`\n );\n } else if (sizeLimit) {\n if (kbytesToBytes(file.size) > sizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n uploadStream(file: File): Promise<void> {\n if (!file.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n const { stream } = file;\n\n return new Promise((resolve, reject) => {\n pipeline(\n stream,\n fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)),\n (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n }\n );\n });\n },\n upload(file: File): Promise<void> {\n if (!file.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const { buffer } = file;\n\n return new Promise((resolve, reject) => {\n // write file in public/assets folder\n fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n });\n });\n },\n replaceStream(newFile: File, oldFile: File): Promise<void> {\n if (!newFile.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n // If the destination path is unchanged, writing the new file overwrites\n // the old one atomically. If the hash or extension changed, write the\n // new file first then unlink the old one so we never leave a gap.\n const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);\n const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);\n const samePath = newPath === oldPath;\n\n const { stream } = newFile;\n\n return new Promise((resolve, reject) => {\n pipeline(stream, fs.createWriteStream(newPath), (err) => {\n if (err) {\n return reject(err);\n }\n\n newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;\n\n if (!samePath && fs.existsSync(oldPath)) {\n fs.unlink(oldPath, (unlinkErr) => {\n if (unlinkErr) {\n return reject(unlinkErr);\n }\n resolve();\n });\n return;\n }\n\n resolve();\n });\n });\n },\n replace(newFile: File, oldFile: File): Promise<void> {\n if (!newFile.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);\n const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);\n const samePath = newPath === oldPath;\n\n const { buffer } = newFile;\n\n return new Promise((resolve, reject) => {\n fs.writeFile(newPath, buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;\n\n if (!samePath && fs.existsSync(oldPath)) {\n fs.unlink(oldPath, (unlinkErr) => {\n if (unlinkErr) {\n return reject(unlinkErr);\n }\n resolve();\n });\n return;\n }\n\n resolve();\n });\n });\n },\n delete(file: File): Promise<string | void> {\n return new Promise((resolve, reject) => {\n const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);\n\n if (!fs.existsSync(filePath)) {\n resolve(\"File doesn't exist\");\n return;\n }\n\n // remove file from public/assets folder\n fs.unlink(filePath, (err) => {\n if (err) {\n return reject(err);\n }\n\n resolve();\n });\n });\n },\n };\n },\n};\n"],"names":["PayloadTooLargeError","utils","errors","kbytesToBytes","bytesToHumanReadable","file","UPLOADS_FOLDER_NAME","init","sizeLimit","providerOptionsSizeLimit","process","emitWarning","uploadPath","path","resolve","strapi","dirs","static","public","fse","pathExistsSync","Error","checkFileSize","options","size","name","uploadStream","stream","Promise","reject","pipeline","fs","createWriteStream","join","hash","ext","err","url","upload","buffer","writeFile","replaceStream","newFile","oldFile","newPath","oldPath","samePath","existsSync","unlink","unlinkErr","replace","delete","filePath"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAM,EAAEA,oBAAoB,EAAE,GAAGC,iBAAMC,MAAM;AAC7C,MAAM,EAAEC,aAAa,EAAEC,oBAAoB,EAAE,GAAGH,iBAAMI,IAAI;AAE1D,MAAMC,mBAAAA,GAAsB,SAAA;AAU5B,YAAe;AACbC,IAAAA,IAAAA,CAAAA,CAAK,EAAEC,SAAAA,EAAWC,wBAAwB,EAAe,GAAG,EAAE,EAAA;;AAE5D,QAAA,IAAIA,wBAAAA,EAA0B;AAC5BC,YAAAA,OAAAA,CAAQC,WAAW,CACjB,oIAAA,CAAA;AAEJ,QAAA;;QAGA,MAAMC,UAAAA,GAAaC,qBAAAA,CAAKC,OAAO,CAACC,MAAAA,CAAOC,IAAI,CAACC,MAAM,CAACC,MAAM,EAAEZ,mBAAAA,CAAAA;AAC3D,QAAA,IAAI,CAACa,oBAAAA,CAAIC,cAAc,CAACR,UAAAA,CAAAA,EAAa;AACnC,YAAA,MAAM,IAAIS,KAAAA,CACR,CAAC,mBAAmB,EAAET,UAAAA,CAAW,iEAAiE,CAAC,CAAA;AAEvG,QAAA;QAEA,OAAO;YACLU,aAAAA,CAAAA,CAAcjB,IAAU,EAAEkB,OAA6B,EAAA;AACrD,gBAAA,MAAM,EAAEf,SAAS,EAAE,GAAGe,WAAW,EAAC;;AAGlC,gBAAA,IAAId,wBAAAA,EAA0B;AAC5B,oBAAA,IAAIN,cAAcE,IAAAA,CAAKmB,IAAI,CAAA,GAAIf,wBAAAA,EAC7B,MAAM,IAAIT,oBAAAA,CACR,CAAA,EAAGK,IAAAA,CAAKoB,IAAI,CAAC,uBAAuB,EAAErB,oBAAAA,CACpCK,wBAAAA,CAAAA,CACA,CAAC,CAAC,CAAA;AAEV,gBAAA,CAAA,MAAO,IAAID,SAAAA,EAAW;AACpB,oBAAA,IAAIL,cAAcE,IAAAA,CAAKmB,IAAI,CAAA,GAAIhB,SAAAA,EAC7B,MAAM,IAAIR,oBAAAA,CACR,CAAA,EAAGK,IAAAA,CAAKoB,IAAI,CAAC,uBAAuB,EAAErB,oBAAAA,CAAqBI,SAAAA,CAAAA,CAAW,CAAC,CAAC,CAAA;AAE9E,gBAAA;AACF,YAAA,CAAA;AACAkB,YAAAA,YAAAA,CAAAA,CAAarB,IAAU,EAAA;gBACrB,IAAI,CAACA,IAAAA,CAAKsB,MAAM,EAAE;AAChB,oBAAA,OAAOC,OAAAA,CAAQC,MAAM,CAAC,IAAIR,KAAAA,CAAM,qBAAA,CAAA,CAAA;AAClC,gBAAA;gBAEA,MAAM,UAAEM,QAAM,EAAE,GAAGtB,IAAAA;gBAEnB,OAAO,IAAIuB,OAAAA,CAAQ,CAACd,OAAAA,EAASe,MAAAA,GAAAA;AAC3BC,oBAAAA,eAAAA,CACEH,UACAI,mBAAAA,CAAGC,iBAAiB,CAACnB,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAGP,IAAAA,CAAK6B,IAAI,CAAA,EAAG7B,IAAAA,CAAK8B,GAAG,CAAA,CAAE,IACpE,CAACC,GAAAA,GAAAA;AACC,wBAAA,IAAIA,GAAAA,EAAK;AACP,4BAAA,OAAOP,MAAAA,CAAOO,GAAAA,CAAAA;AAChB,wBAAA;AAEA/B,wBAAAA,IAAAA,CAAKgC,GAAG,GAAG,CAAC,CAAC,EAAE/B,mBAAAA,CAAoB,CAAC,EAAED,IAAAA,CAAK6B,IAAI,CAAA,EAAG7B,IAAAA,CAAK8B,GAAG,CAAA,CAAE;AAE5DrB,wBAAAA,OAAAA,EAAAA;AACF,oBAAA,CAAA,CAAA;AAEJ,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA;AACAwB,YAAAA,MAAAA,CAAAA,CAAOjC,IAAU,EAAA;gBACf,IAAI,CAACA,IAAAA,CAAKkC,MAAM,EAAE;AAChB,oBAAA,OAAOX,OAAAA,CAAQC,MAAM,CAAC,IAAIR,KAAAA,CAAM,qBAAA,CAAA,CAAA;AAClC,gBAAA;gBAEA,MAAM,EAAEkB,MAAM,EAAE,GAAGlC,IAAAA;gBAEnB,OAAO,IAAIuB,OAAAA,CAAQ,CAACd,OAAAA,EAASe,MAAAA,GAAAA;;AAE3BE,oBAAAA,mBAAAA,CAAGS,SAAS,CAAC3B,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAGP,IAAAA,CAAK6B,IAAI,GAAG7B,IAAAA,CAAK8B,GAAG,CAAA,CAAE,CAAA,EAAGI,QAAQ,CAACH,GAAAA,GAAAA;AACtE,wBAAA,IAAIA,GAAAA,EAAK;AACP,4BAAA,OAAOP,MAAAA,CAAOO,GAAAA,CAAAA;AAChB,wBAAA;AAEA/B,wBAAAA,IAAAA,CAAKgC,GAAG,GAAG,CAAC,CAAC,EAAE/B,mBAAAA,CAAoB,CAAC,EAAED,IAAAA,CAAK6B,IAAI,CAAA,EAAG7B,IAAAA,CAAK8B,GAAG,CAAA,CAAE;AAE5DrB,wBAAAA,OAAAA,EAAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA;YACA2B,aAAAA,CAAAA,CAAcC,OAAa,EAAEC,OAAa,EAAA;gBACxC,IAAI,CAACD,OAAAA,CAAQf,MAAM,EAAE;AACnB,oBAAA,OAAOC,OAAAA,CAAQC,MAAM,CAAC,IAAIR,KAAAA,CAAM,qBAAA,CAAA,CAAA;AAClC,gBAAA;;;;gBAKA,MAAMuB,OAAAA,GAAU/B,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAG8B,OAAAA,CAAQR,IAAI,CAAA,EAAGQ,OAAAA,CAAQP,GAAG,CAAA,CAAE,CAAA;gBACrE,MAAMU,OAAAA,GAAUhC,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAG+B,OAAAA,CAAQT,IAAI,CAAA,EAAGS,OAAAA,CAAQR,GAAG,CAAA,CAAE,CAAA;AACrE,gBAAA,MAAMW,WAAWF,OAAAA,KAAYC,OAAAA;gBAE7B,MAAM,UAAElB,QAAM,EAAE,GAAGe,OAAAA;gBAEnB,OAAO,IAAId,OAAAA,CAAQ,CAACd,OAAAA,EAASe,MAAAA,GAAAA;AAC3BC,oBAAAA,eAAAA,CAASH,QAAAA,EAAQI,mBAAAA,CAAGC,iBAAiB,CAACY,UAAU,CAACR,GAAAA,GAAAA;AAC/C,wBAAA,IAAIA,GAAAA,EAAK;AACP,4BAAA,OAAOP,MAAAA,CAAOO,GAAAA,CAAAA;AAChB,wBAAA;AAEAM,wBAAAA,OAAAA,CAAQL,GAAG,GAAG,CAAC,CAAC,EAAE/B,mBAAAA,CAAoB,CAAC,EAAEoC,OAAAA,CAAQR,IAAI,CAAA,EAAGQ,OAAAA,CAAQP,GAAG,CAAA,CAAE;AAErE,wBAAA,IAAI,CAACW,QAAAA,IAAYf,mBAAAA,CAAGgB,UAAU,CAACF,OAAAA,CAAAA,EAAU;4BACvCd,mBAAAA,CAAGiB,MAAM,CAACH,OAAAA,EAAS,CAACI,SAAAA,GAAAA;AAClB,gCAAA,IAAIA,SAAAA,EAAW;AACb,oCAAA,OAAOpB,MAAAA,CAAOoB,SAAAA,CAAAA;AAChB,gCAAA;AACAnC,gCAAAA,OAAAA,EAAAA;AACF,4BAAA,CAAA,CAAA;AACA,4BAAA;AACF,wBAAA;AAEAA,wBAAAA,OAAAA,EAAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA;YACAoC,OAAAA,CAAAA,CAAQR,OAAa,EAAEC,OAAa,EAAA;gBAClC,IAAI,CAACD,OAAAA,CAAQH,MAAM,EAAE;AACnB,oBAAA,OAAOX,OAAAA,CAAQC,MAAM,CAAC,IAAIR,KAAAA,CAAM,qBAAA,CAAA,CAAA;AAClC,gBAAA;gBAEA,MAAMuB,OAAAA,GAAU/B,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAG8B,OAAAA,CAAQR,IAAI,CAAA,EAAGQ,OAAAA,CAAQP,GAAG,CAAA,CAAE,CAAA;gBACrE,MAAMU,OAAAA,GAAUhC,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAG+B,OAAAA,CAAQT,IAAI,CAAA,EAAGS,OAAAA,CAAQR,GAAG,CAAA,CAAE,CAAA;AACrE,gBAAA,MAAMW,WAAWF,OAAAA,KAAYC,OAAAA;gBAE7B,MAAM,EAAEN,MAAM,EAAE,GAAGG,OAAAA;gBAEnB,OAAO,IAAId,OAAAA,CAAQ,CAACd,OAAAA,EAASe,MAAAA,GAAAA;AAC3BE,oBAAAA,mBAAAA,CAAGS,SAAS,CAACI,OAAAA,EAASL,MAAAA,EAAQ,CAACH,GAAAA,GAAAA;AAC7B,wBAAA,IAAIA,GAAAA,EAAK;AACP,4BAAA,OAAOP,MAAAA,CAAOO,GAAAA,CAAAA;AAChB,wBAAA;AAEAM,wBAAAA,OAAAA,CAAQL,GAAG,GAAG,CAAC,CAAC,EAAE/B,mBAAAA,CAAoB,CAAC,EAAEoC,OAAAA,CAAQR,IAAI,CAAA,EAAGQ,OAAAA,CAAQP,GAAG,CAAA,CAAE;AAErE,wBAAA,IAAI,CAACW,QAAAA,IAAYf,mBAAAA,CAAGgB,UAAU,CAACF,OAAAA,CAAAA,EAAU;4BACvCd,mBAAAA,CAAGiB,MAAM,CAACH,OAAAA,EAAS,CAACI,SAAAA,GAAAA;AAClB,gCAAA,IAAIA,SAAAA,EAAW;AACb,oCAAA,OAAOpB,MAAAA,CAAOoB,SAAAA,CAAAA;AAChB,gCAAA;AACAnC,gCAAAA,OAAAA,EAAAA;AACF,4BAAA,CAAA,CAAA;AACA,4BAAA;AACF,wBAAA;AAEAA,wBAAAA,OAAAA,EAAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA,CAAA;AACAqC,YAAAA,MAAAA,CAAAA,CAAO9C,IAAU,EAAA;gBACf,OAAO,IAAIuB,OAAAA,CAAQ,CAACd,OAAAA,EAASe,MAAAA,GAAAA;oBAC3B,MAAMuB,QAAAA,GAAWvC,qBAAAA,CAAKoB,IAAI,CAACrB,UAAAA,EAAY,CAAA,EAAGP,IAAAA,CAAK6B,IAAI,CAAA,EAAG7B,IAAAA,CAAK8B,GAAG,CAAA,CAAE,CAAA;AAEhE,oBAAA,IAAI,CAACJ,mBAAAA,CAAGgB,UAAU,CAACK,QAAAA,CAAAA,EAAW;wBAC5BtC,OAAAA,CAAQ,oBAAA,CAAA;AACR,wBAAA;AACF,oBAAA;;oBAGAiB,mBAAAA,CAAGiB,MAAM,CAACI,QAAAA,EAAU,CAAChB,GAAAA,GAAAA;AACnB,wBAAA,IAAIA,GAAAA,EAAK;AACP,4BAAA,OAAOP,MAAAA,CAAOO,GAAAA,CAAAA;AAChB,wBAAA;AAEAtB,wBAAAA,OAAAA,EAAAA;AACF,oBAAA,CAAA,CAAA;AACF,gBAAA,CAAA,CAAA;AACF,YAAA;AACF,SAAA;AACF,IAAA;AACF,CAAA;;;;"}
package/dist/index.mjs CHANGED
@@ -59,6 +59,63 @@ var index = {
59
59
  });
60
60
  });
61
61
  },
62
+ replaceStream (newFile, oldFile) {
63
+ if (!newFile.stream) {
64
+ return Promise.reject(new Error('Missing file stream'));
65
+ }
66
+ // If the destination path is unchanged, writing the new file overwrites
67
+ // the old one atomically. If the hash or extension changed, write the
68
+ // new file first then unlink the old one so we never leave a gap.
69
+ const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);
70
+ const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);
71
+ const samePath = newPath === oldPath;
72
+ const { stream } = newFile;
73
+ return new Promise((resolve, reject)=>{
74
+ pipeline(stream, fs.createWriteStream(newPath), (err)=>{
75
+ if (err) {
76
+ return reject(err);
77
+ }
78
+ newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;
79
+ if (!samePath && fs.existsSync(oldPath)) {
80
+ fs.unlink(oldPath, (unlinkErr)=>{
81
+ if (unlinkErr) {
82
+ return reject(unlinkErr);
83
+ }
84
+ resolve();
85
+ });
86
+ return;
87
+ }
88
+ resolve();
89
+ });
90
+ });
91
+ },
92
+ replace (newFile, oldFile) {
93
+ if (!newFile.buffer) {
94
+ return Promise.reject(new Error('Missing file buffer'));
95
+ }
96
+ const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);
97
+ const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);
98
+ const samePath = newPath === oldPath;
99
+ const { buffer } = newFile;
100
+ return new Promise((resolve, reject)=>{
101
+ fs.writeFile(newPath, buffer, (err)=>{
102
+ if (err) {
103
+ return reject(err);
104
+ }
105
+ newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;
106
+ if (!samePath && fs.existsSync(oldPath)) {
107
+ fs.unlink(oldPath, (unlinkErr)=>{
108
+ if (unlinkErr) {
109
+ return reject(unlinkErr);
110
+ }
111
+ resolve();
112
+ });
113
+ return;
114
+ }
115
+ resolve();
116
+ });
117
+ });
118
+ },
62
119
  delete (file) {
63
120
  return new Promise((resolve, reject)=>{
64
121
  const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { pipeline } from 'stream';\nimport fs, { ReadStream } from 'fs';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport * as utils from '@strapi/utils';\n\n// Needed to load global.strapi without having to put @strapi/types in the regular dependencies\nimport type {} from '@strapi/types';\n\ninterface File {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record<string, unknown>;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record<string, unknown>;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nconst { PayloadTooLargeError } = utils.errors;\nconst { kbytesToBytes, bytesToHumanReadable } = utils.file;\n\nconst UPLOADS_FOLDER_NAME = 'uploads';\n\ninterface InitOptions {\n sizeLimit?: number;\n}\n\ninterface CheckFileSizeOptions {\n sizeLimit?: number;\n}\n\nexport default {\n init({ sizeLimit: providerOptionsSizeLimit }: InitOptions = {}) {\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n process.emitWarning(\n '[deprecated] In future versions, \"sizeLimit\" argument will be ignored from upload.config.providerOptions. Move it to upload.config'\n );\n }\n\n // Ensure uploads folder exists\n const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);\n if (!fse.pathExistsSync(uploadPath)) {\n throw new Error(\n `The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n\n return {\n checkFileSize(file: File, options: CheckFileSizeOptions) {\n const { sizeLimit } = options ?? {};\n\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n if (kbytesToBytes(file.size) > providerOptionsSizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(\n providerOptionsSizeLimit\n )}.`\n );\n } else if (sizeLimit) {\n if (kbytesToBytes(file.size) > sizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n uploadStream(file: File): Promise<void> {\n if (!file.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n const { stream } = file;\n\n return new Promise((resolve, reject) => {\n pipeline(\n stream,\n fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)),\n (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n }\n );\n });\n },\n upload(file: File): Promise<void> {\n if (!file.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const { buffer } = file;\n\n return new Promise((resolve, reject) => {\n // write file in public/assets folder\n fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n });\n });\n },\n delete(file: File): Promise<string | void> {\n return new Promise((resolve, reject) => {\n const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);\n\n if (!fs.existsSync(filePath)) {\n resolve(\"File doesn't exist\");\n return;\n }\n\n // remove file from public/assets folder\n fs.unlink(filePath, (err) => {\n if (err) {\n return reject(err);\n }\n\n resolve();\n });\n });\n },\n };\n },\n};\n"],"names":["PayloadTooLargeError","utils","errors","kbytesToBytes","bytesToHumanReadable","file","UPLOADS_FOLDER_NAME","init","sizeLimit","providerOptionsSizeLimit","process","emitWarning","uploadPath","path","resolve","strapi","dirs","static","public","fse","pathExistsSync","Error","checkFileSize","options","size","name","uploadStream","stream","Promise","reject","pipeline","fs","createWriteStream","join","hash","ext","err","url","upload","buffer","writeFile","delete","filePath","existsSync","unlink"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import { pipeline } from 'stream';\nimport fs, { ReadStream } from 'fs';\nimport path from 'path';\nimport fse from 'fs-extra';\nimport * as utils from '@strapi/utils';\n\n// Needed to load global.strapi without having to put @strapi/types in the regular dependencies\nimport type {} from '@strapi/types';\n\ninterface File {\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: Record<string, unknown>;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n sizeInBytes: number;\n url: string;\n previewUrl?: string;\n path?: string;\n provider?: string;\n provider_metadata?: Record<string, unknown>;\n stream?: ReadStream;\n buffer?: Buffer;\n}\n\nconst { PayloadTooLargeError } = utils.errors;\nconst { kbytesToBytes, bytesToHumanReadable } = utils.file;\n\nconst UPLOADS_FOLDER_NAME = 'uploads';\n\ninterface InitOptions {\n sizeLimit?: number;\n}\n\ninterface CheckFileSizeOptions {\n sizeLimit?: number;\n}\n\nexport default {\n init({ sizeLimit: providerOptionsSizeLimit }: InitOptions = {}) {\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n process.emitWarning(\n '[deprecated] In future versions, \"sizeLimit\" argument will be ignored from upload.config.providerOptions. Move it to upload.config'\n );\n }\n\n // Ensure uploads folder exists\n const uploadPath = path.resolve(strapi.dirs.static.public, UPLOADS_FOLDER_NAME);\n if (!fse.pathExistsSync(uploadPath)) {\n throw new Error(\n `The upload folder (${uploadPath}) doesn't exist or is not accessible. Please make sure it exists.`\n );\n }\n\n return {\n checkFileSize(file: File, options: CheckFileSizeOptions) {\n const { sizeLimit } = options ?? {};\n\n // TODO V5: remove providerOptions sizeLimit\n if (providerOptionsSizeLimit) {\n if (kbytesToBytes(file.size) > providerOptionsSizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(\n providerOptionsSizeLimit\n )}.`\n );\n } else if (sizeLimit) {\n if (kbytesToBytes(file.size) > sizeLimit)\n throw new PayloadTooLargeError(\n `${file.name} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n uploadStream(file: File): Promise<void> {\n if (!file.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n const { stream } = file;\n\n return new Promise((resolve, reject) => {\n pipeline(\n stream,\n fs.createWriteStream(path.join(uploadPath, `${file.hash}${file.ext}`)),\n (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n }\n );\n });\n },\n upload(file: File): Promise<void> {\n if (!file.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const { buffer } = file;\n\n return new Promise((resolve, reject) => {\n // write file in public/assets folder\n fs.writeFile(path.join(uploadPath, `${file.hash}${file.ext}`), buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n file.url = `/${UPLOADS_FOLDER_NAME}/${file.hash}${file.ext}`;\n\n resolve();\n });\n });\n },\n replaceStream(newFile: File, oldFile: File): Promise<void> {\n if (!newFile.stream) {\n return Promise.reject(new Error('Missing file stream'));\n }\n\n // If the destination path is unchanged, writing the new file overwrites\n // the old one atomically. If the hash or extension changed, write the\n // new file first then unlink the old one so we never leave a gap.\n const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);\n const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);\n const samePath = newPath === oldPath;\n\n const { stream } = newFile;\n\n return new Promise((resolve, reject) => {\n pipeline(stream, fs.createWriteStream(newPath), (err) => {\n if (err) {\n return reject(err);\n }\n\n newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;\n\n if (!samePath && fs.existsSync(oldPath)) {\n fs.unlink(oldPath, (unlinkErr) => {\n if (unlinkErr) {\n return reject(unlinkErr);\n }\n resolve();\n });\n return;\n }\n\n resolve();\n });\n });\n },\n replace(newFile: File, oldFile: File): Promise<void> {\n if (!newFile.buffer) {\n return Promise.reject(new Error('Missing file buffer'));\n }\n\n const newPath = path.join(uploadPath, `${newFile.hash}${newFile.ext}`);\n const oldPath = path.join(uploadPath, `${oldFile.hash}${oldFile.ext}`);\n const samePath = newPath === oldPath;\n\n const { buffer } = newFile;\n\n return new Promise((resolve, reject) => {\n fs.writeFile(newPath, buffer, (err) => {\n if (err) {\n return reject(err);\n }\n\n newFile.url = `/${UPLOADS_FOLDER_NAME}/${newFile.hash}${newFile.ext}`;\n\n if (!samePath && fs.existsSync(oldPath)) {\n fs.unlink(oldPath, (unlinkErr) => {\n if (unlinkErr) {\n return reject(unlinkErr);\n }\n resolve();\n });\n return;\n }\n\n resolve();\n });\n });\n },\n delete(file: File): Promise<string | void> {\n return new Promise((resolve, reject) => {\n const filePath = path.join(uploadPath, `${file.hash}${file.ext}`);\n\n if (!fs.existsSync(filePath)) {\n resolve(\"File doesn't exist\");\n return;\n }\n\n // remove file from public/assets folder\n fs.unlink(filePath, (err) => {\n if (err) {\n return reject(err);\n }\n\n resolve();\n });\n });\n },\n };\n },\n};\n"],"names":["PayloadTooLargeError","utils","errors","kbytesToBytes","bytesToHumanReadable","file","UPLOADS_FOLDER_NAME","init","sizeLimit","providerOptionsSizeLimit","process","emitWarning","uploadPath","path","resolve","strapi","dirs","static","public","fse","pathExistsSync","Error","checkFileSize","options","size","name","uploadStream","stream","Promise","reject","pipeline","fs","createWriteStream","join","hash","ext","err","url","upload","buffer","writeFile","replaceStream","newFile","oldFile","newPath","oldPath","samePath","existsSync","unlink","unlinkErr","replace","delete","filePath"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/provider-upload-local",
3
- "version": "5.48.1",
3
+ "version": "5.50.0",
4
4
  "description": "Local provider for strapi upload",
5
5
  "keywords": [
6
6
  "upload",
@@ -46,16 +46,16 @@
46
46
  "watch": "run -T rollup -c -w"
47
47
  },
48
48
  "dependencies": {
49
- "@strapi/utils": "5.48.1",
49
+ "@strapi/utils": "5.50.0",
50
50
  "fs-extra": "11.3.4"
51
51
  },
52
52
  "devDependencies": {
53
- "@strapi/types": "5.48.1",
53
+ "@strapi/types": "5.50.0",
54
54
  "@types/fs-extra": "11.0.4",
55
55
  "@types/jest": "29.5.2",
56
- "eslint-config-custom": "5.48.1",
56
+ "eslint-config-custom": "5.50.0",
57
57
  "memfs": "4.6.0",
58
- "tsconfig": "5.48.1"
58
+ "tsconfig": "5.50.0"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=20.0.0 <=26.x.x",