@strapi/data-transfer 5.48.1 → 5.49.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/directory/providers/destination/index.js +16 -11
- package/dist/directory/providers/destination/index.js.map +1 -1
- package/dist/directory/providers/destination/utils.js +6 -2
- package/dist/directory/providers/destination/utils.js.map +1 -1
- package/dist/directory/providers/source/index.js +25 -20
- package/dist/directory/providers/source/index.js.map +1 -1
- package/dist/file/providers/destination/index.js +10 -4
- package/dist/file/providers/destination/index.js.map +1 -1
- package/dist/file/providers/source/index.js +9 -3
- package/dist/file/providers/source/index.js.map +1 -1
- package/dist/file/providers/source/utils.js +10 -6
- package/dist/file/providers/source/utils.js.map +1 -1
- package/dist/strapi/providers/local-destination/index.js +11 -7
- package/dist/strapi/providers/local-destination/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.js +9 -3
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs +4 -2
- package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
- package/dist/strapi/providers/local-source/configuration.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/configuration.js +8 -0
- package/dist/strapi/providers/local-source/configuration.js.map +1 -1
- package/dist/strapi/providers/local-source/configuration.mjs +8 -0
- package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
- package/dist/strapi/remote/handlers/push.js +1 -0
- package/dist/strapi/remote/handlers/push.js.map +1 -1
- package/dist/strapi/remote/handlers/push.mjs +1 -0
- package/dist/strapi/remote/handlers/push.mjs.map +1 -1
- package/dist/strapi/utils/project-settings-logos.d.ts +29 -0
- package/dist/strapi/utils/project-settings-logos.d.ts.map +1 -0
- package/dist/strapi/utils/project-settings-logos.js +174 -0
- package/dist/strapi/utils/project-settings-logos.js.map +1 -0
- package/dist/strapi/utils/project-settings-logos.mjs +169 -0
- package/dist/strapi/utils/project-settings-logos.mjs.map +1 -0
- package/dist/utils/components.js +10 -6
- package/dist/utils/components.js.map +1 -1
- package/package.json +8 -6
|
@@ -10,6 +10,11 @@ var utils = require('./utils.js');
|
|
|
10
10
|
var providers = require('../../../errors/providers.js');
|
|
11
11
|
var utils$1 = require('../../../file/providers/destination/utils.js');
|
|
12
12
|
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
16
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
17
|
+
|
|
13
18
|
function _class_private_field_loose_base(receiver, privateKey) {
|
|
14
19
|
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
15
20
|
throw new TypeError("attempted to use private field on non-instance");
|
|
@@ -32,7 +37,7 @@ class LocalDirectoryDestinationProvider {
|
|
|
32
37
|
async bootstrap(diagnostics) {
|
|
33
38
|
_class_private_field_loose_base(this, _diagnostics)[_diagnostics] = diagnostics;
|
|
34
39
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('preparing directory export');
|
|
35
|
-
await
|
|
40
|
+
await fs__default.default.mkdir(_class_private_field_loose_base(this, _rootResolved)[_rootResolved], {
|
|
36
41
|
recursive: true
|
|
37
42
|
});
|
|
38
43
|
this.results.file = {
|
|
@@ -44,7 +49,7 @@ class LocalDirectoryDestinationProvider {
|
|
|
44
49
|
}
|
|
45
50
|
async rollback() {
|
|
46
51
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('rolling back');
|
|
47
|
-
await
|
|
52
|
+
await fs__default.default.rm(_class_private_field_loose_base(this, _rootResolved)[_rootResolved], {
|
|
48
53
|
recursive: true,
|
|
49
54
|
force: true
|
|
50
55
|
});
|
|
@@ -95,8 +100,8 @@ class LocalDirectoryDestinationProvider {
|
|
|
95
100
|
objectMode: true,
|
|
96
101
|
write (data, _encoding, callback) {
|
|
97
102
|
const { filename } = data;
|
|
98
|
-
const entryPath =
|
|
99
|
-
const entryMetadataPath =
|
|
103
|
+
const entryPath = path__default.default.join(root, 'assets', 'uploads', filename);
|
|
104
|
+
const entryMetadataPath = path__default.default.join(root, 'assets', 'metadata', `${filename}.json`);
|
|
100
105
|
const assetWriteError = (cause)=>new providers.ProviderTransferError(`Failed to write asset ${filename}`, {
|
|
101
106
|
details: {
|
|
102
107
|
error: cause instanceof Error ? cause : new Error(String(cause))
|
|
@@ -104,13 +109,13 @@ class LocalDirectoryDestinationProvider {
|
|
|
104
109
|
});
|
|
105
110
|
let fileStream;
|
|
106
111
|
try {
|
|
107
|
-
|
|
112
|
+
fs__default.default.mkdirSync(path__default.default.dirname(entryPath), {
|
|
108
113
|
recursive: true
|
|
109
114
|
});
|
|
110
|
-
|
|
115
|
+
fs__default.default.mkdirSync(path__default.default.dirname(entryMetadataPath), {
|
|
111
116
|
recursive: true
|
|
112
117
|
});
|
|
113
|
-
|
|
118
|
+
fs__default.default.writeFileSync(entryMetadataPath, JSON.stringify(data.metadata), 'utf8');
|
|
114
119
|
fileStream = fs$1.createWriteStream(entryPath);
|
|
115
120
|
} catch (error) {
|
|
116
121
|
callback(assetWriteError(error));
|
|
@@ -150,7 +155,7 @@ class LocalDirectoryDestinationProvider {
|
|
|
150
155
|
this.results = {};
|
|
151
156
|
_class_private_field_loose_base(this, _providersMetadata)[_providersMetadata] = {};
|
|
152
157
|
this.options = options;
|
|
153
|
-
_class_private_field_loose_base(this, _rootResolved)[_rootResolved] =
|
|
158
|
+
_class_private_field_loose_base(this, _rootResolved)[_rootResolved] = path__default.default.resolve(options.directory.path);
|
|
154
159
|
}
|
|
155
160
|
}
|
|
156
161
|
function reportInfo(message) {
|
|
@@ -167,11 +172,11 @@ async function writeMetadata() {
|
|
|
167
172
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('writing metadata');
|
|
168
173
|
const metadata = _class_private_field_loose_base(this, _providersMetadata)[_providersMetadata].source;
|
|
169
174
|
if (metadata) {
|
|
170
|
-
const target =
|
|
171
|
-
await
|
|
175
|
+
const target = path__default.default.join(_class_private_field_loose_base(this, _rootResolved)[_rootResolved], 'metadata.json');
|
|
176
|
+
await fs__default.default.mkdir(path__default.default.dirname(target), {
|
|
172
177
|
recursive: true
|
|
173
178
|
});
|
|
174
|
-
await
|
|
179
|
+
await fs__default.default.writeFile(target, JSON.stringify(metadata, null, 2), 'utf8');
|
|
175
180
|
}
|
|
176
181
|
}
|
|
177
182
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/directory/providers/destination/index.ts"],"sourcesContent":["import path from 'path';\nimport { createWriteStream } from 'fs';\nimport { Writable, pipeline } from 'stream';\nimport fs from 'fs-extra';\nimport { stringer } from 'stream-json/jsonl/Stringer';\nimport { chain } from 'stream-chain';\n\nimport type {\n IAsset,\n IDestinationProvider,\n IDestinationProviderTransferResults,\n IMetadata,\n ProviderType,\n} from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createDirectoryJsonlWriter, createFilePathFactory } from './utils';\nimport { ProviderTransferError } from '../../../errors/providers';\n\nexport interface ILocalDirectoryDestinationProviderOptions {\n directory: {\n /** Output root: unpacked Strapi export layout (metadata.json, entities/, …) */\n path: string;\n };\n file: {\n maxSizeJsonl?: number;\n };\n}\n\nexport interface ILocalDirectoryDestinationProviderTransferResults\n extends IDestinationProviderTransferResults {\n file?: {\n path?: string;\n };\n}\n\nexport const createLocalDirectoryDestinationProvider = (\n options: ILocalDirectoryDestinationProviderOptions\n) => {\n return new LocalDirectoryDestinationProvider(options);\n};\n\nclass LocalDirectoryDestinationProvider implements IDestinationProvider {\n name = 'destination::local-directory';\n\n type: ProviderType = 'destination';\n\n options: ILocalDirectoryDestinationProviderOptions;\n\n results: ILocalDirectoryDestinationProviderTransferResults = {};\n\n #providersMetadata: { source?: IMetadata; destination?: IMetadata } = {};\n\n #rootResolved: string;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectoryDestinationProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-destination-provider',\n },\n kind: 'info',\n });\n }\n\n setMetadata(target: ProviderType, metadata: IMetadata): IDestinationProvider {\n this.#providersMetadata[target] = metadata;\n return this;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.#reportInfo('preparing directory export');\n await fs.mkdir(this.#rootResolved, { recursive: true });\n this.results.file = { path: this.#rootResolved };\n }\n\n async close() {\n await this.#writeMetadata();\n }\n\n async rollback(): Promise<void> {\n this.#reportInfo('rolling back');\n await fs.rm(this.#rootResolved, { recursive: true, force: true });\n }\n\n getMetadata() {\n return null;\n }\n\n async #writeMetadata(): Promise<void> {\n this.#reportInfo('writing metadata');\n const metadata = this.#providersMetadata.source;\n if (metadata) {\n const target = path.join(this.#rootResolved, 'metadata.json');\n await fs.mkdir(path.dirname(target), { recursive: true });\n await fs.writeFile(target, JSON.stringify(metadata, null, 2), 'utf8');\n }\n }\n\n createSchemasWriteStream() {\n this.#reportInfo('creating schemas write stream');\n const filePathFactory = createFilePathFactory('schemas');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createEntitiesWriteStream(): Writable {\n this.#reportInfo('creating entities write stream');\n const filePathFactory = createFilePathFactory('entities');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createLinksWriteStream(): Writable {\n this.#reportInfo('creating links write stream');\n const filePathFactory = createFilePathFactory('links');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createConfigurationWriteStream(): Writable {\n this.#reportInfo('creating configuration write stream');\n const filePathFactory = createFilePathFactory('configuration');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createAssetsWriteStream(): Writable {\n this.#reportInfo('creating assets write stream');\n const root = this.#rootResolved;\n\n return new Writable({\n objectMode: true,\n write(data: IAsset, _encoding, callback) {\n const { filename } = data;\n const entryPath = path.join(root, 'assets', 'uploads', filename);\n const entryMetadataPath = path.join(root, 'assets', 'metadata', `${filename}.json`);\n\n const assetWriteError = (cause: unknown) =>\n new ProviderTransferError(`Failed to write asset ${filename}`, {\n details: {\n error: cause instanceof Error ? cause : new Error(String(cause)),\n },\n });\n\n let fileStream: ReturnType<typeof createWriteStream>;\n\n try {\n fs.mkdirSync(path.dirname(entryPath), { recursive: true });\n fs.mkdirSync(path.dirname(entryMetadataPath), { recursive: true });\n fs.writeFileSync(entryMetadataPath, JSON.stringify(data.metadata), 'utf8');\n fileStream = createWriteStream(entryPath);\n } catch (error: unknown) {\n callback(assetWriteError(error));\n return;\n }\n\n pipeline(data.stream, fileStream, (err) => {\n if (err) {\n callback(assetWriteError(err));\n return;\n }\n callback(null);\n });\n },\n });\n }\n}\n"],"names":["createLocalDirectoryDestinationProvider","options","LocalDirectoryDestinationProvider","setMetadata","target","metadata","bootstrap","diagnostics","fs","mkdir","recursive","results","file","path","close","rollback","rm","force","getMetadata","createSchemasWriteStream","filePathFactory","createFilePathFactory","entryStream","createDirectoryJsonlWriter","maxSizeJsonl","chain","stringer","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","root","Writable","objectMode","write","data","_encoding","callback","filename","entryPath","join","entryMetadataPath","assetWriteError","cause","ProviderTransferError","details","error","Error","String","fileStream","mkdirSync","dirname","writeFileSync","JSON","stringify","createWriteStream","pipeline","stream","err","name","type","resolve","directory","message","report","createdAt","Date","origin","kind","source","writeFile"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/directory/providers/destination/index.ts"],"sourcesContent":["import path from 'path';\nimport { createWriteStream } from 'fs';\nimport { Writable, pipeline } from 'stream';\nimport fs from 'fs-extra';\nimport { stringer } from 'stream-json/jsonl/Stringer';\nimport { chain } from 'stream-chain';\n\nimport type {\n IAsset,\n IDestinationProvider,\n IDestinationProviderTransferResults,\n IMetadata,\n ProviderType,\n} from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createDirectoryJsonlWriter, createFilePathFactory } from './utils';\nimport { ProviderTransferError } from '../../../errors/providers';\n\nexport interface ILocalDirectoryDestinationProviderOptions {\n directory: {\n /** Output root: unpacked Strapi export layout (metadata.json, entities/, …) */\n path: string;\n };\n file: {\n maxSizeJsonl?: number;\n };\n}\n\nexport interface ILocalDirectoryDestinationProviderTransferResults\n extends IDestinationProviderTransferResults {\n file?: {\n path?: string;\n };\n}\n\nexport const createLocalDirectoryDestinationProvider = (\n options: ILocalDirectoryDestinationProviderOptions\n) => {\n return new LocalDirectoryDestinationProvider(options);\n};\n\nclass LocalDirectoryDestinationProvider implements IDestinationProvider {\n name = 'destination::local-directory';\n\n type: ProviderType = 'destination';\n\n options: ILocalDirectoryDestinationProviderOptions;\n\n results: ILocalDirectoryDestinationProviderTransferResults = {};\n\n #providersMetadata: { source?: IMetadata; destination?: IMetadata } = {};\n\n #rootResolved: string;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectoryDestinationProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-destination-provider',\n },\n kind: 'info',\n });\n }\n\n setMetadata(target: ProviderType, metadata: IMetadata): IDestinationProvider {\n this.#providersMetadata[target] = metadata;\n return this;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n this.#reportInfo('preparing directory export');\n await fs.mkdir(this.#rootResolved, { recursive: true });\n this.results.file = { path: this.#rootResolved };\n }\n\n async close() {\n await this.#writeMetadata();\n }\n\n async rollback(): Promise<void> {\n this.#reportInfo('rolling back');\n await fs.rm(this.#rootResolved, { recursive: true, force: true });\n }\n\n getMetadata() {\n return null;\n }\n\n async #writeMetadata(): Promise<void> {\n this.#reportInfo('writing metadata');\n const metadata = this.#providersMetadata.source;\n if (metadata) {\n const target = path.join(this.#rootResolved, 'metadata.json');\n await fs.mkdir(path.dirname(target), { recursive: true });\n await fs.writeFile(target, JSON.stringify(metadata, null, 2), 'utf8');\n }\n }\n\n createSchemasWriteStream() {\n this.#reportInfo('creating schemas write stream');\n const filePathFactory = createFilePathFactory('schemas');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createEntitiesWriteStream(): Writable {\n this.#reportInfo('creating entities write stream');\n const filePathFactory = createFilePathFactory('entities');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createLinksWriteStream(): Writable {\n this.#reportInfo('creating links write stream');\n const filePathFactory = createFilePathFactory('links');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createConfigurationWriteStream(): Writable {\n this.#reportInfo('creating configuration write stream');\n const filePathFactory = createFilePathFactory('configuration');\n const entryStream = createDirectoryJsonlWriter(\n this.#rootResolved,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n return chain([stringer(), entryStream]);\n }\n\n createAssetsWriteStream(): Writable {\n this.#reportInfo('creating assets write stream');\n const root = this.#rootResolved;\n\n return new Writable({\n objectMode: true,\n write(data: IAsset, _encoding, callback) {\n const { filename } = data;\n const entryPath = path.join(root, 'assets', 'uploads', filename);\n const entryMetadataPath = path.join(root, 'assets', 'metadata', `${filename}.json`);\n\n const assetWriteError = (cause: unknown) =>\n new ProviderTransferError(`Failed to write asset ${filename}`, {\n details: {\n error: cause instanceof Error ? cause : new Error(String(cause)),\n },\n });\n\n let fileStream: ReturnType<typeof createWriteStream>;\n\n try {\n fs.mkdirSync(path.dirname(entryPath), { recursive: true });\n fs.mkdirSync(path.dirname(entryMetadataPath), { recursive: true });\n fs.writeFileSync(entryMetadataPath, JSON.stringify(data.metadata), 'utf8');\n fileStream = createWriteStream(entryPath);\n } catch (error: unknown) {\n callback(assetWriteError(error));\n return;\n }\n\n pipeline(data.stream, fileStream, (err) => {\n if (err) {\n callback(assetWriteError(err));\n return;\n }\n callback(null);\n });\n },\n });\n }\n}\n"],"names":["createLocalDirectoryDestinationProvider","options","LocalDirectoryDestinationProvider","setMetadata","target","metadata","bootstrap","diagnostics","fs","mkdir","recursive","results","file","path","close","rollback","rm","force","getMetadata","createSchemasWriteStream","filePathFactory","createFilePathFactory","entryStream","createDirectoryJsonlWriter","maxSizeJsonl","chain","stringer","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","root","Writable","objectMode","write","data","_encoding","callback","filename","entryPath","join","entryMetadataPath","assetWriteError","cause","ProviderTransferError","details","error","Error","String","fileStream","mkdirSync","dirname","writeFileSync","JSON","stringify","createWriteStream","pipeline","stream","err","name","type","resolve","directory","message","report","createdAt","Date","origin","kind","source","writeFile"],"mappings":"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"}
|
|
@@ -4,12 +4,16 @@ var fs = require('fs');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var stream = require('stream');
|
|
6
6
|
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
10
|
+
|
|
7
11
|
/**
|
|
8
12
|
* JSONL writer that mirrors {@link createTarEntryStream} but writes files under a root directory.
|
|
9
13
|
*/ const createDirectoryJsonlWriter = (rootDir, pathFactory, maxSize = 2.56e8)=>{
|
|
10
14
|
let fileIndex = 0;
|
|
11
15
|
let buffer = '';
|
|
12
|
-
const resolvePath = (posixName)=>
|
|
16
|
+
const resolvePath = (posixName)=>path__default.default.join(rootDir, ...posixName.split('/'));
|
|
13
17
|
const flush = async ()=>{
|
|
14
18
|
if (!buffer) {
|
|
15
19
|
return;
|
|
@@ -17,7 +21,7 @@ var stream = require('stream');
|
|
|
17
21
|
fileIndex += 1;
|
|
18
22
|
const name = pathFactory(fileIndex);
|
|
19
23
|
const targetPath = resolvePath(name);
|
|
20
|
-
await fs.promises.mkdir(
|
|
24
|
+
await fs.promises.mkdir(path__default.default.dirname(targetPath), {
|
|
21
25
|
recursive: true
|
|
22
26
|
});
|
|
23
27
|
await fs.promises.writeFile(targetPath, buffer, 'utf8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/directory/providers/destination/utils.ts"],"sourcesContent":["import { promises as fsp } from 'fs';\nimport path from 'path';\nimport { Writable } from 'stream';\n\nimport { createFilePathFactory } from '../../../file/providers/destination/utils';\n\nexport { createFilePathFactory };\n\n/**\n * JSONL writer that mirrors {@link createTarEntryStream} but writes files under a root directory.\n */\nexport const createDirectoryJsonlWriter = (\n rootDir: string,\n pathFactory: (index?: number) => string,\n maxSize = 2.56e8\n) => {\n let fileIndex = 0;\n let buffer = '';\n\n const resolvePath = (posixName: string) => path.join(rootDir, ...posixName.split('/'));\n\n const flush = async () => {\n if (!buffer) {\n return;\n }\n\n fileIndex += 1;\n const name = pathFactory(fileIndex);\n const targetPath = resolvePath(name);\n await fsp.mkdir(path.dirname(targetPath), { recursive: true });\n await fsp.writeFile(targetPath, buffer, 'utf8');\n buffer = '';\n };\n\n const push = (chunk: string | Buffer) => {\n buffer += chunk;\n };\n\n return new Writable({\n async final(callback) {\n try {\n await flush();\n callback();\n } catch (err: unknown) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n },\n\n async destroy(err, callback) {\n await flush();\n callback(err);\n },\n\n async write(chunk, _encoding, callback) {\n const size = chunk.length;\n\n if (chunk.length > maxSize) {\n callback(new Error(`payload too large: ${chunk.length}>${maxSize}`));\n return;\n }\n\n if (buffer.length + size > maxSize) {\n await flush();\n }\n\n push(chunk);\n\n callback(null);\n },\n });\n};\n"],"names":["createDirectoryJsonlWriter","rootDir","pathFactory","maxSize","fileIndex","buffer","resolvePath","posixName","path","join","split","flush","name","targetPath","fsp","mkdir","dirname","recursive","writeFile","push","chunk","Writable","final","callback","err","Error","String","destroy","write","_encoding","size","length"],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/directory/providers/destination/utils.ts"],"sourcesContent":["import { promises as fsp } from 'fs';\nimport path from 'path';\nimport { Writable } from 'stream';\n\nimport { createFilePathFactory } from '../../../file/providers/destination/utils';\n\nexport { createFilePathFactory };\n\n/**\n * JSONL writer that mirrors {@link createTarEntryStream} but writes files under a root directory.\n */\nexport const createDirectoryJsonlWriter = (\n rootDir: string,\n pathFactory: (index?: number) => string,\n maxSize = 2.56e8\n) => {\n let fileIndex = 0;\n let buffer = '';\n\n const resolvePath = (posixName: string) => path.join(rootDir, ...posixName.split('/'));\n\n const flush = async () => {\n if (!buffer) {\n return;\n }\n\n fileIndex += 1;\n const name = pathFactory(fileIndex);\n const targetPath = resolvePath(name);\n await fsp.mkdir(path.dirname(targetPath), { recursive: true });\n await fsp.writeFile(targetPath, buffer, 'utf8');\n buffer = '';\n };\n\n const push = (chunk: string | Buffer) => {\n buffer += chunk;\n };\n\n return new Writable({\n async final(callback) {\n try {\n await flush();\n callback();\n } catch (err: unknown) {\n callback(err instanceof Error ? err : new Error(String(err)));\n }\n },\n\n async destroy(err, callback) {\n await flush();\n callback(err);\n },\n\n async write(chunk, _encoding, callback) {\n const size = chunk.length;\n\n if (chunk.length > maxSize) {\n callback(new Error(`payload too large: ${chunk.length}>${maxSize}`));\n return;\n }\n\n if (buffer.length + size > maxSize) {\n await flush();\n }\n\n push(chunk);\n\n callback(null);\n },\n });\n};\n"],"names":["createDirectoryJsonlWriter","rootDir","pathFactory","maxSize","fileIndex","buffer","resolvePath","posixName","path","join","split","flush","name","targetPath","fsp","mkdir","dirname","recursive","writeFile","push","chunk","Writable","final","callback","err","Error","String","destroy","write","_encoding","size","length"],"mappings":";;;;;;;;;;AAQA;;AAEC,IACM,MAAMA,0BAAAA,GAA6B,CACxCC,OAAAA,EACAC,WAAAA,EACAC,UAAU,MAAM,GAAA;AAEhB,IAAA,IAAIC,SAAAA,GAAY,CAAA;AAChB,IAAA,IAAIC,MAAAA,GAAS,EAAA;IAEb,MAAMC,WAAAA,GAAc,CAACC,SAAAA,GAAsBC,qBAAAA,CAAKC,IAAI,CAACR,OAAAA,EAAAA,GAAYM,SAAAA,CAAUG,KAAK,CAAC,GAAA,CAAA,CAAA;AAEjF,IAAA,MAAMC,KAAAA,GAAQ,UAAA;AACZ,QAAA,IAAI,CAACN,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;QAEAD,SAAAA,IAAa,CAAA;AACb,QAAA,MAAMQ,OAAOV,WAAAA,CAAYE,SAAAA,CAAAA;AACzB,QAAA,MAAMS,aAAaP,WAAAA,CAAYM,IAAAA,CAAAA;AAC/B,QAAA,MAAME,YAAIC,KAAK,CAACP,qBAAAA,CAAKQ,OAAO,CAACH,UAAAA,CAAAA,EAAa;YAAEI,SAAAA,EAAW;AAAK,SAAA,CAAA;AAC5D,QAAA,MAAMH,WAAAA,CAAII,SAAS,CAACL,UAAAA,EAAYR,MAAAA,EAAQ,MAAA,CAAA;QACxCA,MAAAA,GAAS,EAAA;AACX,IAAA,CAAA;AAEA,IAAA,MAAMc,OAAO,CAACC,KAAAA,GAAAA;QACZf,MAAAA,IAAUe,KAAAA;AACZ,IAAA,CAAA;AAEA,IAAA,OAAO,IAAIC,eAAAA,CAAS;AAClB,QAAA,MAAMC,OAAMC,QAAQ,EAAA;YAClB,IAAI;gBACF,MAAMZ,KAAAA,EAAAA;AACNY,gBAAAA,QAAAA,EAAAA;AACF,YAAA,CAAA,CAAE,OAAOC,GAAAA,EAAc;AACrBD,gBAAAA,QAAAA,CAASC,GAAAA,YAAeC,KAAAA,GAAQD,GAAAA,GAAM,IAAIC,MAAMC,MAAAA,CAAOF,GAAAA,CAAAA,CAAAA,CAAAA;AACzD,YAAA;AACF,QAAA,CAAA;QAEA,MAAMG,OAAAA,CAAAA,CAAQH,GAAG,EAAED,QAAQ,EAAA;YACzB,MAAMZ,KAAAA,EAAAA;YACNY,QAAAA,CAASC,GAAAA,CAAAA;AACX,QAAA,CAAA;AAEA,QAAA,MAAMI,KAAAA,CAAAA,CAAMR,KAAK,EAAES,SAAS,EAAEN,QAAQ,EAAA;YACpC,MAAMO,IAAAA,GAAOV,MAAMW,MAAM;YAEzB,IAAIX,KAAAA,CAAMW,MAAM,GAAG5B,OAAAA,EAAS;gBAC1BoB,QAAAA,CAAS,IAAIE,KAAAA,CAAM,CAAC,mBAAmB,EAAEL,MAAMW,MAAM,CAAC,CAAC,EAAE5B,OAAAA,CAAAA,CAAS,CAAA,CAAA;AAClE,gBAAA;AACF,YAAA;AAEA,YAAA,IAAIE,MAAAA,CAAO0B,MAAM,GAAGD,IAAAA,GAAO3B,OAAAA,EAAS;gBAClC,MAAMQ,KAAAA,EAAAA;AACR,YAAA;YAEAQ,IAAAA,CAAKC,KAAAA,CAAAA;YAELG,QAAAA,CAAS,IAAA,CAAA;AACX,QAAA;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -14,6 +14,11 @@ require('events');
|
|
|
14
14
|
var providers = require('../../../errors/providers.js');
|
|
15
15
|
var utils = require('../../../file/providers/source/utils.js');
|
|
16
16
|
|
|
17
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
|
|
19
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
20
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
21
|
+
|
|
17
22
|
function _class_private_field_loose_base(receiver, privateKey) {
|
|
18
23
|
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
19
24
|
throw new TypeError("attempted to use private field on non-instance");
|
|
@@ -29,8 +34,8 @@ const createLocalDirectorySourceProvider = (options)=>{
|
|
|
29
34
|
return new LocalDirectorySourceProvider(options);
|
|
30
35
|
};
|
|
31
36
|
const isPathInsideRoot = (root, candidate)=>{
|
|
32
|
-
const relative =
|
|
33
|
-
return relative === '' || !relative.startsWith(`..${
|
|
37
|
+
const relative = path__default.default.relative(root, candidate);
|
|
38
|
+
return relative === '' || !relative.startsWith(`..${path__default.default.sep}`) && !path__default.default.isAbsolute(relative);
|
|
34
39
|
};
|
|
35
40
|
var _rootResolved = /*#__PURE__*/ _class_private_field_loose_key("_rootResolved"), _metadata = /*#__PURE__*/ _class_private_field_loose_key("_metadata"), _diagnostics = /*#__PURE__*/ _class_private_field_loose_key("_diagnostics"), _reportInfo = /*#__PURE__*/ _class_private_field_loose_key("_reportInfo"), /** Resolve a posix-style relative path under the export root; rejects escapes. */ _safePath = /*#__PURE__*/ _class_private_field_loose_key("_safePath"), _loadMetadata = /*#__PURE__*/ _class_private_field_loose_key("_loadMetadata"), _pipeAssetsToStream = /*#__PURE__*/ _class_private_field_loose_key("_pipeAssetsToStream"), _readAssetMetadata = /*#__PURE__*/ _class_private_field_loose_key("_readAssetMetadata"), _listJsonlFiles = /*#__PURE__*/ _class_private_field_loose_key("_listJsonlFiles"), _streamJsonlDirectory = /*#__PURE__*/ _class_private_field_loose_key("_streamJsonlDirectory"), _pipeJsonlDirectoryToStream = /*#__PURE__*/ _class_private_field_loose_key("_pipeJsonlDirectoryToStream");
|
|
36
41
|
class LocalDirectorySourceProvider {
|
|
@@ -38,7 +43,7 @@ class LocalDirectorySourceProvider {
|
|
|
38
43
|
_class_private_field_loose_base(this, _diagnostics)[_diagnostics] = diagnostics;
|
|
39
44
|
const root = _class_private_field_loose_base(this, _rootResolved)[_rootResolved];
|
|
40
45
|
try {
|
|
41
|
-
const stat = await
|
|
46
|
+
const stat = await fs__default.default.stat(root);
|
|
42
47
|
if (!stat.isDirectory()) {
|
|
43
48
|
throw new providers.ProviderInitializationError(`Path '${root}' is not a directory.`);
|
|
44
49
|
}
|
|
@@ -140,7 +145,7 @@ class LocalDirectorySourceProvider {
|
|
|
140
145
|
this.type = 'source';
|
|
141
146
|
this.name = 'source::local-directory';
|
|
142
147
|
this.options = options;
|
|
143
|
-
_class_private_field_loose_base(this, _rootResolved)[_rootResolved] =
|
|
148
|
+
_class_private_field_loose_base(this, _rootResolved)[_rootResolved] = path__default.default.resolve(options.directory.path);
|
|
144
149
|
}
|
|
145
150
|
}
|
|
146
151
|
function reportInfo(message) {
|
|
@@ -154,9 +159,9 @@ function reportInfo(message) {
|
|
|
154
159
|
});
|
|
155
160
|
}
|
|
156
161
|
function safePath(...posixSegments) {
|
|
157
|
-
const joined =
|
|
158
|
-
const segments = joined.split(
|
|
159
|
-
const resolved =
|
|
162
|
+
const joined = path__default.default.posix.join(...posixSegments);
|
|
163
|
+
const segments = joined.split(path__default.default.posix.sep).filter(Boolean);
|
|
164
|
+
const resolved = path__default.default.resolve(_class_private_field_loose_base(this, _rootResolved)[_rootResolved], ...segments);
|
|
160
165
|
if (!isPathInsideRoot(_class_private_field_loose_base(this, _rootResolved)[_rootResolved], resolved)) {
|
|
161
166
|
throw new providers.ProviderInitializationError(`Invalid path "${joined}" — escapes backup directory`);
|
|
162
167
|
}
|
|
@@ -164,20 +169,20 @@ function safePath(...posixSegments) {
|
|
|
164
169
|
}
|
|
165
170
|
async function loadMetadata() {
|
|
166
171
|
const metadataPath = _class_private_field_loose_base(this, _safePath)[_safePath](METADATA_FILE_PATH);
|
|
167
|
-
if (!await
|
|
172
|
+
if (!await fs__default.default.pathExists(metadataPath)) {
|
|
168
173
|
throw new providers.ProviderInitializationError(`Missing ${METADATA_FILE_PATH} in export directory '${_class_private_field_loose_base(this, _rootResolved)[_rootResolved]}'.`);
|
|
169
174
|
}
|
|
170
|
-
_class_private_field_loose_base(this, _metadata)[_metadata] = await
|
|
175
|
+
_class_private_field_loose_base(this, _metadata)[_metadata] = await fs__default.default.readJson(metadataPath);
|
|
171
176
|
}
|
|
172
177
|
async function pipeAssetsToStream(outStream, uploadsDir) {
|
|
173
|
-
if (!await
|
|
178
|
+
if (!await fs__default.default.pathExists(uploadsDir)) {
|
|
174
179
|
outStream.end();
|
|
175
180
|
return;
|
|
176
181
|
}
|
|
177
|
-
const names = (await
|
|
182
|
+
const names = (await fs__default.default.readdir(uploadsDir)).sort();
|
|
178
183
|
for (const name of names){
|
|
179
|
-
const absUpload =
|
|
180
|
-
const stat = await
|
|
184
|
+
const absUpload = path__default.default.join(uploadsDir, name);
|
|
185
|
+
const stat = await fs__default.default.stat(absUpload);
|
|
181
186
|
if (stat.isFile()) {
|
|
182
187
|
let metadata;
|
|
183
188
|
try {
|
|
@@ -190,7 +195,7 @@ async function pipeAssetsToStream(outStream, uploadsDir) {
|
|
|
190
195
|
}));
|
|
191
196
|
return;
|
|
192
197
|
}
|
|
193
|
-
const normalizedPath = utils.unknownPathToPosix(
|
|
198
|
+
const normalizedPath = utils.unknownPathToPosix(path__default.default.posix.join('assets', 'uploads', name));
|
|
194
199
|
const asset = {
|
|
195
200
|
metadata,
|
|
196
201
|
filename: name,
|
|
@@ -198,7 +203,7 @@ async function pipeAssetsToStream(outStream, uploadsDir) {
|
|
|
198
203
|
stats: {
|
|
199
204
|
size: stat.size
|
|
200
205
|
},
|
|
201
|
-
stream:
|
|
206
|
+
stream: fs__default.default.createReadStream(absUpload)
|
|
202
207
|
};
|
|
203
208
|
await writableAsyncWrite.write(outStream, asset);
|
|
204
209
|
}
|
|
@@ -207,15 +212,15 @@ async function pipeAssetsToStream(outStream, uploadsDir) {
|
|
|
207
212
|
}
|
|
208
213
|
async function readAssetMetadata(filename) {
|
|
209
214
|
const metadataPath = _class_private_field_loose_base(this, _safePath)[_safePath]('assets', 'metadata', `${filename}.json`);
|
|
210
|
-
return
|
|
215
|
+
return fs__default.default.readJson(metadataPath);
|
|
211
216
|
}
|
|
212
217
|
async function listJsonlFiles(posixSubdir) {
|
|
213
218
|
const dirAbs = _class_private_field_loose_base(this, _safePath)[_safePath](...posixSubdir.split('/').filter(Boolean));
|
|
214
|
-
if (!await
|
|
219
|
+
if (!await fs__default.default.pathExists(dirAbs)) {
|
|
215
220
|
return [];
|
|
216
221
|
}
|
|
217
|
-
const names = await
|
|
218
|
-
return names.filter((n)=>n.endsWith('.jsonl')).sort().map((n)=>
|
|
222
|
+
const names = await fs__default.default.readdir(dirAbs);
|
|
223
|
+
return names.filter((n)=>n.endsWith('.jsonl')).sort().map((n)=>path__default.default.join(dirAbs, n));
|
|
219
224
|
}
|
|
220
225
|
function streamJsonlDirectory(posixSubdir) {
|
|
221
226
|
const outStream = new stream$1.PassThrough({
|
|
@@ -240,7 +245,7 @@ async function pipeJsonlDirectoryToStream(outStream, posixSubdir) {
|
|
|
240
245
|
}),
|
|
241
246
|
(line)=>line.value
|
|
242
247
|
];
|
|
243
|
-
const stream =
|
|
248
|
+
const stream = fs__default.default.createReadStream(absPath).pipe(streamChain.chain(transforms));
|
|
244
249
|
try {
|
|
245
250
|
for await (const chunk of stream){
|
|
246
251
|
await writableAsyncWrite.write(outStream, chunk);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/directory/providers/source/index.ts"],"sourcesContent":["import path from 'path';\nimport type { Readable } from 'stream';\nimport { PassThrough } from 'stream';\n\nimport fs from 'fs-extra';\nimport { isEmpty, keyBy } from 'lodash/fp';\nimport { chain } from 'stream-chain';\nimport { parser } from 'stream-json/jsonl/Parser';\nimport type { Struct } from '@strapi/types';\n\nimport type { IAsset, IMetadata, ISourceProvider, ProviderType } from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\n\nimport * as utils from '../../../utils';\nimport { write } from '../../../utils/writable-async-write';\nimport { ProviderInitializationError, ProviderTransferError } from '../../../errors/providers';\nimport { unknownPathToPosix } from '../../../file/providers/source/utils';\n\nconst METADATA_FILE_PATH = 'metadata.json';\n\nexport interface ILocalDirectorySourceProviderOptions {\n directory: {\n /** Absolute or relative path to the root of an unpacked Strapi data-transfer export */\n path: string;\n };\n}\n\nexport const createLocalDirectorySourceProvider = (\n options: ILocalDirectorySourceProviderOptions\n) => {\n return new LocalDirectorySourceProvider(options);\n};\n\nconst isPathInsideRoot = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));\n};\n\nclass LocalDirectorySourceProvider implements ISourceProvider {\n type: ProviderType = 'source';\n\n name = 'source::local-directory';\n\n options: ILocalDirectorySourceProviderOptions;\n\n #rootResolved: string;\n\n #metadata?: IMetadata;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectorySourceProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-source-provider',\n },\n kind: 'info',\n });\n }\n\n /** Resolve a posix-style relative path under the export root; rejects escapes. */\n #safePath(...posixSegments: string[]): string {\n const joined = path.posix.join(...posixSegments);\n const segments = joined.split(path.posix.sep).filter(Boolean);\n const resolved = path.resolve(this.#rootResolved, ...segments);\n if (!isPathInsideRoot(this.#rootResolved, resolved)) {\n throw new ProviderInitializationError(`Invalid path \"${joined}\" — escapes backup directory`);\n }\n return resolved;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter) {\n this.#diagnostics = diagnostics;\n const root = this.#rootResolved;\n\n try {\n const stat = await fs.stat(root);\n if (!stat.isDirectory()) {\n throw new ProviderInitializationError(`Path '${root}' is not a directory.`);\n }\n await this.#loadMetadata();\n } catch (e) {\n if (e instanceof ProviderInitializationError) {\n throw e;\n }\n throw new ProviderInitializationError(\n `Directory '${root}' is not a valid Strapi data export.`\n );\n }\n\n if (!this.#metadata) {\n throw new ProviderInitializationError('Could not load metadata from Strapi data export.');\n }\n }\n\n async #loadMetadata() {\n const metadataPath = this.#safePath(METADATA_FILE_PATH);\n if (!(await fs.pathExists(metadataPath))) {\n throw new ProviderInitializationError(\n `Missing ${METADATA_FILE_PATH} in export directory '${this.#rootResolved}'.`\n );\n }\n this.#metadata = await fs.readJson(metadataPath);\n }\n\n async getMetadata() {\n this.#reportInfo('getting metadata');\n if (!this.#metadata) {\n await this.#loadMetadata();\n }\n return this.#metadata ?? null;\n }\n\n async getSchemas() {\n this.#reportInfo('getting schemas');\n const schemaCollection = await utils.stream.collect<Struct.Schema>(\n this.createSchemasReadStream()\n );\n\n if (isEmpty(schemaCollection)) {\n throw new ProviderInitializationError('Could not load schemas from Strapi data export.');\n }\n\n const schemas = keyBy('uid', schemaCollection);\n return utils.schema.schemasToValidJSON(schemas);\n }\n\n createEntitiesReadStream(): Readable {\n this.#reportInfo('creating entities read stream');\n return this.#streamJsonlDirectory('entities');\n }\n\n createSchemasReadStream(): Readable {\n this.#reportInfo('creating schemas read stream');\n return this.#streamJsonlDirectory('schemas');\n }\n\n createLinksReadStream(): Readable {\n this.#reportInfo('creating links read stream');\n return this.#streamJsonlDirectory('links');\n }\n\n createConfigurationReadStream(): Readable {\n this.#reportInfo('creating configuration read stream');\n return this.#streamJsonlDirectory('configuration');\n }\n\n createAssetsReadStream(): Readable {\n const outStream = new PassThrough({ objectMode: true });\n const uploadsDir = this.#safePath('assets', 'uploads');\n this.#reportInfo('creating assets read stream');\n\n this.#pipeAssetsToStream(outStream, uploadsDir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeAssetsToStream(outStream: PassThrough, uploadsDir: string): Promise<void> {\n if (!(await fs.pathExists(uploadsDir))) {\n outStream.end();\n return;\n }\n\n const names = (await fs.readdir(uploadsDir)).sort();\n for (const name of names) {\n const absUpload = path.join(uploadsDir, name);\n const stat = await fs.stat(absUpload);\n if (stat.isFile()) {\n let metadata: IAsset['metadata'];\n try {\n metadata = await this.#readAssetMetadata(name);\n } catch (error) {\n outStream.destroy(\n new ProviderTransferError(`Failed to read metadata for ${name}`, {\n details: { error },\n })\n );\n return;\n }\n\n const normalizedPath = unknownPathToPosix(path.posix.join('assets', 'uploads', name));\n const asset: IAsset = {\n metadata,\n filename: name,\n filepath: normalizedPath,\n stats: { size: stat.size },\n stream: fs.createReadStream(absUpload),\n };\n await write(outStream, asset);\n }\n }\n outStream.end();\n }\n\n async #readAssetMetadata(filename: string): Promise<IAsset['metadata']> {\n const metadataPath = this.#safePath('assets', 'metadata', `${filename}.json`);\n return fs.readJson(metadataPath);\n }\n\n async #listJsonlFiles(posixSubdir: string): Promise<string[]> {\n const dirAbs = this.#safePath(...posixSubdir.split('/').filter(Boolean));\n if (!(await fs.pathExists(dirAbs))) {\n return [];\n }\n const names = await fs.readdir(dirAbs);\n return names\n .filter((n) => n.endsWith('.jsonl'))\n .sort()\n .map((n) => path.join(dirAbs, n));\n }\n\n #streamJsonlDirectory(posixSubdir: string): Readable {\n const outStream = new PassThrough({ objectMode: true });\n this.#reportInfo(`streaming jsonl from ${posixSubdir}`);\n\n this.#pipeJsonlDirectoryToStream(outStream, posixSubdir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeJsonlDirectoryToStream(outStream: PassThrough, posixSubdir: string): Promise<void> {\n const files = await this.#listJsonlFiles(posixSubdir);\n for (const absPath of files) {\n const transforms = [\n parser({\n checkErrors: true,\n }),\n (line: { key: string; value: object }) => line.value,\n ];\n\n const stream = fs.createReadStream(absPath).pipe(chain(transforms));\n\n try {\n for await (const chunk of stream) {\n await write(outStream, chunk);\n }\n } catch (e: unknown) {\n outStream.destroy(\n new ProviderTransferError(`Error parsing JSONL in ${absPath}: ${(e as Error).message}`, {\n details: {\n error: e,\n },\n })\n );\n return;\n }\n }\n outStream.end();\n }\n}\n"],"names":["METADATA_FILE_PATH","createLocalDirectorySourceProvider","options","LocalDirectorySourceProvider","isPathInsideRoot","root","candidate","relative","path","startsWith","sep","isAbsolute","bootstrap","diagnostics","stat","fs","isDirectory","ProviderInitializationError","e","getMetadata","getSchemas","schemaCollection","utils","createSchemasReadStream","isEmpty","schemas","keyBy","createEntitiesReadStream","createLinksReadStream","createConfigurationReadStream","createAssetsReadStream","outStream","PassThrough","objectMode","uploadsDir","catch","destroy","Error","ProviderTransferError","String","details","error","type","name","resolve","directory","message","report","createdAt","Date","origin","kind","posixSegments","joined","posix","join","segments","split","filter","Boolean","resolved","metadataPath","pathExists","readJson","end","names","readdir","sort","absUpload","isFile","metadata","normalizedPath","unknownPathToPosix","asset","filename","filepath","stats","size","stream","createReadStream","write","posixSubdir","dirAbs","n","endsWith","map","files","absPath","transforms","parser","checkErrors","line","value","pipe","chain","chunk"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAMA,kBAAAA,GAAqB,eAAA;AASpB,MAAMC,qCAAqC,CAChDC,OAAAA,GAAAA;AAEA,IAAA,OAAO,IAAIC,4BAAAA,CAA6BD,OAAAA,CAAAA;AAC1C;AAEA,MAAME,gBAAAA,GAAmB,CAACC,IAAAA,EAAcC,SAAAA,GAAAA;AACtC,IAAA,MAAMC,QAAAA,GAAWC,IAAAA,CAAKD,QAAQ,CAACF,IAAAA,EAAMC,SAAAA,CAAAA;AACrC,IAAA,OAAOC,aAAa,EAAA,IAAO,CAACA,QAAAA,CAASE,UAAU,CAAC,CAAC,EAAE,EAAED,IAAAA,CAAKE,GAAG,CAAA,CAAE,CAAA,IAAK,CAACF,IAAAA,CAAKG,UAAU,CAACJ,QAAAA,CAAAA;AACvF,CAAA;IASE,aAAA,iBAAA,8BAAA,CAAA,eAAA,CAAA,EAEA,SAAA,iBAAA,8BAAA,CAAA,WAAA,CAAA,EAEA,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EAOA,WAAA,iBAAA,8BAAA,CAAA,aAAA,CAAA,qFAYA,uEAkCM,aAAA,iBAAA,8BAAA,CAAA,eAAA,CAAA,EAkEA,mBAAA,iBAAA,8BAAA,CAAA,qBAAA,CAAA,EAqCA,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA,EAKA,eAAA,iBAAA,8BAAA,CAAA,iBAAA,CAAA,EAYN,qBAAA,iBAAA,8BAAA,CAAA,uBAAA,CAAA,EAaM,2BAAA,iBAAA,8BAAA,CAAA,6BAAA,CAAA;AArMR,MAAMJ,4BAAAA,CAAAA;IAwCJ,MAAMS,SAAAA,CAAUC,WAAgC,EAAE;QAChD,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,GAAeA,WAAAA;AACpB,QAAA,MAAMR,IAAAA,GAAO,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA;QAElB,IAAI;AACF,YAAA,MAAMS,IAAAA,GAAO,MAAMC,EAAAA,CAAGD,IAAI,CAACT,IAAAA,CAAAA;YAC3B,IAAI,CAACS,IAAAA,CAAKE,WAAW,EAAA,EAAI;AACvB,gBAAA,MAAM,IAAIC,qCAAAA,CAA4B,CAAC,MAAM,EAAEZ,IAAAA,CAAK,qBAAqB,CAAC,CAAA;AAC5E,YAAA;YACA,MAAM,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,EAAA;AACb,QAAA,CAAA,CAAE,OAAOa,CAAAA,EAAG;AACV,YAAA,IAAIA,aAAaD,qCAAAA,EAA6B;gBAC5C,MAAMC,CAAAA;AACR,YAAA;AACA,YAAA,MAAM,IAAID,qCAAAA,CACR,CAAC,WAAW,EAAEZ,IAAAA,CAAK,oCAAoC,CAAC,CAAA;AAE5D,QAAA;AAEA,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,EAAW;AACnB,YAAA,MAAM,IAAIY,qCAAAA,CAA4B,kDAAA,CAAA;AACxC,QAAA;AACF,IAAA;AAYA,IAAA,MAAME,WAAAA,GAAc;QAClB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,kBAAA,CAAA;AACjB,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,EAAW;YACnB,MAAM,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,EAAA;AACb,QAAA;AACA,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,IAAa,IAAA;AAC3B,IAAA;AAEA,IAAA,MAAMC,UAAAA,GAAa;QACjB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,iBAAA,CAAA;QACjB,MAAMC,gBAAAA,GAAmB,MAAMC,cAAoB,CACjD,IAAI,CAACC,uBAAuB,EAAA,CAAA;AAG9B,QAAA,IAAIC,WAAQH,gBAAAA,CAAAA,EAAmB;AAC7B,YAAA,MAAM,IAAIJ,qCAAAA,CAA4B,iDAAA,CAAA;AACxC,QAAA;QAEA,MAAMQ,OAAAA,GAAUC,SAAM,KAAA,EAAOL,gBAAAA,CAAAA;AAC7B,QAAA,OAAOC,yBAA+B,CAACG,OAAAA,CAAAA;AACzC,IAAA;IAEAE,wBAAAA,GAAqC;QACnC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,+BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,UAAA,CAAA;AACpC,IAAA;IAEAJ,uBAAAA,GAAoC;QAClC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,8BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,SAAA,CAAA;AACpC,IAAA;IAEAK,qBAAAA,GAAkC;QAChC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,4BAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,OAAA,CAAA;AACpC,IAAA;IAEAC,6BAAAA,GAA0C;QACxC,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,oCAAA,CAAA;AACjB,QAAA,OAAO,+BAAA,CAAA,IAAI,EAAC,qBAAA,CAAA,CAAA,qBAAA,CAAA,CAAsB,eAAA,CAAA;AACpC,IAAA;IAEAC,sBAAAA,GAAmC;QACjC,MAAMC,SAAAA,GAAY,IAAIC,oBAAAA,CAAY;YAAEC,UAAAA,EAAY;AAAK,SAAA,CAAA;AACrD,QAAA,MAAMC,aAAa,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,WAAU,QAAA,EAAU,SAAA,CAAA;QAC5C,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,6BAAA,CAAA;QAEjB,+BAAA,CAAA,IAAI,EAAC,mBAAA,CAAA,CAAA,mBAAA,CAAA,CAAoBH,WAAWG,UAAAA,CAAAA,CAAYC,KAAK,CAAC,CAACjB,CAAAA,GAAAA;YACrDa,SAAAA,CAAUK,OAAO,CACflB,CAAAA,YAAamB,KAAAA,GAAQnB,IAAI,IAAIoB,+BAAAA,CAAsBC,OAAOrB,CAAAA,CAAAA,EAAI;gBAAEsB,OAAAA,EAAS;oBAAEC,KAAAA,EAAOvB;AAAE;AAAE,aAAA,CAAA,CAAA;AAE1F,QAAA,CAAA,CAAA;QAEA,OAAOa,SAAAA;AACT,IAAA;AAnHA,IAAA,WAAA,CAAY7B,OAA6C,CAAE;QAK3D,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAYA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAkCA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,aAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAkEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,mBAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAqCA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,kBAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAKA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,eAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAYA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,qBAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAaA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,2BAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QA9LA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,aAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,SAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;mBAAA;;aAVAwC,IAAAA,GAAqB,QAAA;aAErBC,IAAAA,GAAO,yBAAA;QAWL,IAAI,CAACzC,OAAO,GAAGA,OAAAA;QACf,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,GAAgBM,IAAAA,CAAKoC,OAAO,CAAC1C,OAAAA,CAAQ2C,SAAS,CAACrC,IAAI,CAAA;AAC1D,IAAA;AAkNF;AAhNE,SAAA,WAAYsC,OAAe,EAAA;AACzB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcC,MAAAA,CAAO;QACxBP,OAAAA,EAAS;AACPQ,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfH,YAAAA,OAAAA;YACAI,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAGA,SAAA,QAAA,CAAU,GAAGC,aAAuB,EAAA;AAClC,IAAA,MAAMC,MAAAA,GAAS7C,IAAAA,CAAK8C,KAAK,CAACC,IAAI,CAAA,GAAIH,aAAAA,CAAAA;IAClC,MAAMI,QAAAA,GAAWH,MAAAA,CAAOI,KAAK,CAACjD,IAAAA,CAAK8C,KAAK,CAAC5C,GAAG,CAAA,CAAEgD,MAAM,CAACC,OAAAA,CAAAA;IACrD,MAAMC,QAAAA,GAAWpD,KAAKoC,OAAO,CAAC,gCAAA,IAAI,EAAC,eAAA,aAAA,CAAA,EAAA,GAAkBY,QAAAA,CAAAA;AACrD,IAAA,IAAI,CAACpD,gBAAAA,CAAiB,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,gBAAewD,QAAAA,CAAAA,EAAW;AACnD,QAAA,MAAM,IAAI3C,qCAAAA,CAA4B,CAAC,cAAc,EAAEoC,MAAAA,CAAO,4BAA4B,CAAC,CAAA;AAC7F,IAAA;IACA,OAAOO,QAAAA;AACT;AA0BA,eAAA,YAAA,GAAA;AACE,IAAA,MAAMC,YAAAA,GAAe,+BAAA,CAAA,IAAI,EAAC,WAAA,SAAA,CAAA,CAAU7D,kBAAAA,CAAAA;AACpC,IAAA,IAAI,CAAE,MAAMe,EAAAA,CAAG+C,UAAU,CAACD,YAAAA,CAAAA,EAAgB;AACxC,QAAA,MAAM,IAAI5C,qCAAAA,CACR,CAAC,QAAQ,EAAEjB,kBAAAA,CAAmB,sBAAsB,EAAE,+BAAA,CAAA,IAAI,EAAC,aAAA,CAAA,CAAA,aAAA,CAAA,CAAc,EAAE,CAAC,CAAA;AAEhF,IAAA;AACA,IAAA,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,aAAY,MAAMe,EAAAA,CAAGgD,QAAQ,CAACF,YAAAA,CAAAA;AACrC;AA0DA,eAAA,kBAAA,CAA0B9B,SAAsB,EAAEG,UAAkB,EAAA;AAClE,IAAA,IAAI,CAAE,MAAMnB,EAAAA,CAAG+C,UAAU,CAAC5B,UAAAA,CAAAA,EAAc;AACtCH,QAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACb,QAAA;AACF,IAAA;IAEA,MAAMC,KAAAA,GAAQ,CAAC,MAAMlD,GAAGmD,OAAO,CAAChC,UAAAA,CAAU,EAAGiC,IAAI,EAAA;IACjD,KAAK,MAAMxB,QAAQsB,KAAAA,CAAO;AACxB,QAAA,MAAMG,SAAAA,GAAY5D,IAAAA,CAAK+C,IAAI,CAACrB,UAAAA,EAAYS,IAAAA,CAAAA;AACxC,QAAA,MAAM7B,IAAAA,GAAO,MAAMC,EAAAA,CAAGD,IAAI,CAACsD,SAAAA,CAAAA;QAC3B,IAAItD,IAAAA,CAAKuD,MAAM,EAAA,EAAI;YACjB,IAAIC,QAAAA;YACJ,IAAI;AACFA,gBAAAA,QAAAA,GAAW,MAAM,+BAAA,CAAA,IAAI,EAAC,oBAAA,kBAAA,CAAA,CAAmB3B,IAAAA,CAAAA;AAC3C,YAAA,CAAA,CAAE,OAAOF,KAAAA,EAAO;gBACdV,SAAAA,CAAUK,OAAO,CACf,IAAIE,+BAAAA,CAAsB,CAAC,4BAA4B,EAAEK,MAAM,EAAE;oBAC/DH,OAAAA,EAAS;AAAEC,wBAAAA;AAAM;AACnB,iBAAA,CAAA,CAAA;AAEF,gBAAA;AACF,YAAA;YAEA,MAAM8B,cAAAA,GAAiBC,yBAAmBhE,IAAAA,CAAK8C,KAAK,CAACC,IAAI,CAAC,UAAU,SAAA,EAAWZ,IAAAA,CAAAA,CAAAA;AAC/E,YAAA,MAAM8B,KAAAA,GAAgB;AACpBH,gBAAAA,QAAAA;gBACAI,QAAAA,EAAU/B,IAAAA;gBACVgC,QAAAA,EAAUJ,cAAAA;gBACVK,KAAAA,EAAO;AAAEC,oBAAAA,IAAAA,EAAM/D,KAAK+D;AAAK,iBAAA;gBACzBC,MAAAA,EAAQ/D,EAAAA,CAAGgE,gBAAgB,CAACX,SAAAA;AAC9B,aAAA;AACA,YAAA,MAAMY,yBAAMjD,SAAAA,EAAW0C,KAAAA,CAAAA;AACzB,QAAA;AACF,IAAA;AACA1C,IAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACf;AAEA,eAAA,kBAAyBU,QAAgB,EAAA;IACvC,MAAMb,YAAAA,GAAe,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,CAAU,QAAA,EAAU,UAAA,EAAY,CAAA,EAAGa,QAAAA,CAAS,KAAK,CAAC,CAAA;IAC5E,OAAO3D,EAAAA,CAAGgD,QAAQ,CAACF,YAAAA,CAAAA;AACrB;AAEA,eAAA,eAAsBoB,WAAmB,EAAA;IACvC,MAAMC,MAAAA,GAAS,+BAAA,CAAA,IAAI,EAAC,SAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAaD,WAAAA,CAAYxB,KAAK,CAAC,GAAA,CAAA,CAAKC,MAAM,CAACC,OAAAA,CAAAA,CAAAA;AAC/D,IAAA,IAAI,CAAE,MAAM5C,EAAAA,CAAG+C,UAAU,CAACoB,MAAAA,CAAAA,EAAU;AAClC,QAAA,OAAO,EAAE;AACX,IAAA;AACA,IAAA,MAAMjB,KAAAA,GAAQ,MAAMlD,EAAAA,CAAGmD,OAAO,CAACgB,MAAAA,CAAAA;AAC/B,IAAA,OAAOjB,MACJP,MAAM,CAAC,CAACyB,CAAAA,GAAMA,CAAAA,CAAEC,QAAQ,CAAC,QAAA,CAAA,CAAA,CACzBjB,IAAI,EAAA,CACJkB,GAAG,CAAC,CAACF,IAAM3E,IAAAA,CAAK+C,IAAI,CAAC2B,MAAAA,EAAQC,CAAAA,CAAAA,CAAAA;AAClC;AAEA,SAAA,qBAAsBF,WAAmB,EAAA;IACvC,MAAMlD,SAAAA,GAAY,IAAIC,oBAAAA,CAAY;QAAEC,UAAAA,EAAY;AAAK,KAAA,CAAA;AACrD,IAAA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,aAAY,CAAC,qBAAqB,EAAEgD,WAAAA,CAAAA,CAAa,CAAA;IAEtD,+BAAA,CAAA,IAAI,EAAC,2BAAA,CAAA,CAAA,2BAAA,CAAA,CAA4BlD,WAAWkD,WAAAA,CAAAA,CAAa9C,KAAK,CAAC,CAACjB,CAAAA,GAAAA;QAC9Da,SAAAA,CAAUK,OAAO,CACflB,CAAAA,YAAamB,KAAAA,GAAQnB,IAAI,IAAIoB,+BAAAA,CAAsBC,OAAOrB,CAAAA,CAAAA,EAAI;YAAEsB,OAAAA,EAAS;gBAAEC,KAAAA,EAAOvB;AAAE;AAAE,SAAA,CAAA,CAAA;AAE1F,IAAA,CAAA,CAAA;IAEA,OAAOa,SAAAA;AACT;AAEA,eAAA,0BAAA,CAAkCA,SAAsB,EAAEkD,WAAmB,EAAA;AAC3E,IAAA,MAAMK,QAAQ,MAAM,+BAAA,CAAA,IAAI,EAAC,iBAAA,eAAA,CAAA,CAAgBL,WAAAA,CAAAA;IACzC,KAAK,MAAMM,WAAWD,KAAAA,CAAO;AAC3B,QAAA,MAAME,UAAAA,GAAa;YACjBC,aAAAA,CAAO;gBACLC,WAAAA,EAAa;AACf,aAAA,CAAA;YACA,CAACC,IAAAA,GAAyCA,KAAKC;AAChD,SAAA;AAED,QAAA,MAAMd,SAAS/D,EAAAA,CAAGgE,gBAAgB,CAACQ,OAAAA,CAAAA,CAASM,IAAI,CAACC,iBAAAA,CAAMN,UAAAA,CAAAA,CAAAA;QAEvD,IAAI;YACF,WAAW,MAAMO,SAASjB,MAAAA,CAAQ;AAChC,gBAAA,MAAME,yBAAMjD,SAAAA,EAAWgE,KAAAA,CAAAA;AACzB,YAAA;AACF,QAAA,CAAA,CAAE,OAAO7E,CAAAA,EAAY;AACnBa,YAAAA,SAAAA,CAAUK,OAAO,CACf,IAAIE,+BAAAA,CAAsB,CAAC,uBAAuB,EAAEiD,OAAAA,CAAQ,EAAE,EAAGrE,CAAAA,CAAY4B,OAAO,EAAE,EAAE;gBACtFN,OAAAA,EAAS;oBACPC,KAAAA,EAAOvB;AACT;AACF,aAAA,CAAA,CAAA;AAEF,YAAA;AACF,QAAA;AACF,IAAA;AACAa,IAAAA,SAAAA,CAAUiC,GAAG,EAAA;AACf;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/directory/providers/source/index.ts"],"sourcesContent":["import path from 'path';\nimport type { Readable } from 'stream';\nimport { PassThrough } from 'stream';\n\nimport fs from 'fs-extra';\nimport { isEmpty, keyBy } from 'lodash/fp';\nimport { chain } from 'stream-chain';\nimport { parser } from 'stream-json/jsonl/Parser';\nimport type { Struct } from '@strapi/types';\n\nimport type { IAsset, IMetadata, ISourceProvider, ProviderType } from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\n\nimport * as utils from '../../../utils';\nimport { write } from '../../../utils/writable-async-write';\nimport { ProviderInitializationError, ProviderTransferError } from '../../../errors/providers';\nimport { unknownPathToPosix } from '../../../file/providers/source/utils';\n\nconst METADATA_FILE_PATH = 'metadata.json';\n\nexport interface ILocalDirectorySourceProviderOptions {\n directory: {\n /** Absolute or relative path to the root of an unpacked Strapi data-transfer export */\n path: string;\n };\n}\n\nexport const createLocalDirectorySourceProvider = (\n options: ILocalDirectorySourceProviderOptions\n) => {\n return new LocalDirectorySourceProvider(options);\n};\n\nconst isPathInsideRoot = (root: string, candidate: string): boolean => {\n const relative = path.relative(root, candidate);\n return relative === '' || (!relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative));\n};\n\nclass LocalDirectorySourceProvider implements ISourceProvider {\n type: ProviderType = 'source';\n\n name = 'source::local-directory';\n\n options: ILocalDirectorySourceProviderOptions;\n\n #rootResolved: string;\n\n #metadata?: IMetadata;\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalDirectorySourceProviderOptions) {\n this.options = options;\n this.#rootResolved = path.resolve(options.directory.path);\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'directory-source-provider',\n },\n kind: 'info',\n });\n }\n\n /** Resolve a posix-style relative path under the export root; rejects escapes. */\n #safePath(...posixSegments: string[]): string {\n const joined = path.posix.join(...posixSegments);\n const segments = joined.split(path.posix.sep).filter(Boolean);\n const resolved = path.resolve(this.#rootResolved, ...segments);\n if (!isPathInsideRoot(this.#rootResolved, resolved)) {\n throw new ProviderInitializationError(`Invalid path \"${joined}\" — escapes backup directory`);\n }\n return resolved;\n }\n\n async bootstrap(diagnostics: IDiagnosticReporter) {\n this.#diagnostics = diagnostics;\n const root = this.#rootResolved;\n\n try {\n const stat = await fs.stat(root);\n if (!stat.isDirectory()) {\n throw new ProviderInitializationError(`Path '${root}' is not a directory.`);\n }\n await this.#loadMetadata();\n } catch (e) {\n if (e instanceof ProviderInitializationError) {\n throw e;\n }\n throw new ProviderInitializationError(\n `Directory '${root}' is not a valid Strapi data export.`\n );\n }\n\n if (!this.#metadata) {\n throw new ProviderInitializationError('Could not load metadata from Strapi data export.');\n }\n }\n\n async #loadMetadata() {\n const metadataPath = this.#safePath(METADATA_FILE_PATH);\n if (!(await fs.pathExists(metadataPath))) {\n throw new ProviderInitializationError(\n `Missing ${METADATA_FILE_PATH} in export directory '${this.#rootResolved}'.`\n );\n }\n this.#metadata = await fs.readJson(metadataPath);\n }\n\n async getMetadata() {\n this.#reportInfo('getting metadata');\n if (!this.#metadata) {\n await this.#loadMetadata();\n }\n return this.#metadata ?? null;\n }\n\n async getSchemas() {\n this.#reportInfo('getting schemas');\n const schemaCollection = await utils.stream.collect<Struct.Schema>(\n this.createSchemasReadStream()\n );\n\n if (isEmpty(schemaCollection)) {\n throw new ProviderInitializationError('Could not load schemas from Strapi data export.');\n }\n\n const schemas = keyBy('uid', schemaCollection);\n return utils.schema.schemasToValidJSON(schemas);\n }\n\n createEntitiesReadStream(): Readable {\n this.#reportInfo('creating entities read stream');\n return this.#streamJsonlDirectory('entities');\n }\n\n createSchemasReadStream(): Readable {\n this.#reportInfo('creating schemas read stream');\n return this.#streamJsonlDirectory('schemas');\n }\n\n createLinksReadStream(): Readable {\n this.#reportInfo('creating links read stream');\n return this.#streamJsonlDirectory('links');\n }\n\n createConfigurationReadStream(): Readable {\n this.#reportInfo('creating configuration read stream');\n return this.#streamJsonlDirectory('configuration');\n }\n\n createAssetsReadStream(): Readable {\n const outStream = new PassThrough({ objectMode: true });\n const uploadsDir = this.#safePath('assets', 'uploads');\n this.#reportInfo('creating assets read stream');\n\n this.#pipeAssetsToStream(outStream, uploadsDir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeAssetsToStream(outStream: PassThrough, uploadsDir: string): Promise<void> {\n if (!(await fs.pathExists(uploadsDir))) {\n outStream.end();\n return;\n }\n\n const names = (await fs.readdir(uploadsDir)).sort();\n for (const name of names) {\n const absUpload = path.join(uploadsDir, name);\n const stat = await fs.stat(absUpload);\n if (stat.isFile()) {\n let metadata: IAsset['metadata'];\n try {\n metadata = await this.#readAssetMetadata(name);\n } catch (error) {\n outStream.destroy(\n new ProviderTransferError(`Failed to read metadata for ${name}`, {\n details: { error },\n })\n );\n return;\n }\n\n const normalizedPath = unknownPathToPosix(path.posix.join('assets', 'uploads', name));\n const asset: IAsset = {\n metadata,\n filename: name,\n filepath: normalizedPath,\n stats: { size: stat.size },\n stream: fs.createReadStream(absUpload),\n };\n await write(outStream, asset);\n }\n }\n outStream.end();\n }\n\n async #readAssetMetadata(filename: string): Promise<IAsset['metadata']> {\n const metadataPath = this.#safePath('assets', 'metadata', `${filename}.json`);\n return fs.readJson(metadataPath);\n }\n\n async #listJsonlFiles(posixSubdir: string): Promise<string[]> {\n const dirAbs = this.#safePath(...posixSubdir.split('/').filter(Boolean));\n if (!(await fs.pathExists(dirAbs))) {\n return [];\n }\n const names = await fs.readdir(dirAbs);\n return names\n .filter((n) => n.endsWith('.jsonl'))\n .sort()\n .map((n) => path.join(dirAbs, n));\n }\n\n #streamJsonlDirectory(posixSubdir: string): Readable {\n const outStream = new PassThrough({ objectMode: true });\n this.#reportInfo(`streaming jsonl from ${posixSubdir}`);\n\n this.#pipeJsonlDirectoryToStream(outStream, posixSubdir).catch((e: unknown) => {\n outStream.destroy(\n e instanceof Error ? e : new ProviderTransferError(String(e), { details: { error: e } })\n );\n });\n\n return outStream;\n }\n\n async #pipeJsonlDirectoryToStream(outStream: PassThrough, posixSubdir: string): Promise<void> {\n const files = await this.#listJsonlFiles(posixSubdir);\n for (const absPath of files) {\n const transforms = [\n parser({\n checkErrors: true,\n }),\n (line: { key: string; value: object }) => line.value,\n ];\n\n const stream = fs.createReadStream(absPath).pipe(chain(transforms));\n\n try {\n for await (const chunk of stream) {\n await write(outStream, chunk);\n }\n } catch (e: unknown) {\n outStream.destroy(\n new ProviderTransferError(`Error parsing JSONL in ${absPath}: ${(e as Error).message}`, {\n details: {\n error: e,\n },\n })\n );\n return;\n }\n }\n outStream.end();\n }\n}\n"],"names":["METADATA_FILE_PATH","createLocalDirectorySourceProvider","options","LocalDirectorySourceProvider","isPathInsideRoot","root","candidate","relative","path","startsWith","sep","isAbsolute","bootstrap","diagnostics","stat","fs","isDirectory","ProviderInitializationError","e","getMetadata","getSchemas","schemaCollection","utils","createSchemasReadStream","isEmpty","schemas","keyBy","createEntitiesReadStream","createLinksReadStream","createConfigurationReadStream","createAssetsReadStream","outStream","PassThrough","objectMode","uploadsDir","catch","destroy","Error","ProviderTransferError","String","details","error","type","name","resolve","directory","message","report","createdAt","Date","origin","kind","posixSegments","joined","posix","join","segments","split","filter","Boolean","resolved","metadataPath","pathExists","readJson","end","names","readdir","sort","absUpload","isFile","metadata","normalizedPath","unknownPathToPosix","asset","filename","filepath","stats","size","stream","createReadStream","write","posixSubdir","dirAbs","n","endsWith","map","files","absPath","transforms","parser","checkErrors","line","value","pipe","chain","chunk"],"mappings":"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"}
|
|
@@ -12,6 +12,12 @@ require('crypto');
|
|
|
12
12
|
var utils = require('./utils.js');
|
|
13
13
|
var providers = require('../../../errors/providers.js');
|
|
14
14
|
|
|
15
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
|
|
17
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
18
|
+
var zip__default = /*#__PURE__*/_interopDefault(zip);
|
|
19
|
+
var tar__default = /*#__PURE__*/_interopDefault(tar);
|
|
20
|
+
|
|
15
21
|
function _class_private_field_loose_base(receiver, privateKey) {
|
|
16
22
|
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
17
23
|
throw new TypeError("attempted to use private field on non-instance");
|
|
@@ -33,7 +39,7 @@ class LocalFileDestinationProvider {
|
|
|
33
39
|
}
|
|
34
40
|
createGzip() {
|
|
35
41
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating gzip');
|
|
36
|
-
return
|
|
42
|
+
return zip__default.default.createGzip();
|
|
37
43
|
}
|
|
38
44
|
bootstrap(diagnostics) {
|
|
39
45
|
_class_private_field_loose_base(this, _diagnostics)[_diagnostics] = diagnostics;
|
|
@@ -41,7 +47,7 @@ class LocalFileDestinationProvider {
|
|
|
41
47
|
if (encryption.enabled && !encryption.key) {
|
|
42
48
|
throw new Error("Can't encrypt without a key");
|
|
43
49
|
}
|
|
44
|
-
_class_private_field_loose_base(this, _archive)[_archive].stream =
|
|
50
|
+
_class_private_field_loose_base(this, _archive)[_archive].stream = tar__default.default.pack();
|
|
45
51
|
const outStream = fs.createWriteStream(_class_private_field_loose_base(this, _archivePath)[_archivePath]);
|
|
46
52
|
outStream.on('error', (err)=>{
|
|
47
53
|
if (err.code === 'ENOSPC') {
|
|
@@ -146,8 +152,8 @@ class LocalFileDestinationProvider {
|
|
|
146
152
|
objectMode: true,
|
|
147
153
|
write (data, _encoding, callback) {
|
|
148
154
|
// always write tar files with posix paths so we have a standard format for paths regardless of system
|
|
149
|
-
const entryPath =
|
|
150
|
-
const entryMetadataPath =
|
|
155
|
+
const entryPath = path__default.default.posix.join('assets', 'uploads', data.filename);
|
|
156
|
+
const entryMetadataPath = path__default.default.posix.join('assets', 'metadata', `${data.filename}.json`);
|
|
151
157
|
const stringifiedMetadata = JSON.stringify(data.metadata);
|
|
152
158
|
archiveStream.entry({
|
|
153
159
|
name: entryMetadataPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/file/providers/destination/index.ts"],"sourcesContent":["import path from 'path';\nimport zlib from 'zlib';\nimport { Readable, Writable } from 'stream';\nimport { rm, createWriteStream } from 'fs-extra';\nimport tar from 'tar-stream';\nimport { stringer } from 'stream-json/jsonl/Stringer';\nimport { chain } from 'stream-chain';\n\nimport { createEncryptionCipher } from '../../../utils/encryption';\nimport type {\n IAsset,\n IDestinationProvider,\n IDestinationProviderTransferResults,\n IMetadata,\n ProviderType,\n Stream,\n} from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createFilePathFactory, createTarEntryStream } from './utils';\nimport { ProviderTransferError } from '../../../errors/providers';\n\nexport interface ILocalFileDestinationProviderOptions {\n encryption: {\n enabled: boolean; // if the file should be encrypted\n key?: string; // the key to use when encryption.enabled is true\n };\n\n compression: {\n enabled: boolean; // if the file should be compressed with gzip\n };\n\n file: {\n path: string; // the filename to create\n maxSize?: number; // the max size of a single backup file\n maxSizeJsonl?: number; // the max lines of each jsonl file before creating the next file\n };\n}\n\nexport interface ILocalFileDestinationProviderTransferResults\n extends IDestinationProviderTransferResults {\n file?: {\n path?: string;\n };\n}\n\nexport const createLocalFileDestinationProvider = (\n options: ILocalFileDestinationProviderOptions\n) => {\n return new LocalFileDestinationProvider(options);\n};\n\nclass LocalFileDestinationProvider implements IDestinationProvider {\n name = 'destination::local-file';\n\n type: ProviderType = 'destination';\n\n options: ILocalFileDestinationProviderOptions;\n\n results: ILocalFileDestinationProviderTransferResults = {};\n\n #providersMetadata: { source?: IMetadata; destination?: IMetadata } = {};\n\n #archive: { stream?: tar.Pack; pipeline?: Stream } = {};\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalFileDestinationProviderOptions) {\n this.options = options;\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'file-destination-provider',\n },\n kind: 'info',\n });\n }\n\n get #archivePath() {\n const { encryption, compression, file } = this.options;\n\n let filePath = `${file.path}.tar`;\n\n if (compression.enabled) {\n filePath += '.gz';\n }\n\n if (encryption.enabled) {\n filePath += '.enc';\n }\n\n return filePath;\n }\n\n setMetadata(target: ProviderType, metadata: IMetadata): IDestinationProvider {\n this.#providersMetadata[target] = metadata;\n\n return this;\n }\n\n createGzip(): zlib.Gzip {\n this.#reportInfo('creating gzip');\n return zlib.createGzip();\n }\n\n bootstrap(diagnostics: IDiagnosticReporter): void | Promise<void> {\n this.#diagnostics = diagnostics;\n const { compression, encryption } = this.options;\n\n if (encryption.enabled && !encryption.key) {\n throw new Error(\"Can't encrypt without a key\");\n }\n\n this.#archive.stream = tar.pack();\n\n const outStream = createWriteStream(this.#archivePath);\n\n outStream.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'ENOSPC') {\n throw new ProviderTransferError(\n \"Your server doesn't have space to proceed with the import.\"\n );\n }\n throw err;\n });\n\n const archiveTransforms: Stream[] = [];\n\n if (compression.enabled) {\n archiveTransforms.push(this.createGzip());\n }\n\n if (encryption.enabled && encryption.key) {\n archiveTransforms.push(createEncryptionCipher(encryption.key));\n }\n\n this.#archive.pipeline = chain([this.#archive.stream, ...archiveTransforms, outStream]);\n\n this.results.file = { path: this.#archivePath };\n }\n\n async close() {\n const { stream, pipeline } = this.#archive;\n\n if (!stream) {\n return;\n }\n\n await this.#writeMetadata();\n stream.finalize();\n\n if (pipeline && !pipeline.closed) {\n await new Promise<void>((resolve, reject) => {\n pipeline.on('close', resolve).on('error', reject);\n });\n }\n }\n\n async rollback(): Promise<void> {\n this.#reportInfo('rolling back');\n await this.close();\n await rm(this.#archivePath, { force: true });\n }\n\n getMetadata() {\n return null;\n }\n\n async #writeMetadata(): Promise<void> {\n this.#reportInfo('writing metadata');\n const metadata = this.#providersMetadata.source;\n\n if (metadata) {\n await new Promise((resolve) => {\n const outStream = this.#getMetadataStream();\n const data = JSON.stringify(metadata, null, 2);\n\n Readable.from(data).pipe(outStream).on('close', resolve);\n });\n }\n }\n\n #getMetadataStream() {\n const { stream } = this.#archive;\n\n if (!stream) {\n throw new Error('Archive stream is unavailable');\n }\n\n return createTarEntryStream(stream, () => 'metadata.json');\n }\n\n createSchemasWriteStream() {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating schemas write stream');\n const filePathFactory = createFilePathFactory('schemas');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createEntitiesWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating entities write stream');\n const filePathFactory = createFilePathFactory('entities');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createLinksWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating links write stream');\n const filePathFactory = createFilePathFactory('links');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createConfigurationWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating configuration write stream');\n const filePathFactory = createFilePathFactory('configuration');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createAssetsWriteStream(): Writable {\n const { stream: archiveStream } = this.#archive;\n\n if (!archiveStream) {\n throw new Error('Archive stream is unavailable');\n }\n\n this.#reportInfo('creating assets write stream');\n return new Writable({\n objectMode: true,\n write(data: IAsset, _encoding, callback) {\n // always write tar files with posix paths so we have a standard format for paths regardless of system\n const entryPath = path.posix.join('assets', 'uploads', data.filename);\n\n const entryMetadataPath = path.posix.join('assets', 'metadata', `${data.filename}.json`);\n const stringifiedMetadata = JSON.stringify(data.metadata);\n archiveStream.entry(\n {\n name: entryMetadataPath,\n size: stringifiedMetadata.length,\n },\n stringifiedMetadata\n );\n\n const entry = archiveStream.entry({\n name: entryPath,\n size: data.stats.size,\n });\n\n if (!entry) {\n callback(new Error(`Failed to created an asset tar entry for ${entryPath}`));\n return;\n }\n\n data.stream.pipe(entry);\n\n entry\n .on('finish', () => {\n callback(null);\n })\n .on('error', (error) => {\n callback(error);\n });\n },\n });\n }\n}\n"],"names":["createLocalFileDestinationProvider","options","LocalFileDestinationProvider","setMetadata","target","metadata","createGzip","zlib","bootstrap","diagnostics","compression","encryption","enabled","key","Error","stream","tar","pack","outStream","createWriteStream","on","err","code","ProviderTransferError","archiveTransforms","push","createEncryptionCipher","pipeline","chain","results","file","path","close","finalize","closed","Promise","resolve","reject","rollback","rm","force","getMetadata","createSchemasWriteStream","filePathFactory","createFilePathFactory","entryStream","createTarEntryStream","maxSizeJsonl","stringer","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","archiveStream","Writable","objectMode","write","data","_encoding","callback","entryPath","posix","join","filename","entryMetadataPath","stringifiedMetadata","JSON","stringify","entry","name","size","length","stats","pipe","error","type","message","report","details","createdAt","Date","origin","kind","filePath","source","Readable","from"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/file/providers/destination/index.ts"],"sourcesContent":["import path from 'path';\nimport zlib from 'zlib';\nimport { Readable, Writable } from 'stream';\nimport { rm, createWriteStream } from 'fs-extra';\nimport tar from 'tar-stream';\nimport { stringer } from 'stream-json/jsonl/Stringer';\nimport { chain } from 'stream-chain';\n\nimport { createEncryptionCipher } from '../../../utils/encryption';\nimport type {\n IAsset,\n IDestinationProvider,\n IDestinationProviderTransferResults,\n IMetadata,\n ProviderType,\n Stream,\n} from '../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { createFilePathFactory, createTarEntryStream } from './utils';\nimport { ProviderTransferError } from '../../../errors/providers';\n\nexport interface ILocalFileDestinationProviderOptions {\n encryption: {\n enabled: boolean; // if the file should be encrypted\n key?: string; // the key to use when encryption.enabled is true\n };\n\n compression: {\n enabled: boolean; // if the file should be compressed with gzip\n };\n\n file: {\n path: string; // the filename to create\n maxSize?: number; // the max size of a single backup file\n maxSizeJsonl?: number; // the max lines of each jsonl file before creating the next file\n };\n}\n\nexport interface ILocalFileDestinationProviderTransferResults\n extends IDestinationProviderTransferResults {\n file?: {\n path?: string;\n };\n}\n\nexport const createLocalFileDestinationProvider = (\n options: ILocalFileDestinationProviderOptions\n) => {\n return new LocalFileDestinationProvider(options);\n};\n\nclass LocalFileDestinationProvider implements IDestinationProvider {\n name = 'destination::local-file';\n\n type: ProviderType = 'destination';\n\n options: ILocalFileDestinationProviderOptions;\n\n results: ILocalFileDestinationProviderTransferResults = {};\n\n #providersMetadata: { source?: IMetadata; destination?: IMetadata } = {};\n\n #archive: { stream?: tar.Pack; pipeline?: Stream } = {};\n\n #diagnostics?: IDiagnosticReporter;\n\n constructor(options: ILocalFileDestinationProviderOptions) {\n this.options = options;\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'file-destination-provider',\n },\n kind: 'info',\n });\n }\n\n get #archivePath() {\n const { encryption, compression, file } = this.options;\n\n let filePath = `${file.path}.tar`;\n\n if (compression.enabled) {\n filePath += '.gz';\n }\n\n if (encryption.enabled) {\n filePath += '.enc';\n }\n\n return filePath;\n }\n\n setMetadata(target: ProviderType, metadata: IMetadata): IDestinationProvider {\n this.#providersMetadata[target] = metadata;\n\n return this;\n }\n\n createGzip(): zlib.Gzip {\n this.#reportInfo('creating gzip');\n return zlib.createGzip();\n }\n\n bootstrap(diagnostics: IDiagnosticReporter): void | Promise<void> {\n this.#diagnostics = diagnostics;\n const { compression, encryption } = this.options;\n\n if (encryption.enabled && !encryption.key) {\n throw new Error(\"Can't encrypt without a key\");\n }\n\n this.#archive.stream = tar.pack();\n\n const outStream = createWriteStream(this.#archivePath);\n\n outStream.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'ENOSPC') {\n throw new ProviderTransferError(\n \"Your server doesn't have space to proceed with the import.\"\n );\n }\n throw err;\n });\n\n const archiveTransforms: Stream[] = [];\n\n if (compression.enabled) {\n archiveTransforms.push(this.createGzip());\n }\n\n if (encryption.enabled && encryption.key) {\n archiveTransforms.push(createEncryptionCipher(encryption.key));\n }\n\n this.#archive.pipeline = chain([this.#archive.stream, ...archiveTransforms, outStream]);\n\n this.results.file = { path: this.#archivePath };\n }\n\n async close() {\n const { stream, pipeline } = this.#archive;\n\n if (!stream) {\n return;\n }\n\n await this.#writeMetadata();\n stream.finalize();\n\n if (pipeline && !pipeline.closed) {\n await new Promise<void>((resolve, reject) => {\n pipeline.on('close', resolve).on('error', reject);\n });\n }\n }\n\n async rollback(): Promise<void> {\n this.#reportInfo('rolling back');\n await this.close();\n await rm(this.#archivePath, { force: true });\n }\n\n getMetadata() {\n return null;\n }\n\n async #writeMetadata(): Promise<void> {\n this.#reportInfo('writing metadata');\n const metadata = this.#providersMetadata.source;\n\n if (metadata) {\n await new Promise((resolve) => {\n const outStream = this.#getMetadataStream();\n const data = JSON.stringify(metadata, null, 2);\n\n Readable.from(data).pipe(outStream).on('close', resolve);\n });\n }\n }\n\n #getMetadataStream() {\n const { stream } = this.#archive;\n\n if (!stream) {\n throw new Error('Archive stream is unavailable');\n }\n\n return createTarEntryStream(stream, () => 'metadata.json');\n }\n\n createSchemasWriteStream() {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating schemas write stream');\n const filePathFactory = createFilePathFactory('schemas');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createEntitiesWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating entities write stream');\n const filePathFactory = createFilePathFactory('entities');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createLinksWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating links write stream');\n const filePathFactory = createFilePathFactory('links');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createConfigurationWriteStream(): Writable {\n if (!this.#archive.stream) {\n throw new Error('Archive stream is unavailable');\n }\n this.#reportInfo('creating configuration write stream');\n const filePathFactory = createFilePathFactory('configuration');\n\n const entryStream = createTarEntryStream(\n this.#archive.stream,\n filePathFactory,\n this.options.file.maxSizeJsonl\n );\n\n return chain([stringer(), entryStream]);\n }\n\n createAssetsWriteStream(): Writable {\n const { stream: archiveStream } = this.#archive;\n\n if (!archiveStream) {\n throw new Error('Archive stream is unavailable');\n }\n\n this.#reportInfo('creating assets write stream');\n return new Writable({\n objectMode: true,\n write(data: IAsset, _encoding, callback) {\n // always write tar files with posix paths so we have a standard format for paths regardless of system\n const entryPath = path.posix.join('assets', 'uploads', data.filename);\n\n const entryMetadataPath = path.posix.join('assets', 'metadata', `${data.filename}.json`);\n const stringifiedMetadata = JSON.stringify(data.metadata);\n archiveStream.entry(\n {\n name: entryMetadataPath,\n size: stringifiedMetadata.length,\n },\n stringifiedMetadata\n );\n\n const entry = archiveStream.entry({\n name: entryPath,\n size: data.stats.size,\n });\n\n if (!entry) {\n callback(new Error(`Failed to created an asset tar entry for ${entryPath}`));\n return;\n }\n\n data.stream.pipe(entry);\n\n entry\n .on('finish', () => {\n callback(null);\n })\n .on('error', (error) => {\n callback(error);\n });\n },\n });\n }\n}\n"],"names":["createLocalFileDestinationProvider","options","LocalFileDestinationProvider","setMetadata","target","metadata","createGzip","zlib","bootstrap","diagnostics","compression","encryption","enabled","key","Error","stream","tar","pack","outStream","createWriteStream","on","err","code","ProviderTransferError","archiveTransforms","push","createEncryptionCipher","pipeline","chain","results","file","path","close","finalize","closed","Promise","resolve","reject","rollback","rm","force","getMetadata","createSchemasWriteStream","filePathFactory","createFilePathFactory","entryStream","createTarEntryStream","maxSizeJsonl","stringer","createEntitiesWriteStream","createLinksWriteStream","createConfigurationWriteStream","createAssetsWriteStream","archiveStream","Writable","objectMode","write","data","_encoding","callback","entryPath","posix","join","filename","entryMetadataPath","stringifiedMetadata","JSON","stringify","entry","name","size","length","stats","pipe","error","type","message","report","details","createdAt","Date","origin","kind","filePath","source","Readable","from"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CO,MAAMA,qCAAqC,CAChDC,OAAAA,GAAAA;AAEA,IAAA,OAAO,IAAIC,4BAAAA,CAA6BD,OAAAA,CAAAA;AAC1C;AAWE,IAAA,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA,EAEA,QAAA,iBAAA,8BAAA,CAAA,UAAA,CAAA,EAEA,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EAMA,WAAA,iBAAA,8BAAA,CAAA,aAAA,CAAA,EAWI,YAAA,iBAAA,8BAAA,CAAA,cAAA,CAAA,EA0FE,cAAA,iBAAA,8BAAA,CAAA,gBAAA,CAAA,EAcN,kBAAA,iBAAA,8BAAA,CAAA,oBAAA,CAAA;AAtIF,MAAMC,4BAAAA,CAAAA;IA8CJC,WAAAA,CAAYC,MAAoB,EAAEC,QAAmB,EAAwB;AAC3E,QAAA,+BAAA,CAAA,IAAI,EAAC,kBAAA,CAAA,CAAA,kBAAA,CAAkB,CAACD,OAAO,GAAGC,QAAAA;AAElC,QAAA,OAAO,IAAI;AACb,IAAA;IAEAC,UAAAA,GAAwB;QACtB,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,eAAA,CAAA;AACjB,QAAA,OAAOC,qBAAKD,UAAU,EAAA;AACxB,IAAA;AAEAE,IAAAA,SAAAA,CAAUC,WAAgC,EAAwB;QAChE,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,GAAeA,WAAAA;QACpB,MAAM,EAAEC,WAAW,EAAEC,UAAU,EAAE,GAAG,IAAI,CAACV,OAAO;AAEhD,QAAA,IAAIU,WAAWC,OAAO,IAAI,CAACD,UAAAA,CAAWE,GAAG,EAAE;AACzC,YAAA,MAAM,IAAIC,KAAAA,CAAM,6BAAA,CAAA;AAClB,QAAA;AAEA,QAAA,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,UAASC,MAAM,GAAGC,qBAAIC,IAAI,EAAA;AAE/B,QAAA,MAAMC,SAAAA,GAAYC,oBAAAA,CAAkB,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,CAAA;QAEzCD,SAAAA,CAAUE,EAAE,CAAC,OAAA,EAAS,CAACC,GAAAA,GAAAA;YACrB,IAAIA,GAAAA,CAAIC,IAAI,KAAK,QAAA,EAAU;AACzB,gBAAA,MAAM,IAAIC,+BAAAA,CACR,4DAAA,CAAA;AAEJ,YAAA;YACA,MAAMF,GAAAA;AACR,QAAA,CAAA,CAAA;AAEA,QAAA,MAAMG,oBAA8B,EAAE;QAEtC,IAAId,WAAAA,CAAYE,OAAO,EAAE;AACvBY,YAAAA,iBAAAA,CAAkBC,IAAI,CAAC,IAAI,CAACnB,UAAU,EAAA,CAAA;AACxC,QAAA;AAEA,QAAA,IAAIK,UAAAA,CAAWC,OAAO,IAAID,UAAAA,CAAWE,GAAG,EAAE;AACxCW,YAAAA,iBAAAA,CAAkBC,IAAI,CAACC,8BAAAA,CAAuBf,UAAAA,CAAWE,GAAG,CAAA,CAAA;AAC9D,QAAA;AAEA,QAAA,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAASc,QAAQ,GAAGC,iBAAAA,CAAM;AAAC,YAAA,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAASb,MAAM;AAAKS,YAAAA,GAAAA,iBAAAA;AAAmBN,YAAAA;AAAU,SAAA,CAAA;AAEtF,QAAA,IAAI,CAACW,OAAO,CAACC,IAAI,GAAG;AAAEC,YAAAA,IAAI,EAAE,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA;AAAa,SAAA;AAChD,IAAA;AAEA,IAAA,MAAMC,KAAAA,GAAQ;QACZ,MAAM,EAAEjB,MAAM,EAAEY,QAAQ,EAAE,GAAG,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA;AAElC,QAAA,IAAI,CAACZ,MAAAA,EAAQ;AACX,YAAA;AACF,QAAA;QAEA,MAAM,+BAAA,CAAA,IAAI,EAAC,cAAA,CAAA,CAAA,cAAA,CAAA,EAAA;AACXA,QAAAA,MAAAA,CAAOkB,QAAQ,EAAA;AAEf,QAAA,IAAIN,QAAAA,IAAY,CAACA,QAAAA,CAASO,MAAM,EAAE;YAChC,MAAM,IAAIC,OAAAA,CAAc,CAACC,OAAAA,EAASC,MAAAA,GAAAA;AAChCV,gBAAAA,QAAAA,CAASP,EAAE,CAAC,OAAA,EAASgB,OAAAA,CAAAA,CAAShB,EAAE,CAAC,OAAA,EAASiB,MAAAA,CAAAA;AAC5C,YAAA,CAAA,CAAA;AACF,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,QAAAA,GAA0B;QAC9B,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,cAAA,CAAA;QACjB,MAAM,IAAI,CAACN,KAAK,EAAA;AAChB,QAAA,MAAMO,KAAAA,CAAG,+BAAA,CAAA,IAAI,EAAC,cAAA,YAAA,CAAA,EAAc;YAAEC,KAAAA,EAAO;AAAK,SAAA,CAAA;AAC5C,IAAA;IAEAC,WAAAA,GAAc;QACZ,OAAO,IAAA;AACT,IAAA;IA0BAC,wBAAAA,GAA2B;AACzB,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAAS3B,MAAM,EAAE;AACzB,YAAA,MAAM,IAAID,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QACA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,+BAAA,CAAA;AACjB,QAAA,MAAM6B,kBAAkBC,2BAAAA,CAAsB,SAAA,CAAA;AAE9C,QAAA,MAAMC,cAAcC,0BAAAA,CAClB,+BAAA,CAAA,IAAI,EAAC,UAAA,QAAA,CAAA,CAAS/B,MAAM,EACpB4B,eAAAA,EACA,IAAI,CAAC1C,OAAO,CAAC6B,IAAI,CAACiB,YAAY,CAAA;AAGhC,QAAA,OAAOnB,iBAAAA,CAAM;AAACoB,YAAAA,iBAAAA,EAAAA;AAAYH,YAAAA;AAAY,SAAA,CAAA;AACxC,IAAA;IAEAI,yBAAAA,GAAsC;AACpC,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAASlC,MAAM,EAAE;AACzB,YAAA,MAAM,IAAID,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QACA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,gCAAA,CAAA;AACjB,QAAA,MAAM6B,kBAAkBC,2BAAAA,CAAsB,UAAA,CAAA;AAE9C,QAAA,MAAMC,cAAcC,0BAAAA,CAClB,+BAAA,CAAA,IAAI,EAAC,UAAA,QAAA,CAAA,CAAS/B,MAAM,EACpB4B,eAAAA,EACA,IAAI,CAAC1C,OAAO,CAAC6B,IAAI,CAACiB,YAAY,CAAA;AAGhC,QAAA,OAAOnB,iBAAAA,CAAM;AAACoB,YAAAA,iBAAAA,EAAAA;AAAYH,YAAAA;AAAY,SAAA,CAAA;AACxC,IAAA;IAEAK,sBAAAA,GAAmC;AACjC,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAASnC,MAAM,EAAE;AACzB,YAAA,MAAM,IAAID,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QACA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,6BAAA,CAAA;AACjB,QAAA,MAAM6B,kBAAkBC,2BAAAA,CAAsB,OAAA,CAAA;AAE9C,QAAA,MAAMC,cAAcC,0BAAAA,CAClB,+BAAA,CAAA,IAAI,EAAC,UAAA,QAAA,CAAA,CAAS/B,MAAM,EACpB4B,eAAAA,EACA,IAAI,CAAC1C,OAAO,CAAC6B,IAAI,CAACiB,YAAY,CAAA;AAGhC,QAAA,OAAOnB,iBAAAA,CAAM;AAACoB,YAAAA,iBAAAA,EAAAA;AAAYH,YAAAA;AAAY,SAAA,CAAA;AACxC,IAAA;IAEAM,8BAAAA,GAA2C;AACzC,QAAA,IAAI,CAAC,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA,CAASpC,MAAM,EAAE;AACzB,YAAA,MAAM,IAAID,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QACA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,qCAAA,CAAA;AACjB,QAAA,MAAM6B,kBAAkBC,2BAAAA,CAAsB,eAAA,CAAA;AAE9C,QAAA,MAAMC,cAAcC,0BAAAA,CAClB,+BAAA,CAAA,IAAI,EAAC,UAAA,QAAA,CAAA,CAAS/B,MAAM,EACpB4B,eAAAA,EACA,IAAI,CAAC1C,OAAO,CAAC6B,IAAI,CAACiB,YAAY,CAAA;AAGhC,QAAA,OAAOnB,iBAAAA,CAAM;AAACoB,YAAAA,iBAAAA,EAAAA;AAAYH,YAAAA;AAAY,SAAA,CAAA;AACxC,IAAA;IAEAO,uBAAAA,GAAoC;QAClC,MAAM,EAAErC,QAAQsC,aAAa,EAAE,GAAG,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA;AAEvC,QAAA,IAAI,CAACA,aAAAA,EAAe;AAClB,YAAA,MAAM,IAAIvC,KAAAA,CAAM,+BAAA,CAAA;AAClB,QAAA;QAEA,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,8BAAA,CAAA;AACjB,QAAA,OAAO,IAAIwC,eAAAA,CAAS;YAClBC,UAAAA,EAAY,IAAA;AACZC,YAAAA,KAAAA,CAAAA,CAAMC,IAAY,EAAEC,SAAS,EAAEC,QAAQ,EAAA;;gBAErC,MAAMC,SAAAA,GAAY7B,sBAAK8B,KAAK,CAACC,IAAI,CAAC,QAAA,EAAU,SAAA,EAAWL,IAAAA,CAAKM,QAAQ,CAAA;AAEpE,gBAAA,MAAMC,iBAAAA,GAAoBjC,qBAAAA,CAAK8B,KAAK,CAACC,IAAI,CAAC,QAAA,EAAU,UAAA,EAAY,CAAA,EAAGL,IAAAA,CAAKM,QAAQ,CAAC,KAAK,CAAC,CAAA;AACvF,gBAAA,MAAME,mBAAAA,GAAsBC,IAAAA,CAAKC,SAAS,CAACV,KAAKpD,QAAQ,CAAA;AACxDgD,gBAAAA,aAAAA,CAAce,KAAK,CACjB;oBACEC,IAAAA,EAAML,iBAAAA;AACNM,oBAAAA,IAAAA,EAAML,oBAAoBM;iBAC5B,EACAN,mBAAAA,CAAAA;gBAGF,MAAMG,KAAAA,GAAQf,aAAAA,CAAce,KAAK,CAAC;oBAChCC,IAAAA,EAAMT,SAAAA;oBACNU,IAAAA,EAAMb,IAAAA,CAAKe,KAAK,CAACF;AACnB,iBAAA,CAAA;AAEA,gBAAA,IAAI,CAACF,KAAAA,EAAO;AACVT,oBAAAA,QAAAA,CAAS,IAAI7C,KAAAA,CAAM,CAAC,yCAAyC,EAAE8C,SAAAA,CAAAA,CAAW,CAAA,CAAA;AAC1E,oBAAA;AACF,gBAAA;gBAEAH,IAAAA,CAAK1C,MAAM,CAAC0D,IAAI,CAACL,KAAAA,CAAAA;gBAEjBA,KAAAA,CACGhD,EAAE,CAAC,QAAA,EAAU,IAAA;oBACZuC,QAAAA,CAAS,IAAA,CAAA;gBACX,CAAA,CAAA,CACCvC,EAAE,CAAC,OAAA,EAAS,CAACsD,KAAAA,GAAAA;oBACZf,QAAAA,CAASe,KAAAA,CAAAA;AACX,gBAAA,CAAA,CAAA;AACJ,YAAA;AACF,SAAA,CAAA;AACF,IAAA;AA9OA,IAAA,WAAA,CAAYzE,OAA6C,CAAE;QAI3D,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QAWA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAI,YAAA,EAAA;AAAJ,YAAA,GAAA,EAAA,eAAA;;;QA0FA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAM,cAAA,EAAA;AAAN,YAAA,KAAA,EAAA;;QAcA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,EAAA;AAAA,YAAA,KAAA,EAAA;;QA7HA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,QAAA,EAAA;;mBAAA;;QAEA,MAAA,CAAA,cAAA,CAAA,IAAA,EAAA,YAAA,EAAA;;mBAAA;;aAZAoE,IAAAA,GAAO,yBAAA;aAEPM,IAAAA,GAAqB,aAAA;AAIrB9C,QAAAA,IAAAA,CAAAA,OAAAA,GAAwD,EAAC;AAEzD,QAAA,+BAAA,CAAA,IAAA,EAAA,kBAAA,CAAA,CAAA,sBAAsE,EAAC;AAEvE,QAAA,+BAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA,YAAqD,EAAC;QAKpD,IAAI,CAAC5B,OAAO,GAAGA,OAAAA;AACjB,IAAA;AA6OF;AA3OE,SAAA,WAAY2E,OAAe,EAAA;AACzB,IAAA,+BAAA,CAAA,IAAI,EAAC,YAAA,CAAA,CAAA,YAAA,CAAA,EAAcC,MAAAA,CAAO;QACxBC,OAAAA,EAAS;AACPC,YAAAA,SAAAA,EAAW,IAAIC,IAAAA,EAAAA;AACfJ,YAAAA,OAAAA;YACAK,MAAAA,EAAQ;AACV,SAAA;QACAC,IAAAA,EAAM;AACR,KAAA,CAAA;AACF;AAEA,SAAA,eAAA,GAAA;IACE,MAAM,EAAEvE,UAAU,EAAED,WAAW,EAAEoB,IAAI,EAAE,GAAG,IAAI,CAAC7B,OAAO;AAEtD,IAAA,IAAIkF,WAAW,CAAA,EAAGrD,IAAAA,CAAKC,IAAI,CAAC,IAAI,CAAC;IAEjC,IAAIrB,WAAAA,CAAYE,OAAO,EAAE;QACvBuE,QAAAA,IAAY,KAAA;AACd,IAAA;IAEA,IAAIxE,UAAAA,CAAWC,OAAO,EAAE;QACtBuE,QAAAA,IAAY,MAAA;AACd,IAAA;IAEA,OAAOA,QAAAA;AACT;AA4EA,eAAA,aAAA,GAAA;IACE,+BAAA,CAAA,IAAI,EAAC,WAAA,CAAA,CAAA,WAAA,CAAA,CAAY,kBAAA,CAAA;AACjB,IAAA,MAAM9E,WAAW,+BAAA,CAAA,IAAI,EAAC,kBAAA,CAAA,CAAA,oBAAmB+E,MAAM;AAE/C,IAAA,IAAI/E,QAAAA,EAAU;QACZ,MAAM,IAAI8B,QAAQ,CAACC,OAAAA,GAAAA;AACjB,YAAA,MAAMlB,SAAAA,GAAY,+BAAA,CAAA,IAAI,EAAC,kBAAA,CAAA,CAAA,kBAAA,CAAA,EAAA;AACvB,YAAA,MAAMuC,IAAAA,GAAOS,IAAAA,CAAKC,SAAS,CAAC9D,UAAU,IAAA,EAAM,CAAA,CAAA;YAE5CgF,eAAAA,CAASC,IAAI,CAAC7B,IAAAA,CAAAA,CAAMgB,IAAI,CAACvD,SAAAA,CAAAA,CAAWE,EAAE,CAAC,OAAA,EAASgB,OAAAA,CAAAA;AAClD,QAAA,CAAA,CAAA;AACF,IAAA;AACF;AAEA,SAAA,iBAAA,GAAA;AACE,IAAA,MAAM,EAAErB,MAAM,EAAE,GAAG,+BAAA,CAAA,IAAI,EAAC,QAAA,CAAA,CAAA,QAAA,CAAA;AAExB,IAAA,IAAI,CAACA,MAAAA,EAAQ;AACX,QAAA,MAAM,IAAID,KAAAA,CAAM,+BAAA,CAAA;AAClB,IAAA;IAEA,OAAOgC,0BAAAA,CAAqB/B,QAAQ,IAAM,eAAA,CAAA;AAC5C;;;;"}
|
|
@@ -17,6 +17,12 @@ require('events');
|
|
|
17
17
|
var providers = require('../../../errors/providers.js');
|
|
18
18
|
var utils = require('./utils.js');
|
|
19
19
|
|
|
20
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
21
|
+
|
|
22
|
+
var zip__default = /*#__PURE__*/_interopDefault(zip);
|
|
23
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
24
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
25
|
+
|
|
20
26
|
function _class_private_field_loose_base(receiver, privateKey) {
|
|
21
27
|
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
22
28
|
throw new TypeError("attempted to use private field on non-instance");
|
|
@@ -123,7 +129,7 @@ class LocalFileSourceProvider {
|
|
|
123
129
|
await runReadEntry(async ()=>{
|
|
124
130
|
const { path: filePath, size = 0 } = entry;
|
|
125
131
|
const normalizedPath = utils.unknownPathToPosix(filePath);
|
|
126
|
-
const file =
|
|
132
|
+
const file = path__default.default.basename(normalizedPath);
|
|
127
133
|
let metadata;
|
|
128
134
|
try {
|
|
129
135
|
metadata = await loadAssetMetadata(`assets/metadata/${file}.json`);
|
|
@@ -222,7 +228,7 @@ function getBackupStream() {
|
|
|
222
228
|
const { file, encryption, compression } = this.options;
|
|
223
229
|
const streams = [];
|
|
224
230
|
try {
|
|
225
|
-
streams.push(
|
|
231
|
+
streams.push(fs__default.default.createReadStream(file.path));
|
|
226
232
|
} catch (e) {
|
|
227
233
|
throw new Error(`Could not read backup file path provided at "${this.options.file.path}"`);
|
|
228
234
|
}
|
|
@@ -230,7 +236,7 @@ function getBackupStream() {
|
|
|
230
236
|
streams.push(decrypt.createDecryptionCipher(encryption.key));
|
|
231
237
|
}
|
|
232
238
|
if (compression.enabled) {
|
|
233
|
-
streams.push(
|
|
239
|
+
streams.push(zip__default.default.createGunzip());
|
|
234
240
|
}
|
|
235
241
|
return streamChain.chain(streams);
|
|
236
242
|
}
|