@webiny/api-file-manager 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2
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/FileManagerAppFeature.d.ts +5 -0
- package/FileManagerAppFeature.js +21 -0
- package/FileManagerAppFeature.js.map +1 -0
- package/{constants.js → contants.js} +1 -1
- package/contants.js.map +1 -0
- package/delivery/AssetDelivery/Asset.d.ts +1 -2
- package/delivery/AssetDelivery/Asset.js +1 -4
- package/delivery/AssetDelivery/Asset.js.map +1 -1
- package/delivery/AssetDelivery/AssetRequest.d.ts +2 -3
- package/delivery/AssetDelivery/AssetRequest.js +0 -3
- package/delivery/AssetDelivery/AssetRequest.js.map +1 -1
- package/delivery/AssetDelivery/abstractions/AssetReply.d.ts +1 -2
- package/delivery/AssetDelivery/abstractions/AssetReply.js +0 -5
- package/delivery/AssetDelivery/abstractions/AssetReply.js.map +1 -1
- package/delivery/AssetDeliveryRoute.d.ts +24 -0
- package/delivery/AssetDeliveryRoute.js +69 -0
- package/delivery/AssetDeliveryRoute.js.map +1 -0
- package/delivery/index.d.ts +3 -3
- package/delivery/index.js +2 -0
- package/delivery/setupAssetDelivery.d.ts +1 -1
- package/delivery/setupAssetDelivery.js +1 -69
- package/delivery/setupAssetDelivery.js.map +1 -1
- package/domain/file/abstractions.d.ts +13 -5
- package/domain/file/abstractions.js +2 -2
- package/domain/file/abstractions.js.map +1 -1
- package/domain/file/file.model.d.ts +3 -3
- package/domain/file/file.model.js +7 -6
- package/domain/file/file.model.js.map +1 -1
- package/domain/settings/validation.js +3 -10
- package/domain/settings/validation.js.map +1 -1
- package/exports/api/file-manager/assetDelivery.d.ts +1 -9
- package/exports/api/file-manager/assetDelivery.js +1 -8
- package/exports/api/file-manager/file.d.ts +1 -1
- package/exports/api/file-manager/file.js +1 -1
- package/features/FileManagerFeature.js +0 -6
- package/features/FileManagerFeature.js.map +1 -1
- package/features/assetDelivery/Asset/Asset.js +1 -1
- package/features/assetDelivery/Asset/Asset.js.map +1 -1
- package/features/assetDelivery/FilesAssetRequestResolver.d.ts +7 -9
- package/features/assetDelivery/FilesAssetRequestResolver.js +16 -20
- package/features/assetDelivery/FilesAssetRequestResolver.js.map +1 -1
- package/features/assetDelivery/NullAssetOutputStrategy.d.ts +6 -6
- package/features/assetDelivery/NullAssetOutputStrategy.js +6 -6
- package/features/assetDelivery/NullAssetOutputStrategy.js.map +1 -1
- package/features/assetDelivery/NullAssetReply.d.ts +1 -2
- package/features/assetDelivery/NullAssetReply.js +0 -3
- package/features/assetDelivery/NullAssetReply.js.map +1 -1
- package/features/assetDelivery/NullAssetResolver.d.ts +6 -6
- package/features/assetDelivery/NullAssetResolver.js +5 -5
- package/features/assetDelivery/NullAssetResolver.js.map +1 -1
- package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js +1 -1
- package/features/assetDelivery/StreamAssetReply/StreamAssetReply.js.map +1 -1
- package/features/assetDelivery/abstractions.d.ts +65 -0
- package/features/assetDelivery/abstractions.js +11 -0
- package/features/assetDelivery/abstractions.js.map +1 -0
- package/features/assetDelivery/assetTypes/image/SharpTransformer.d.ts +18 -0
- package/features/assetDelivery/assetTypes/image/SharpTransformer.js +47 -0
- package/features/assetDelivery/assetTypes/image/SharpTransformer.js.map +1 -0
- package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js +1 -1
- package/features/assetDelivery/assetTypes/image/normalizeImageOptions.js.map +1 -1
- package/features/assetDelivery/feature.js +17 -20
- package/features/assetDelivery/feature.js.map +1 -1
- package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.d.ts +2 -2
- package/features/assetDelivery/privateFiles/NotAuthorizedOutputStrategy.js.map +1 -1
- package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.d.ts +3 -3
- package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js +1 -1
- package/features/assetDelivery/privateFiles/PrivateAuthenticatedAuthorizer.js.map +1 -1
- package/features/assetDelivery/privateFiles/PrivateCache.d.ts +3 -3
- package/features/assetDelivery/privateFiles/PrivateCache.js.map +1 -1
- package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.d.ts +8 -9
- package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js +14 -17
- package/features/assetDelivery/privateFiles/PrivateFileAssetRequestResolver.js.map +1 -1
- package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.d.ts +8 -8
- package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js +7 -8
- package/features/assetDelivery/privateFiles/PrivateFilesAssetProcessor.js.map +1 -1
- package/features/assetDelivery/privateFiles/PublicCache.d.ts +3 -3
- package/features/assetDelivery/privateFiles/PublicCache.js.map +1 -1
- package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.d.ts +4 -5
- package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js +1 -4
- package/features/assetDelivery/privateFiles/RedirectToPrivateUrlOutputStrategy.js.map +1 -1
- package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.d.ts +4 -5
- package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js +1 -4
- package/features/assetDelivery/privateFiles/RedirectToPublicUrlOutputStrategy.js.map +1 -1
- package/features/assetDelivery/transformation/CallableContentsReader.d.ts +1 -1
- package/features/assetDelivery/transformation/CallableContentsReader.js.map +1 -1
- package/features/assetDelivery/transformation/TransformationAssetProcessor.d.ts +5 -3
- package/features/assetDelivery/transformation/TransformationAssetProcessor.js.map +1 -1
- package/features/file/CreateFile/CreateFileRepository.d.ts +3 -3
- package/features/file/CreateFile/CreateFileRepository.js +6 -5
- package/features/file/CreateFile/CreateFileRepository.js.map +1 -1
- package/features/file/DeleteFile/DeleteFileRepository.d.ts +3 -3
- package/features/file/DeleteFile/DeleteFileRepository.js +6 -5
- package/features/file/DeleteFile/DeleteFileRepository.js.map +1 -1
- package/features/file/FileModelProvider.d.ts +31 -0
- package/features/file/FileModelProvider.js +22 -0
- package/features/file/FileModelProvider.js.map +1 -0
- package/features/file/FileUrlGenerator/FileUrlGenerator.d.ts +3 -6
- package/features/file/FileUrlGenerator/FileUrlGenerator.js +5 -19
- package/features/file/FileUrlGenerator/FileUrlGenerator.js.map +1 -1
- package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.d.ts +13 -0
- package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.js +29 -0
- package/features/file/FileUrlGenerator/SettingsFileUrlPrefixProvider.js.map +1 -0
- package/features/file/FileUrlGenerator/abstractions.d.ts +12 -0
- package/features/file/FileUrlGenerator/abstractions.js +2 -1
- package/features/file/FileUrlGenerator/abstractions.js.map +1 -1
- package/features/file/FileUrlGenerator/feature.js +2 -0
- package/features/file/FileUrlGenerator/feature.js.map +1 -1
- package/features/file/FileUrlGenerator/index.d.ts +1 -0
- package/features/file/FileUrlGenerator/index.js +1 -1
- package/features/file/GetFile/GetFileRepository.d.ts +3 -3
- package/features/file/GetFile/GetFileRepository.js +6 -5
- package/features/file/GetFile/GetFileRepository.js.map +1 -1
- package/features/file/ListFiles/ListFilesRepository.d.ts +3 -3
- package/features/file/ListFiles/ListFilesRepository.js +8 -7
- package/features/file/ListFiles/ListFilesRepository.js.map +1 -1
- package/features/file/ListImagesByTagTool/ListImagesByTagTool.d.ts +15 -5
- package/features/file/ListImagesByTagTool/ListImagesByTagTool.js +21 -7
- package/features/file/ListImagesByTagTool/ListImagesByTagTool.js.map +1 -1
- package/features/file/ListTags/ListTagsRepository.d.ts +3 -3
- package/features/file/ListTags/ListTagsRepository.js +7 -6
- package/features/file/ListTags/ListTagsRepository.js.map +1 -1
- package/features/file/UpdateFile/UpdateFileRepository.d.ts +3 -3
- package/features/file/UpdateFile/UpdateFileRepository.js +6 -5
- package/features/file/UpdateFile/UpdateFileRepository.js.map +1 -1
- package/features/settings/SettingsInstaller/SettingsInstaller.js +1 -4
- package/features/settings/SettingsInstaller/SettingsInstaller.js.map +1 -1
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.d.ts +3 -1
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.js +10 -3
- package/features/settings/UpdateSettings/UpdateSettingsUseCase.js.map +1 -1
- package/graphql/FmGraphQLSchema.d.ts +8 -9
- package/graphql/FmGraphQLSchema.js +27 -19
- package/graphql/FmGraphQLSchema.js.map +1 -1
- package/index.d.ts +4 -4
- package/index.js +4 -33
- package/index.js.map +1 -1
- package/package.json +18 -18
- package/constants.js.map +0 -1
- package/features/assetDelivery/AssetRequest/AssetRequest.d.ts +0 -8
- package/features/assetDelivery/AssetRequest/AssetRequest.js +0 -14
- package/features/assetDelivery/AssetRequest/AssetRequest.js.map +0 -1
- package/features/assetDelivery/AssetRequest/abstractions.d.ts +0 -11
- package/features/assetDelivery/AssetRequest/abstractions.js +0 -5
- package/features/assetDelivery/AssetRequest/abstractions.js.map +0 -1
- package/features/assetDelivery/AssetRequest/index.d.ts +0 -1
- package/features/assetDelivery/AssetRequest/index.js +0 -1
- package/features/assetDelivery/abstractions/AssetAuthorizer.d.ts +0 -9
- package/features/assetDelivery/abstractions/AssetAuthorizer.js +0 -5
- package/features/assetDelivery/abstractions/AssetAuthorizer.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetContentsReader.d.ts +0 -9
- package/features/assetDelivery/abstractions/AssetContentsReader.js +0 -5
- package/features/assetDelivery/abstractions/AssetContentsReader.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetOutputStrategy.d.ts +0 -11
- package/features/assetDelivery/abstractions/AssetOutputStrategy.js +0 -5
- package/features/assetDelivery/abstractions/AssetOutputStrategy.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetProcessor.d.ts +0 -11
- package/features/assetDelivery/abstractions/AssetProcessor.js +0 -5
- package/features/assetDelivery/abstractions/AssetProcessor.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetRequestResolver.d.ts +0 -11
- package/features/assetDelivery/abstractions/AssetRequestResolver.js +0 -5
- package/features/assetDelivery/abstractions/AssetRequestResolver.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetResolver.d.ts +0 -11
- package/features/assetDelivery/abstractions/AssetResolver.js +0 -5
- package/features/assetDelivery/abstractions/AssetResolver.js.map +0 -1
- package/features/assetDelivery/abstractions/AssetTransformationStrategy.d.ts +0 -11
- package/features/assetDelivery/abstractions/AssetTransformationStrategy.js +0 -5
- package/features/assetDelivery/abstractions/AssetTransformationStrategy.js.map +0 -1
- package/graphql/FmUploadGraphQLSchema.d.ts +0 -11
- package/graphql/FmUploadGraphQLSchema.js +0 -231
- package/graphql/FmUploadGraphQLSchema.js.map +0 -1
- /package/{constants.d.ts → contants.d.ts} +0 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import { UpdateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry";
|
|
3
3
|
import { UpdateFileRepository } from "./abstractions.js";
|
|
4
|
-
import {
|
|
4
|
+
import { FileModelProvider } from "../../../domain/file/abstractions.js";
|
|
5
5
|
import { FileNotAuthorizedError, FileNotFoundError, FilePersistenceError } from "../../../domain/file/errors.js";
|
|
6
6
|
import { FileToEntryMapper } from "../shared/FileToEntryMapper.js";
|
|
7
7
|
class UpdateFileRepositoryImpl {
|
|
8
|
-
constructor(updateEntry,
|
|
8
|
+
constructor(updateEntry, fileModelProvider){
|
|
9
9
|
this.updateEntry = updateEntry;
|
|
10
|
-
this.
|
|
10
|
+
this.fileModelProvider = fileModelProvider;
|
|
11
11
|
}
|
|
12
12
|
async update(file) {
|
|
13
13
|
const entry = FileToEntryMapper.toEntry(file);
|
|
14
14
|
const id = `${file.id}#0001`;
|
|
15
|
-
const
|
|
15
|
+
const fileModel = await this.fileModelProvider.get();
|
|
16
|
+
const result = await this.updateEntry.execute(fileModel, id, {
|
|
16
17
|
wbyAco_location: file.location,
|
|
17
18
|
values: entry.values
|
|
18
19
|
});
|
|
@@ -29,7 +30,7 @@ const UpdateFileRepository_UpdateFileRepository = UpdateFileRepository.createImp
|
|
|
29
30
|
implementation: UpdateFileRepositoryImpl,
|
|
30
31
|
dependencies: [
|
|
31
32
|
UpdateEntryUseCase,
|
|
32
|
-
|
|
33
|
+
FileModelProvider
|
|
33
34
|
]
|
|
34
35
|
});
|
|
35
36
|
export { UpdateFileRepository_UpdateFileRepository as UpdateFileRepository };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/file/UpdateFile/UpdateFileRepository.js","sources":["../../../../src/features/file/UpdateFile/UpdateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry\";\nimport { UpdateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"features/file/UpdateFile/UpdateFileRepository.js","sources":["../../../../src/features/file/UpdateFile/UpdateFileRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry\";\nimport { UpdateFileRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { File } from \"~/domain/file/types.js\";\nimport {\n FileNotAuthorizedError,\n FileNotFoundError,\n FilePersistenceError\n} from \"~/domain/file/errors.js\";\nimport { FileToEntryMapper } from \"../shared/FileToEntryMapper.js\";\n\nclass UpdateFileRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private updateEntry: UpdateEntryUseCase.Interface,\n private fileModelProvider: FileModelProvider.Interface\n ) {}\n\n async update(file: File): Promise<Result<void, RepositoryAbstraction.Error>> {\n const entry = FileToEntryMapper.toEntry(file);\n\n // Files are not versioned, so we're always updating the same revision\n const id = `${file.id}#0001`;\n\n const fileModel = await this.fileModelProvider.get();\n const result = await this.updateEntry.execute(fileModel, id, {\n wbyAco_location: file.location,\n values: entry.values\n });\n\n if (result.isFail()) {\n const error = result.error;\n if (error.code === \"Cms/Entry/NotFound\") {\n return Result.fail(new FileNotFoundError(id));\n }\n\n if (error.code === \"Cms/Entry/NotAuthorized\") {\n return Result.fail(new FileNotAuthorizedError());\n }\n\n return Result.fail(new FilePersistenceError(result.error));\n }\n\n return Result.ok();\n }\n}\n\nexport const UpdateFileRepository = RepositoryAbstraction.createImplementation({\n implementation: UpdateFileRepositoryImpl,\n dependencies: [UpdateEntryUseCase, FileModelProvider]\n});\n"],"names":["UpdateFileRepositoryImpl","updateEntry","fileModelProvider","file","entry","FileToEntryMapper","id","fileModel","result","error","Result","FileNotFoundError","FileNotAuthorizedError","FilePersistenceError","UpdateFileRepository","RepositoryAbstraction","UpdateEntryUseCase","FileModelProvider"],"mappings":";;;;;;AAYA,MAAMA;IACF,YACYC,WAAyC,EACzCC,iBAA8C,CACxD;aAFUD,WAAW,GAAXA;aACAC,iBAAiB,GAAjBA;IACT;IAEH,MAAM,OAAOC,IAAU,EAAsD;QACzE,MAAMC,QAAQC,kBAAkB,OAAO,CAACF;QAGxC,MAAMG,KAAK,GAAGH,KAAK,EAAE,CAAC,KAAK,CAAC;QAE5B,MAAMI,YAAY,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG;QAClD,MAAMC,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD,WAAWD,IAAI;YACzD,iBAAiBH,KAAK,QAAQ;YAC9B,QAAQC,MAAM,MAAM;QACxB;QAEA,IAAII,OAAO,MAAM,IAAI;YACjB,MAAMC,QAAQD,OAAO,KAAK;YAC1B,IAAIC,AAAe,yBAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIC,kBAAkBL;YAG7C,IAAIG,AAAe,8BAAfA,MAAM,IAAI,EACV,OAAOC,OAAO,IAAI,CAAC,IAAIE;YAG3B,OAAOF,OAAO,IAAI,CAAC,IAAIG,qBAAqBL,OAAO,KAAK;QAC5D;QAEA,OAAOE,OAAO,EAAE;IACpB;AACJ;AAEO,MAAMI,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBf;IAChB,cAAc;QAACgB;QAAoBC;KAAkB;AACzD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ServiceDiscovery } from "@webiny/api-core/features/serviceDiscovery/index.js";
|
|
2
1
|
import { createImplementation } from "@webiny/feature/api";
|
|
3
2
|
import { AppInstaller } from "@webiny/api-core/features/tenancy/InstallTenant/index.js";
|
|
4
3
|
import { FILE_MANAGER_GENERAL_SETTINGS } from "../../../domain/settings/constants.js";
|
|
@@ -13,10 +12,8 @@ class SettingsInstallerImpl {
|
|
|
13
12
|
this.dependsOn = [];
|
|
14
13
|
}
|
|
15
14
|
async install() {
|
|
16
|
-
const manifest = await ServiceDiscovery.load();
|
|
17
|
-
const domain = manifest?.api?.cloudfront.domain;
|
|
18
15
|
await this.updateSettings.execute({
|
|
19
|
-
srcPrefix:
|
|
16
|
+
srcPrefix: ""
|
|
20
17
|
});
|
|
21
18
|
}
|
|
22
19
|
async uninstall() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/settings/SettingsInstaller/SettingsInstaller.js","sources":["../../../../src/features/settings/SettingsInstaller/SettingsInstaller.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"features/settings/SettingsInstaller/SettingsInstaller.js","sources":["../../../../src/features/settings/SettingsInstaller/SettingsInstaller.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/feature/api\";\nimport { AppInstaller } from \"@webiny/api-core/features/tenancy/InstallTenant/index.js\";\nimport { FILE_MANAGER_GENERAL_SETTINGS } from \"~/domain/settings/constants.js\";\nimport { UpdateSettingsUseCase } from \"~/features/settings/UpdateSettings/abstractions.js\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\n\nclass SettingsInstallerImpl implements AppInstaller.Interface {\n readonly alwaysRun = true;\n readonly appName = \"FileManager\";\n readonly dependsOn = [];\n\n constructor(\n private updateSettings: UpdateSettingsUseCase.Interface,\n private keyValueStore: KeyValueStore.Interface\n ) {}\n\n async install(): Promise<void> {\n // An empty srcPrefix makes UpdateSettingsUseCase fill in the default from the API's\n // public URL, so every install picks up the current one.\n await this.updateSettings.execute({ srcPrefix: \"\" });\n }\n\n async uninstall(): Promise<void> {\n await this.keyValueStore.delete(FILE_MANAGER_GENERAL_SETTINGS);\n }\n}\n\nexport const SettingsInstaller = createImplementation({\n abstraction: AppInstaller,\n implementation: SettingsInstallerImpl,\n dependencies: [UpdateSettingsUseCase, KeyValueStore]\n});\n"],"names":["SettingsInstallerImpl","updateSettings","keyValueStore","FILE_MANAGER_GENERAL_SETTINGS","SettingsInstaller","createImplementation","AppInstaller","UpdateSettingsUseCase","KeyValueStore"],"mappings":";;;;;AAMA,MAAMA;IAKF,YACYC,cAA+C,EAC/CC,aAAsC,CAChD;aAFUD,cAAc,GAAdA;aACAC,aAAa,GAAbA;aANH,SAAS,GAAG;aACZ,OAAO,GAAG;aACV,SAAS,GAAG,EAAE;IAKpB;IAEH,MAAM,UAAyB;QAG3B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,WAAW;QAAG;IACtD;IAEA,MAAM,YAA2B;QAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAACC;IACpC;AACJ;AAEO,MAAMC,oBAAoBC,qBAAqB;IAClD,aAAaC;IACb,gBAAgBN;IAChB,cAAc;QAACO;QAAuBC;KAAc;AACxD"}
|
|
@@ -5,11 +5,13 @@ import { GetSettingsUseCase } from "../GetSettings/abstractions.js";
|
|
|
5
5
|
import type { FileManagerSettings } from "../../../domain/settings/types.js";
|
|
6
6
|
import type { UpdateSettingsInput } from "../../../domain/settings/types.js";
|
|
7
7
|
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
8
|
+
import { PublicUrls } from "@webiny/api-core/features/publicUrls/index.js";
|
|
8
9
|
declare class UpdateSettingsUseCaseImpl implements UseCaseAbstraction.Interface {
|
|
9
10
|
private keyValueStore;
|
|
10
11
|
private getSettings;
|
|
11
12
|
private eventPublisher;
|
|
12
|
-
|
|
13
|
+
private publicUrls;
|
|
14
|
+
constructor(keyValueStore: KeyValueStore.Interface, getSettings: GetSettingsUseCase.Interface, eventPublisher: EventPublisher.Interface, publicUrls: PublicUrls.Interface);
|
|
13
15
|
execute(input: UpdateSettingsInput): Promise<Result<FileManagerSettings, UseCaseAbstraction.Error>>;
|
|
14
16
|
}
|
|
15
17
|
export declare const UpdateSettingsUseCase: typeof UpdateSettingsUseCaseImpl & {
|
|
@@ -5,14 +5,16 @@ import { GetSettingsUseCase } from "../GetSettings/abstractions.js";
|
|
|
5
5
|
import { SettingsUpdateError, SettingsValidationError } from "../../../domain/settings/errors.js";
|
|
6
6
|
import { FILE_MANAGER_GENERAL_SETTINGS } from "../../../domain/settings/constants.js";
|
|
7
7
|
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
8
|
+
import { PublicUrls } from "@webiny/api-core/features/publicUrls/index.js";
|
|
8
9
|
import { SettingsAfterUpdateEvent, SettingsBeforeUpdateEvent } from "./events.js";
|
|
9
10
|
import { updateSettingsValidation } from "../../../domain/settings/validation.js";
|
|
10
11
|
import { createZodError } from "@webiny/utils";
|
|
11
12
|
class UpdateSettingsUseCaseImpl {
|
|
12
|
-
constructor(keyValueStore, getSettings, eventPublisher){
|
|
13
|
+
constructor(keyValueStore, getSettings, eventPublisher, publicUrls){
|
|
13
14
|
this.keyValueStore = keyValueStore;
|
|
14
15
|
this.getSettings = getSettings;
|
|
15
16
|
this.eventPublisher = eventPublisher;
|
|
17
|
+
this.publicUrls = publicUrls;
|
|
16
18
|
}
|
|
17
19
|
async execute(input) {
|
|
18
20
|
const validationResult = await updateSettingsValidation.safeParseAsync(input);
|
|
@@ -21,8 +23,12 @@ class UpdateSettingsUseCaseImpl {
|
|
|
21
23
|
return Result.fail(new SettingsValidationError(zodError.data.invalidFields));
|
|
22
24
|
}
|
|
23
25
|
const validatedInput = validationResult.data;
|
|
26
|
+
if (!validatedInput.srcPrefix) {
|
|
27
|
+
const apiUrl = await this.publicUrls.getApiUrl();
|
|
28
|
+
validatedInput.srcPrefix = apiUrl.join("/files/");
|
|
29
|
+
}
|
|
24
30
|
const existingResult = await this.getSettings.execute();
|
|
25
|
-
if (existingResult.isFail()) return existingResult;
|
|
31
|
+
if (existingResult.isFail()) return Result.fail(existingResult.error);
|
|
26
32
|
const existing = existingResult.value;
|
|
27
33
|
const updatedSettings = {
|
|
28
34
|
...existing,
|
|
@@ -48,7 +54,8 @@ const UpdateSettingsUseCase_UpdateSettingsUseCase = UpdateSettingsUseCase.create
|
|
|
48
54
|
dependencies: [
|
|
49
55
|
KeyValueStore,
|
|
50
56
|
GetSettingsUseCase,
|
|
51
|
-
EventPublisher
|
|
57
|
+
EventPublisher,
|
|
58
|
+
PublicUrls
|
|
52
59
|
]
|
|
53
60
|
});
|
|
54
61
|
export { UpdateSettingsUseCase_UpdateSettingsUseCase as UpdateSettingsUseCase };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/settings/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/features/settings/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { UpdateSettingsUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { GetSettingsUseCase } from \"../GetSettings/abstractions.js\";\nimport type { FileManagerSettings } from \"~/domain/settings/types.js\";\nimport type { UpdateSettingsInput } from \"~/domain/settings/types.js\";\nimport { SettingsUpdateError } from \"~/domain/settings/errors.js\";\nimport { SettingsValidationError } from \"~/domain/settings/errors.js\";\nimport { FILE_MANAGER_GENERAL_SETTINGS } from \"~/domain/settings/constants.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { SettingsBeforeUpdateEvent, SettingsAfterUpdateEvent } from \"./events.js\";\nimport { updateSettingsValidation } from \"~/domain/settings/validation.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nclass UpdateSettingsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface\n ) {}\n\n async execute(\n input: UpdateSettingsInput\n ): Promise<Result<FileManagerSettings, UseCaseAbstraction.Error>> {\n // Validate input\n const validationResult = await updateSettingsValidation.safeParseAsync(input);\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new SettingsValidationError(zodError.data!.invalidFields));\n }\n\n const validatedInput = validationResult.data;\n\n // Get existing settings to merge with new data\n const existingResult = await this.getSettings.execute();\n if (existingResult.isFail()) {\n return existingResult;\n }\n const existing = existingResult.value;\n\n // Prepare merged settings\n const updatedSettings: FileManagerSettings = {\n ...existing,\n ...validatedInput\n };\n\n // Publish BeforeUpdate event\n await this.eventPublisher.publish(\n new SettingsBeforeUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n const result = await this.keyValueStore.set(FILE_MANAGER_GENERAL_SETTINGS, updatedSettings);\n\n if (result.isFail()) {\n return Result.fail(new SettingsUpdateError(result.error));\n }\n\n // Publish AfterUpdate event\n await this.eventPublisher.publish(\n new SettingsAfterUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n return Result.ok(updatedSettings);\n }\n}\n\nexport const UpdateSettingsUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [KeyValueStore, GetSettingsUseCase, EventPublisher]\n});\n"],"names":["UpdateSettingsUseCaseImpl","keyValueStore","getSettings","eventPublisher","input","validationResult","updateSettingsValidation","zodError","createZodError","Result","SettingsValidationError","validatedInput","existingResult","existing","updatedSettings","SettingsBeforeUpdateEvent","result","FILE_MANAGER_GENERAL_SETTINGS","SettingsUpdateError","SettingsAfterUpdateEvent","UpdateSettingsUseCase","UseCaseAbstraction","KeyValueStore","GetSettingsUseCase","EventPublisher"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/settings/UpdateSettings/UpdateSettingsUseCase.js","sources":["../../../../src/features/settings/UpdateSettings/UpdateSettingsUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { KeyValueStore } from \"@webiny/api-core/features/keyValueStore/index.js\";\nimport { UpdateSettingsUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport { GetSettingsUseCase } from \"../GetSettings/abstractions.js\";\nimport type { FileManagerSettings } from \"~/domain/settings/types.js\";\nimport type { UpdateSettingsInput } from \"~/domain/settings/types.js\";\nimport { SettingsUpdateError } from \"~/domain/settings/errors.js\";\nimport { SettingsValidationError } from \"~/domain/settings/errors.js\";\nimport { FILE_MANAGER_GENERAL_SETTINGS } from \"~/domain/settings/constants.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport { PublicUrls } from \"@webiny/api-core/features/publicUrls/index.js\";\nimport { SettingsBeforeUpdateEvent, SettingsAfterUpdateEvent } from \"./events.js\";\nimport { updateSettingsValidation } from \"~/domain/settings/validation.js\";\nimport { createZodError } from \"@webiny/utils\";\n\nclass UpdateSettingsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private keyValueStore: KeyValueStore.Interface,\n private getSettings: GetSettingsUseCase.Interface,\n private eventPublisher: EventPublisher.Interface,\n private publicUrls: PublicUrls.Interface\n ) {}\n\n async execute(\n input: UpdateSettingsInput\n ): Promise<Result<FileManagerSettings, UseCaseAbstraction.Error>> {\n // Validate input\n const validationResult = await updateSettingsValidation.safeParseAsync(input);\n if (!validationResult.success) {\n const zodError = createZodError(validationResult.error);\n return Result.fail(new SettingsValidationError(zodError.data!.invalidFields));\n }\n\n const validatedInput = validationResult.data;\n\n if (!validatedInput.srcPrefix) {\n const apiUrl = await this.publicUrls.getApiUrl();\n validatedInput.srcPrefix = apiUrl.join(\"/files/\");\n }\n\n // Get existing settings to merge with new data\n const existingResult = await this.getSettings.execute();\n if (existingResult.isFail()) {\n return Result.fail(existingResult.error);\n }\n const existing = existingResult.value;\n\n // Prepare merged settings\n const updatedSettings: FileManagerSettings = {\n ...existing,\n ...validatedInput\n };\n\n // Publish BeforeUpdate event\n await this.eventPublisher.publish(\n new SettingsBeforeUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n const result = await this.keyValueStore.set(FILE_MANAGER_GENERAL_SETTINGS, updatedSettings);\n\n if (result.isFail()) {\n return Result.fail(new SettingsUpdateError(result.error));\n }\n\n // Publish AfterUpdate event\n await this.eventPublisher.publish(\n new SettingsAfterUpdateEvent({\n original: existing,\n settings: updatedSettings,\n input: validatedInput\n })\n );\n\n return Result.ok(updatedSettings);\n }\n}\n\nexport const UpdateSettingsUseCase = UseCaseAbstraction.createImplementation({\n implementation: UpdateSettingsUseCaseImpl,\n dependencies: [KeyValueStore, GetSettingsUseCase, EventPublisher, PublicUrls]\n});\n"],"names":["UpdateSettingsUseCaseImpl","keyValueStore","getSettings","eventPublisher","publicUrls","input","validationResult","updateSettingsValidation","zodError","createZodError","Result","SettingsValidationError","validatedInput","apiUrl","existingResult","existing","updatedSettings","SettingsBeforeUpdateEvent","result","FILE_MANAGER_GENERAL_SETTINGS","SettingsUpdateError","SettingsAfterUpdateEvent","UpdateSettingsUseCase","UseCaseAbstraction","KeyValueStore","GetSettingsUseCase","EventPublisher","PublicUrls"],"mappings":";;;;;;;;;;;AAeA,MAAMA;IACF,YACYC,aAAsC,EACtCC,WAAyC,EACzCC,cAAwC,EACxCC,UAAgC,CAC1C;aAJUH,aAAa,GAAbA;aACAC,WAAW,GAAXA;aACAC,cAAc,GAAdA;aACAC,UAAU,GAAVA;IACT;IAEH,MAAM,QACFC,KAA0B,EACoC;QAE9D,MAAMC,mBAAmB,MAAMC,yBAAyB,cAAc,CAACF;QACvE,IAAI,CAACC,iBAAiB,OAAO,EAAE;YAC3B,MAAME,WAAWC,eAAeH,iBAAiB,KAAK;YACtD,OAAOI,OAAO,IAAI,CAAC,IAAIC,wBAAwBH,SAAS,IAAI,CAAE,aAAa;QAC/E;QAEA,MAAMI,iBAAiBN,iBAAiB,IAAI;QAE5C,IAAI,CAACM,eAAe,SAAS,EAAE;YAC3B,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS;YAC9CD,eAAe,SAAS,GAAGC,OAAO,IAAI,CAAC;QAC3C;QAGA,MAAMC,iBAAiB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO;QACrD,IAAIA,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAE3C,MAAMC,WAAWD,eAAe,KAAK;QAGrC,MAAME,kBAAuC;YACzC,GAAGD,QAAQ;YACX,GAAGH,cAAc;QACrB;QAGA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIK,0BAA0B;YAC1B,UAAUF;YACV,UAAUC;YACV,OAAOJ;QACX;QAGJ,MAAMM,SAAS,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAACC,+BAA+BH;QAE3E,IAAIE,OAAO,MAAM,IACb,OAAOR,OAAO,IAAI,CAAC,IAAIU,oBAAoBF,OAAO,KAAK;QAI3D,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAC7B,IAAIG,yBAAyB;YACzB,UAAUN;YACV,UAAUC;YACV,OAAOJ;QACX;QAGJ,OAAOF,OAAO,EAAE,CAACM;IACrB;AACJ;AAEO,MAAMM,8CAAwBC,sBAAAA,oBAAuC,CAAC;IACzE,gBAAgBvB;IAChB,cAAc;QAACwB;QAAeC;QAAoBC;QAAgBC;KAAW;AACjF"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { GraphQLSchemaFactory } from "@webiny/
|
|
1
|
+
import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
2
|
import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
|
|
3
3
|
import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
|
|
4
4
|
import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
declare class FmGraphQLSchemaImpl implements GraphQLSchemaFactory.Interface {
|
|
5
|
+
import { FileModelProvider } from "../domain/file/abstractions.js";
|
|
6
|
+
declare class FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {
|
|
8
7
|
private readonly identityContext;
|
|
9
8
|
private readonly listModelsUseCase;
|
|
10
9
|
private readonly fieldRegistry;
|
|
11
|
-
private readonly
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
private readonly fileModelProvider;
|
|
11
|
+
constructor(identityContext: IdentityContext.Interface, listModelsUseCase: ListModelsUseCase.Interface, fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface, fileModelProvider: FileModelProvider.Interface);
|
|
12
|
+
getSchemaKey(): Promise<string>;
|
|
14
13
|
execute(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<GraphQLSchemaFactory.SchemaBuilder>;
|
|
15
14
|
private addBaseTypeDefs;
|
|
16
15
|
private addFileTypeDefs;
|
|
@@ -19,7 +18,7 @@ declare class FmGraphQLSchemaImpl implements GraphQLSchemaFactory.Interface {
|
|
|
19
18
|
private addFileMutationResolvers;
|
|
20
19
|
private loadModels;
|
|
21
20
|
}
|
|
22
|
-
export declare const FmGraphQLSchema: typeof
|
|
23
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/
|
|
21
|
+
export declare const FmGraphQLSchema: typeof FmGraphQLSchema_ & {
|
|
22
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-graphql/graphql/abstractions.public").IGraphQLSchemaFactory>;
|
|
24
23
|
};
|
|
25
24
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { GraphQLSchemaFactory } from "@webiny/
|
|
2
|
-
import {
|
|
1
|
+
import { GraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
|
+
import { createModelSchemaKey } from "@webiny/api-headless-cms/utils/createModelSchemaKey.js";
|
|
3
|
+
import { ErrorResponse, ListResponse, NotFoundResponse, Response } from "@webiny/api-graphql";
|
|
3
4
|
import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
|
|
4
5
|
import { renderInputFields } from "@webiny/api-headless-cms/utils/renderInputFields.js";
|
|
5
6
|
import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js";
|
|
@@ -17,7 +18,7 @@ import { GetFileByUrlUseCase } from "../features/file/GetFileByUrl/abstractions.
|
|
|
17
18
|
import { GetSettingsUseCase } from "../features/settings/GetSettings/abstractions.js";
|
|
18
19
|
import { UpdateSettingsUseCase } from "../features/settings/UpdateSettings/abstractions.js";
|
|
19
20
|
import { FileUrlGenerator } from "../features/file/FileUrlGenerator/abstractions.js";
|
|
20
|
-
import {
|
|
21
|
+
import { FileModelProvider } from "../domain/file/abstractions.js";
|
|
21
22
|
const removeFieldRequiredValidation = (field)=>{
|
|
22
23
|
if (field.validation) field.validation = field.validation.filter((validation)=>"required" !== validation.name);
|
|
23
24
|
if (field.listValidation) field.listValidation = field.listValidation.filter((v)=>"required" !== v.name);
|
|
@@ -29,13 +30,20 @@ const createUpdateFields = (fields)=>fields.reduce((collection, field)=>{
|
|
|
29
30
|
}));
|
|
30
31
|
return collection;
|
|
31
32
|
}, []);
|
|
32
|
-
class
|
|
33
|
-
constructor(identityContext, listModelsUseCase, fieldRegistry,
|
|
33
|
+
class FmGraphQLSchema_ {
|
|
34
|
+
constructor(identityContext, listModelsUseCase, fieldRegistry, fileModelProvider){
|
|
34
35
|
this.identityContext = identityContext;
|
|
35
36
|
this.listModelsUseCase = listModelsUseCase;
|
|
36
37
|
this.fieldRegistry = fieldRegistry;
|
|
37
|
-
this.
|
|
38
|
-
|
|
38
|
+
this.fileModelProvider = fileModelProvider;
|
|
39
|
+
}
|
|
40
|
+
async getSchemaKey() {
|
|
41
|
+
const models = await this.loadModels();
|
|
42
|
+
const fileModel = await this.fileModelProvider.get();
|
|
43
|
+
const modelKey = createModelSchemaKey([
|
|
44
|
+
fileModel
|
|
45
|
+
], models);
|
|
46
|
+
return `FileManager:${modelKey}`;
|
|
39
47
|
}
|
|
40
48
|
async execute(builder) {
|
|
41
49
|
this.addBaseTypeDefs(builder);
|
|
@@ -120,29 +128,30 @@ class FmGraphQLSchemaImpl {
|
|
|
120
128
|
}
|
|
121
129
|
async addFileTypeDefs(builder) {
|
|
122
130
|
const models = await this.loadModels();
|
|
123
|
-
const
|
|
131
|
+
const fileModel = await this.fileModelProvider.get();
|
|
132
|
+
const { fields } = fileModel;
|
|
124
133
|
const fieldTypes = renderFields({
|
|
125
134
|
models,
|
|
126
|
-
model:
|
|
135
|
+
model: fileModel,
|
|
127
136
|
fields,
|
|
128
137
|
type: "manage",
|
|
129
138
|
fieldRegistry: this.fieldRegistry
|
|
130
139
|
});
|
|
131
140
|
const inputCreateFields = renderInputFields({
|
|
132
141
|
models,
|
|
133
|
-
model:
|
|
142
|
+
model: fileModel,
|
|
134
143
|
fields,
|
|
135
144
|
fieldRegistry: this.fieldRegistry
|
|
136
145
|
});
|
|
137
146
|
const inputUpdateFields = renderInputFields({
|
|
138
147
|
models,
|
|
139
|
-
model:
|
|
148
|
+
model: fileModel,
|
|
140
149
|
fields: createUpdateFields(fields),
|
|
141
150
|
fieldRegistry: this.fieldRegistry
|
|
142
151
|
});
|
|
143
152
|
const listFilterFieldsRender = renderListFilterFields({
|
|
144
|
-
model:
|
|
145
|
-
fields:
|
|
153
|
+
model: fileModel,
|
|
154
|
+
fields: fileModel.fields,
|
|
146
155
|
type: "manage",
|
|
147
156
|
fieldRegistry: this.fieldRegistry,
|
|
148
157
|
excludeFields: [
|
|
@@ -323,14 +332,14 @@ class FmGraphQLSchemaImpl {
|
|
|
323
332
|
dependencies: [
|
|
324
333
|
FileUrlGenerator
|
|
325
334
|
],
|
|
326
|
-
resolver: (urlGenerator)=>
|
|
335
|
+
resolver: (urlGenerator)=>({ parent })=>urlGenerator.generateUrl(parent)
|
|
327
336
|
});
|
|
328
337
|
builder.addResolver({
|
|
329
338
|
path: "FmQuery.getFileModel",
|
|
330
339
|
dependencies: [
|
|
331
|
-
|
|
340
|
+
FileModelProvider
|
|
332
341
|
],
|
|
333
|
-
resolver: (
|
|
342
|
+
resolver: (fileModelProvider)=>async ()=>new Response(await fileModelProvider.get())
|
|
334
343
|
});
|
|
335
344
|
builder.addResolver({
|
|
336
345
|
path: "FmQuery.getFile",
|
|
@@ -437,13 +446,12 @@ class FmGraphQLSchemaImpl {
|
|
|
437
446
|
}
|
|
438
447
|
}
|
|
439
448
|
const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({
|
|
440
|
-
implementation:
|
|
449
|
+
implementation: FmGraphQLSchema_,
|
|
441
450
|
dependencies: [
|
|
442
451
|
IdentityContext,
|
|
443
452
|
ListModelsUseCase,
|
|
444
453
|
CmsModelFieldToGraphQLRegistry,
|
|
445
|
-
|
|
446
|
-
FileUrlGenerator
|
|
454
|
+
FileModelProvider
|
|
447
455
|
]
|
|
448
456
|
});
|
|
449
457
|
export { FmGraphQLSchema };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/FmGraphQLSchema.js","sources":["../../src/graphql/FmGraphQLSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/handler-graphql/graphql/abstractions.js\";\nimport { ErrorResponse } from \"@webiny/handler-graphql\";\nimport { ListResponse } from \"@webiny/handler-graphql\";\nimport { NotFoundResponse } from \"@webiny/handler-graphql\";\nimport { Response } from \"@webiny/handler-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetFileByUrlUseCase } from \"~/features/file/GetFileByUrl/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport { UpdateSettingsUseCase } from \"~/features/settings/UpdateSettings/abstractions.js\";\nimport { FileUrlGenerator } from \"~/features/file/FileUrlGenerator/abstractions.js\";\nimport { FileModel } from \"~/domain/file/abstractions.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nclass FmGraphQLSchemaImpl implements GraphQLSchemaFactory.Interface {\n public constructor(\n private readonly identityContext: IdentityContext.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface,\n private readonly fileModel: FileModel.Interface,\n private readonly fileUrlGenerator: FileUrlGenerator.Interface\n ) {}\n\n public async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n this.addBaseTypeDefs(builder);\n await this.addFileTypeDefs(builder);\n this.addSettingsResolvers(builder);\n this.addFileQueryResolvers(builder);\n this.addFileMutationResolvers(builder);\n\n return builder;\n }\n\n private addBaseTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addTypeDefs(/* GraphQL */ `\n type FmError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type FmCreatedBy {\n id: ID\n displayName: String\n type: String\n }\n\n type FmListMeta {\n cursor: String\n totalCount: Int\n hasMoreItems: Boolean\n }\n\n type FmBooleanResponse {\n data: Boolean\n error: FmError\n }\n\n type FmSettings {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n input FmSettingsInput {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n type FmSettingsResponse {\n data: FmSettings\n error: FmError\n }\n\n type FmDeleteResponse {\n data: Boolean\n error: FmError\n }\n\n type FmQuery {\n getSettings: FmSettingsResponse\n }\n\n type FmMutation {\n updateSettings(data: FmSettingsInput): FmSettingsResponse\n }\n\n extend type Query {\n fileManager: FmQuery\n }\n\n extend type Mutation {\n fileManager: FmMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n\n builder.addResolver({\n path: \"Mutation.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n }\n\n private async addFileTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<void> {\n const models = await this.loadModels();\n const { fields } = this.fileModel;\n\n const fieldTypes = renderFields({\n models,\n model: this.fileModel,\n fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry\n });\n\n const inputCreateFields = renderInputFields({\n models,\n model: this.fileModel,\n fields,\n fieldRegistry: this.fieldRegistry\n });\n\n const inputUpdateFields = renderInputFields({\n models,\n model: this.fileModel,\n fields: createUpdateFields(fields),\n fieldRegistry: this.fieldRegistry\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model: this.fileModel,\n fields: this.fileModel.fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n builder.addTypeDefs(/* GraphQL */ `\n type FmFile_Location {\n folderId: ID!\n }\n\n input FmFile_LocationInput {\n folderId: ID!\n }\n\n input FmFile_LocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n createdOn: DateTime!\n modifiedOn: DateTime\n savedOn: DateTime!\n createdBy: FmCreatedBy!\n modifiedBy: FmCreatedBy\n savedBy: FmCreatedBy!\n location: FmFile_Location!\n src: String\n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n\n input FmCreatedByInput {\n id: ID!\n displayName: String!\n type: String!\n }\n\n input FmFileCreateInput {\n id: ID!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n input FmFileUpdateInput {\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type FmFileResponse {\n data: FmFile\n error: FmError\n }\n\n input FmFileListWhereInput {\n ${listFilterFieldsRender.allFiltersAsString()}\n location: FmFile_LocationWhereInput\n AND: [FmFileListWhereInput!]\n OR: [FmFileListWhereInput!]\n }\n\n type FmFileListResponse {\n data: [FmFile!]\n error: FmError\n meta: FmListMeta\n }\n\n enum FmFileListSorter {\n savedOn_ASC\n savedOn_DESC\n createdOn_ASC\n createdOn_DESC\n name_ASC\n name_DESC\n key_ASC\n key_DESC\n type_ASC\n type_DESC\n size_ASC\n size_DESC\n }\n\n input FmTagsListWhereInput {\n createdBy: String\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n type FmTag {\n tag: String!\n count: Number!\n }\n\n type FmTagsListResponse {\n data: [FmTag!]\n error: FmError\n }\n\n type FmCreateFilesResponse {\n data: [FmFile!]\n error: FmError\n }\n\n type FmFileModelResponse {\n data: JSON\n error: FmError\n }\n\n extend type FmQuery {\n getFileModel: FmFileModelResponse!\n getFile(id: ID!): FmFileResponse!\n getFileByUrl(url: String!): FmFileResponse\n listFiles(\n search: String\n where: FmFileListWhereInput\n limit: Int\n after: String\n sort: [FmFileListSorter!]\n ): FmFileListResponse!\n listTags(where: FmTagsListWhereInput): FmTagsListResponse!\n }\n\n extend type FmMutation {\n createFile(data: FmFileCreateInput!): FmFileResponse!\n createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!\n updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!\n deleteFile(id: ID!): FmBooleanResponse!\n }\n `);\n }\n\n private addSettingsResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmQuery.getSettings\",\n dependencies: [GetSettingsUseCase],\n resolver: (getSettings: GetSettingsUseCase.Interface) => {\n return async () => {\n const result = await getSettings.execute();\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateSettings\",\n dependencies: [UpdateSettingsUseCase],\n resolver: (updateSettings: UpdateSettingsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileQueryResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmFile.src\",\n dependencies: [FileUrlGenerator],\n resolver: (urlGenerator: FileUrlGenerator.Interface) => {\n return async ({ parent }) => {\n return await urlGenerator.generateUrl(parent);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.getFileModel\",\n dependencies: [FileModel],\n resolver: (fileModel: FileModel.Interface) => {\n return () => {\n return new Response(fileModel);\n };\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"FmQuery.getFile\",\n dependencies: [GetFileUseCase],\n resolver: (getFile: GetFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listFiles\",\n dependencies: [ListFilesUseCase],\n resolver: (listFiles: ListFilesUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listTags\",\n dependencies: [ListTagsUseCase],\n resolver: (listTags: ListTagsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver<{ url: string }>({\n path: \"FmQuery.getFileByUrl\",\n dependencies: [GetFileByUrlUseCase],\n resolver: (getFileByUrl: GetFileByUrlUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFileByUrl.execute(args.url);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n if (!result.value) {\n return new NotFoundResponse(\"File not found!\");\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileMutationResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmMutation.createFile\",\n dependencies: [CreateFileUseCase],\n resolver: (createFile: CreateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.createFiles\",\n dependencies: [CreateFilesInBatchUseCase],\n resolver: (createFilesInBatch: CreateFilesInBatchUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateFile\",\n dependencies: [UpdateFileUseCase],\n resolver: (updateFile: UpdateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.deleteFile\",\n dependencies: [DeleteFileUseCase],\n resolver: (deleteFile: DeleteFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(true);\n };\n }\n });\n }\n\n private async loadModels() {\n const modelsResult = await this.identityContext.withoutAuthorization(() => {\n return this.listModelsUseCase.execute();\n });\n\n if (modelsResult.isFail()) {\n throw modelsResult.error;\n }\n\n return modelsResult.value;\n }\n}\n\nexport const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({\n implementation: FmGraphQLSchemaImpl,\n dependencies: [\n IdentityContext,\n ListModelsUseCase,\n CmsModelFieldToGraphQLRegistry,\n FileModel,\n FileUrlGenerator\n ]\n});\n"],"names":["removeFieldRequiredValidation","field","validation","v","createUpdateFields","fields","collection","FmGraphQLSchemaImpl","identityContext","listModelsUseCase","fieldRegistry","fileModel","fileUrlGenerator","builder","models","fieldTypes","renderFields","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","f","GetSettingsUseCase","getSettings","result","ErrorResponse","Response","UpdateSettingsUseCase","updateSettings","args","FileUrlGenerator","urlGenerator","parent","FileModel","GetFileUseCase","getFile","ListFilesUseCase","listFiles","ListResponse","ListTagsUseCase","listTags","GetFileByUrlUseCase","getFileByUrl","NotFoundResponse","CreateFileUseCase","createFile","CreateFilesInBatchUseCase","createFilesInBatch","UpdateFileUseCase","updateFile","DeleteFileUseCase","deleteFile","modelsResult","FmGraphQLSchema","GraphQLSchemaFactory","IdentityContext","ListModelsUseCase","CmsModelFieldToGraphQLRegistry"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graphql/FmGraphQLSchema.js","sources":["../../src/graphql/FmGraphQLSchema.ts"],"sourcesContent":["import { GraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport { createModelSchemaKey } from \"@webiny/api-headless-cms/utils/createModelSchemaKey.js\";\nimport { ErrorResponse } from \"@webiny/api-graphql\";\nimport { ListResponse } from \"@webiny/api-graphql\";\nimport { NotFoundResponse } from \"@webiny/api-graphql\";\nimport { Response } from \"@webiny/api-graphql\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { renderInputFields } from \"@webiny/api-headless-cms/utils/renderInputFields.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { GetFileUseCase } from \"~/features/file/GetFile/abstractions.js\";\nimport { ListFilesUseCase } from \"~/features/file/ListFiles/abstractions.js\";\nimport { ListTagsUseCase } from \"~/features/file/ListTags/abstractions.js\";\nimport { CreateFileUseCase } from \"~/features/file/CreateFile/abstractions.js\";\nimport { CreateFilesInBatchUseCase } from \"~/features/file/CreateFilesInBatch/abstractions.js\";\nimport { UpdateFileUseCase } from \"~/features/file/UpdateFile/abstractions.js\";\nimport { DeleteFileUseCase } from \"~/features/file/DeleteFile/abstractions.js\";\nimport { GetFileByUrlUseCase } from \"~/features/file/GetFileByUrl/abstractions.js\";\nimport { GetSettingsUseCase } from \"~/features/settings/GetSettings/abstractions.js\";\nimport { UpdateSettingsUseCase } from \"~/features/settings/UpdateSettings/abstractions.js\";\nimport { FileUrlGenerator } from \"~/features/file/FileUrlGenerator/abstractions.js\";\nimport { FileModelProvider } from \"~/domain/file/abstractions.js\";\nimport type { CmsModelField } from \"@webiny/api-headless-cms/types/index.js\";\n\nconst removeFieldRequiredValidation = (field: CmsModelField) => {\n if (field.validation) {\n field.validation = field.validation.filter(validation => validation.name !== \"required\");\n }\n if (field.listValidation) {\n field.listValidation = field.listValidation.filter(v => v.name !== \"required\");\n }\n return field;\n};\n\nconst createUpdateFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.reduce<CmsModelField[]>((collection, field) => {\n collection.push(removeFieldRequiredValidation({ ...field }));\n return collection;\n }, []);\n};\n\nclass FmGraphQLSchema_ implements GraphQLSchemaFactory.Interface {\n public constructor(\n private readonly identityContext: IdentityContext.Interface,\n private readonly listModelsUseCase: ListModelsUseCase.Interface,\n private readonly fieldRegistry: CmsModelFieldToGraphQLRegistry.Interface,\n private readonly fileModelProvider: FileModelProvider.Interface\n ) {}\n\n public async getSchemaKey(): Promise<string> {\n const models = await this.loadModels();\n const fileModel = await this.fileModelProvider.get();\n const modelKey = createModelSchemaKey([fileModel], models);\n return `FileManager:${modelKey}`;\n }\n\n public async execute(\n builder: GraphQLSchemaFactory.SchemaBuilder\n ): Promise<GraphQLSchemaFactory.SchemaBuilder> {\n this.addBaseTypeDefs(builder);\n await this.addFileTypeDefs(builder);\n this.addSettingsResolvers(builder);\n this.addFileQueryResolvers(builder);\n this.addFileMutationResolvers(builder);\n\n return builder;\n }\n\n private addBaseTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addTypeDefs(/* GraphQL */ `\n type FmError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type FmCreatedBy {\n id: ID\n displayName: String\n type: String\n }\n\n type FmListMeta {\n cursor: String\n totalCount: Int\n hasMoreItems: Boolean\n }\n\n type FmBooleanResponse {\n data: Boolean\n error: FmError\n }\n\n type FmSettings {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n input FmSettingsInput {\n uploadMinFileSize: Number\n uploadMaxFileSize: Number\n srcPrefix: String\n }\n\n type FmSettingsResponse {\n data: FmSettings\n error: FmError\n }\n\n type FmDeleteResponse {\n data: Boolean\n error: FmError\n }\n\n type FmQuery {\n getSettings: FmSettingsResponse\n }\n\n type FmMutation {\n updateSettings(data: FmSettingsInput): FmSettingsResponse\n }\n\n extend type Query {\n fileManager: FmQuery\n }\n\n extend type Mutation {\n fileManager: FmMutation\n }\n `);\n\n builder.addResolver({\n path: \"Query.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n\n builder.addResolver({\n path: \"Mutation.fileManager\",\n resolver: () => {\n return () => ({});\n }\n });\n }\n\n private async addFileTypeDefs(builder: GraphQLSchemaFactory.SchemaBuilder): Promise<void> {\n const models = await this.loadModels();\n const fileModel = await this.fileModelProvider.get();\n const { fields } = fileModel;\n\n const fieldTypes = renderFields({\n models,\n model: fileModel,\n fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry\n });\n\n const inputCreateFields = renderInputFields({\n models,\n model: fileModel,\n fields,\n fieldRegistry: this.fieldRegistry\n });\n\n const inputUpdateFields = renderInputFields({\n models,\n model: fileModel,\n fields: createUpdateFields(fields),\n fieldRegistry: this.fieldRegistry\n });\n\n const listFilterFieldsRender = renderListFilterFields({\n model: fileModel,\n fields: fileModel.fields,\n type: \"manage\",\n fieldRegistry: this.fieldRegistry,\n excludeFields: [\"entryId\", \"status\"]\n });\n\n builder.addTypeDefs(/* GraphQL */ `\n type FmFile_Location {\n folderId: ID!\n }\n\n input FmFile_LocationInput {\n folderId: ID!\n }\n\n input FmFile_LocationWhereInput {\n folderId: ID\n folderId_in: [ID!]\n folderId_not: ID\n folderId_not_in: [ID!]\n }\n\n ${fieldTypes.map(f => f.typeDefs).join(\"\\n\")}\n\n type FmFile {\n id: ID!\n createdOn: DateTime!\n modifiedOn: DateTime\n savedOn: DateTime!\n createdBy: FmCreatedBy!\n modifiedBy: FmCreatedBy\n savedBy: FmCreatedBy!\n location: FmFile_Location!\n src: String\n ${fieldTypes.map(f => f.fields).join(\"\\n\")}\n }\n\n ${inputCreateFields.map(f => f.typeDefs).join(\"\\n\")}\n\n input FmCreatedByInput {\n id: ID!\n displayName: String!\n type: String!\n }\n\n input FmFileCreateInput {\n id: ID!\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputCreateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n input FmFileUpdateInput {\n createdOn: DateTime\n modifiedOn: DateTime\n savedOn: DateTime\n createdBy: FmCreatedByInput\n modifiedBy: FmCreatedByInput\n savedBy: FmCreatedByInput\n location: FmFile_LocationInput\n ${inputUpdateFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type FmFileResponse {\n data: FmFile\n error: FmError\n }\n\n input FmFileListWhereInput {\n ${listFilterFieldsRender.allFiltersAsString()}\n location: FmFile_LocationWhereInput\n AND: [FmFileListWhereInput!]\n OR: [FmFileListWhereInput!]\n }\n\n type FmFileListResponse {\n data: [FmFile!]\n error: FmError\n meta: FmListMeta\n }\n\n enum FmFileListSorter {\n savedOn_ASC\n savedOn_DESC\n createdOn_ASC\n createdOn_DESC\n name_ASC\n name_DESC\n key_ASC\n key_DESC\n type_ASC\n type_DESC\n size_ASC\n size_DESC\n }\n\n input FmTagsListWhereInput {\n createdBy: String\n tags_startsWith: String\n tags_not_startsWith: String\n }\n\n type FmTag {\n tag: String!\n count: Number!\n }\n\n type FmTagsListResponse {\n data: [FmTag!]\n error: FmError\n }\n\n type FmCreateFilesResponse {\n data: [FmFile!]\n error: FmError\n }\n\n type FmFileModelResponse {\n data: JSON\n error: FmError\n }\n\n extend type FmQuery {\n getFileModel: FmFileModelResponse!\n getFile(id: ID!): FmFileResponse!\n getFileByUrl(url: String!): FmFileResponse\n listFiles(\n search: String\n where: FmFileListWhereInput\n limit: Int\n after: String\n sort: [FmFileListSorter!]\n ): FmFileListResponse!\n listTags(where: FmTagsListWhereInput): FmTagsListResponse!\n }\n\n extend type FmMutation {\n createFile(data: FmFileCreateInput!): FmFileResponse!\n createFiles(data: [FmFileCreateInput!]!): FmCreateFilesResponse!\n updateFile(id: ID!, data: FmFileUpdateInput!): FmFileResponse!\n deleteFile(id: ID!): FmBooleanResponse!\n }\n `);\n }\n\n private addSettingsResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmQuery.getSettings\",\n dependencies: [GetSettingsUseCase],\n resolver: (getSettings: GetSettingsUseCase.Interface) => {\n return async () => {\n const result = await getSettings.execute();\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateSettings\",\n dependencies: [UpdateSettingsUseCase],\n resolver: (updateSettings: UpdateSettingsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileQueryResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmFile.src\",\n dependencies: [FileUrlGenerator],\n resolver: (urlGenerator: FileUrlGenerator.Interface) => {\n return ({ parent }) => {\n return urlGenerator.generateUrl(parent);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.getFileModel\",\n dependencies: [FileModelProvider],\n resolver: (fileModelProvider: FileModelProvider.Interface) => {\n return async () => {\n return new Response(await fileModelProvider.get());\n };\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"FmQuery.getFile\",\n dependencies: [GetFileUseCase],\n resolver: (getFile: GetFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listFiles\",\n dependencies: [ListFilesUseCase],\n resolver: (listFiles: ListFilesUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listFiles.execute(args);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new ListResponse(result.value.items, result.value.meta);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmQuery.listTags\",\n dependencies: [ListTagsUseCase],\n resolver: (listTags: ListTagsUseCase.Interface) => {\n return async ({ args }) => {\n const result = await listTags.execute(args || {});\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver<{ url: string }>({\n path: \"FmQuery.getFileByUrl\",\n dependencies: [GetFileByUrlUseCase],\n resolver: (getFileByUrl: GetFileByUrlUseCase.Interface) => {\n return async ({ args }) => {\n const result = await getFileByUrl.execute(args.url);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n if (!result.value) {\n return new NotFoundResponse(\"File not found!\");\n }\n\n return new Response(result.value);\n };\n }\n });\n }\n\n private addFileMutationResolvers(builder: GraphQLSchemaFactory.SchemaBuilder): void {\n builder.addResolver({\n path: \"FmMutation.createFile\",\n dependencies: [CreateFileUseCase],\n resolver: (createFile: CreateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFile.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.createFiles\",\n dependencies: [CreateFilesInBatchUseCase],\n resolver: (createFilesInBatch: CreateFilesInBatchUseCase.Interface) => {\n return async ({ args }) => {\n const result = await createFilesInBatch.execute({\n files: args.data,\n meta: args.meta\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.updateFile\",\n dependencies: [UpdateFileUseCase],\n resolver: (updateFile: UpdateFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await updateFile.execute({\n id: args.id,\n ...args.data\n });\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(result.value);\n };\n }\n });\n\n builder.addResolver({\n path: \"FmMutation.deleteFile\",\n dependencies: [DeleteFileUseCase],\n resolver: (deleteFile: DeleteFileUseCase.Interface) => {\n return async ({ args }) => {\n const result = await deleteFile.execute(args.id);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return new Response(true);\n };\n }\n });\n }\n\n private async loadModels() {\n const modelsResult = await this.identityContext.withoutAuthorization(() => {\n return this.listModelsUseCase.execute();\n });\n\n if (modelsResult.isFail()) {\n throw modelsResult.error;\n }\n\n return modelsResult.value;\n }\n}\n\nexport const FmGraphQLSchema = GraphQLSchemaFactory.createImplementation({\n implementation: FmGraphQLSchema_,\n dependencies: [\n IdentityContext,\n ListModelsUseCase,\n CmsModelFieldToGraphQLRegistry,\n FileModelProvider\n ]\n});\n"],"names":["removeFieldRequiredValidation","field","validation","v","createUpdateFields","fields","collection","FmGraphQLSchema_","identityContext","listModelsUseCase","fieldRegistry","fileModelProvider","models","fileModel","modelKey","createModelSchemaKey","builder","fieldTypes","renderFields","inputCreateFields","renderInputFields","inputUpdateFields","listFilterFieldsRender","renderListFilterFields","f","GetSettingsUseCase","getSettings","result","ErrorResponse","Response","UpdateSettingsUseCase","updateSettings","args","FileUrlGenerator","urlGenerator","parent","FileModelProvider","GetFileUseCase","getFile","ListFilesUseCase","listFiles","ListResponse","ListTagsUseCase","listTags","GetFileByUrlUseCase","getFileByUrl","NotFoundResponse","CreateFileUseCase","createFile","CreateFilesInBatchUseCase","createFilesInBatch","UpdateFileUseCase","updateFile","DeleteFileUseCase","deleteFile","modelsResult","FmGraphQLSchema","GraphQLSchemaFactory","IdentityContext","ListModelsUseCase","CmsModelFieldToGraphQLRegistry"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
export * from "./delivery/index.js";
|
|
2
|
+
export declare const createAssetDelivery: () => import("@webiny/handler").RegisterExtensionPlugin<import("@webiny/handler/types.js").Context>[];
|
|
3
|
+
export { FileManagerAppFeature } from "./FileManagerAppFeature.js";
|
|
4
|
+
export { AssetDeliveryRoute } from "./delivery/AssetDeliveryRoute.js";
|
package/index.js
CHANGED
|
@@ -1,44 +1,15 @@
|
|
|
1
|
-
import { ContextPlugin } from "@webiny/api";
|
|
2
1
|
import { setupAssetDelivery } from "./delivery/setupAssetDelivery.js";
|
|
3
|
-
import { FileManagerFeature } from "./features/FileManagerFeature.js";
|
|
4
|
-
import { FmPermissionsFeature } from "./features/permissions/feature.js";
|
|
5
|
-
import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
|
|
6
|
-
import { FileModel } from "./domain/file/abstractions.js";
|
|
7
|
-
import { TenantContext } from "@webiny/api-core/features/tenancy/TenantContext/index.js";
|
|
8
|
-
import { FILE_MODEL_ID, FileModel as file_model_js_FileModel } from "./domain/file/file.model.js";
|
|
9
2
|
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
10
3
|
import { AssetDeliveryFeature } from "./features/assetDelivery/feature.js";
|
|
11
|
-
|
|
12
|
-
const extensionPlugin = createRegisterExtensionPlugin((context)=>{
|
|
13
|
-
const container = context.container;
|
|
14
|
-
container.register(file_model_js_FileModel);
|
|
15
|
-
FmPermissionsFeature.register(container);
|
|
16
|
-
FileManagerFeature.register(container);
|
|
17
|
-
});
|
|
18
|
-
extensionPlugin.name = "file-manager.extension";
|
|
19
|
-
const contextPlugin = new ContextPlugin(async (context)=>{
|
|
20
|
-
const container = context.container;
|
|
21
|
-
const tenantContext = container.resolve(TenantContext);
|
|
22
|
-
const getModel = container.resolve(GetModelUseCase);
|
|
23
|
-
if (!tenantContext.getTenant()) return;
|
|
24
|
-
await context.security.withoutAuthorization(async ()=>{
|
|
25
|
-
const fileModel = await getModel.execute(FILE_MODEL_ID);
|
|
26
|
-
if (fileModel.isFail()) throw fileModel.error;
|
|
27
|
-
container.registerInstance(FileModel, fileModel.value);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
contextPlugin.name = "file-manager.createContext";
|
|
31
|
-
return [
|
|
32
|
-
extensionPlugin,
|
|
33
|
-
contextPlugin
|
|
34
|
-
];
|
|
35
|
-
};
|
|
4
|
+
export * from "./delivery/index.js";
|
|
36
5
|
const createAssetDelivery = ()=>[
|
|
37
6
|
createRegisterExtensionPlugin((context)=>{
|
|
38
7
|
AssetDeliveryFeature.register(context.container);
|
|
39
8
|
}),
|
|
40
9
|
...setupAssetDelivery()
|
|
41
10
|
];
|
|
42
|
-
export {
|
|
11
|
+
export { FileManagerAppFeature } from "./FileManagerAppFeature.js";
|
|
12
|
+
export { AssetDeliveryRoute } from "./delivery/AssetDeliveryRoute.js";
|
|
13
|
+
export { createAssetDelivery };
|
|
43
14
|
|
|
44
15
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { setupAssetDelivery } from \"./delivery/setupAssetDelivery.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport { AssetDeliveryFeature } from \"~/features/assetDelivery/feature.js\";\n\nexport * from \"./delivery/index.js\";\n\nexport const createAssetDelivery = () => {\n return [\n createRegisterExtensionPlugin(context => {\n AssetDeliveryFeature.register(context.container);\n }),\n ...setupAssetDelivery()\n ];\n};\n\nexport { FileManagerAppFeature } from \"./FileManagerAppFeature.js\";\nexport { AssetDeliveryRoute } from \"./delivery/AssetDeliveryRoute.js\";\n"],"names":["createAssetDelivery","createRegisterExtensionPlugin","context","AssetDeliveryFeature","setupAssetDelivery"],"mappings":";;;;AAMO,MAAMA,sBAAsB,IACxB;QACHC,8BAA8BC,CAAAA;YAC1BC,qBAAqB,QAAQ,CAACD,QAAQ,SAAS;QACnD;WACGE;KACN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-file-manager",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.a85ef555b2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -22,32 +22,32 @@
|
|
|
22
22
|
],
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@webiny/api": "0.0.0-unstable.
|
|
26
|
-
"@webiny/api-core": "0.0.0-unstable.
|
|
27
|
-
"@webiny/api-
|
|
28
|
-
"@webiny/
|
|
29
|
-
"@webiny/
|
|
30
|
-
"@webiny/
|
|
31
|
-
"@webiny/
|
|
32
|
-
"@webiny/
|
|
33
|
-
"@webiny/handler": "0.0.0-unstable.
|
|
34
|
-
"@webiny/
|
|
35
|
-
"@webiny/
|
|
36
|
-
"@webiny/
|
|
37
|
-
"@webiny/wcp": "0.0.0-unstable.
|
|
25
|
+
"@webiny/api": "0.0.0-unstable.a85ef555b2",
|
|
26
|
+
"@webiny/api-core": "0.0.0-unstable.a85ef555b2",
|
|
27
|
+
"@webiny/api-graphql": "0.0.0-unstable.a85ef555b2",
|
|
28
|
+
"@webiny/api-headless-cms": "0.0.0-unstable.a85ef555b2",
|
|
29
|
+
"@webiny/background-tasks": "0.0.0-unstable.a85ef555b2",
|
|
30
|
+
"@webiny/build-tools": "0.0.0-unstable.a85ef555b2",
|
|
31
|
+
"@webiny/di": "2.0.0",
|
|
32
|
+
"@webiny/error": "0.0.0-unstable.a85ef555b2",
|
|
33
|
+
"@webiny/event-handler-core": "0.0.0-unstable.a85ef555b2",
|
|
34
|
+
"@webiny/feature": "0.0.0-unstable.a85ef555b2",
|
|
35
|
+
"@webiny/handler": "0.0.0-unstable.a85ef555b2",
|
|
36
|
+
"@webiny/plugins": "0.0.0-unstable.a85ef555b2",
|
|
37
|
+
"@webiny/wcp": "0.0.0-unstable.a85ef555b2",
|
|
38
38
|
"cache-control-parser": "2.2.0",
|
|
39
|
+
"graphql": "16.14.2",
|
|
39
40
|
"mime": "4.1.0",
|
|
40
41
|
"object-hash": "3.0.0",
|
|
41
|
-
"p-map": "7.0.6",
|
|
42
42
|
"p-reduce": "3.0.0",
|
|
43
43
|
"sanitize-filename": "1.6.4",
|
|
44
44
|
"zod": "4.4.3"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@types/object-hash": "3.0.6",
|
|
48
|
-
"@webiny/
|
|
49
|
-
"@webiny/
|
|
50
|
-
"@webiny/wcp": "0.0.0-unstable.
|
|
48
|
+
"@webiny/api-core-testing": "0.0.0-unstable.a85ef555b2",
|
|
49
|
+
"@webiny/utils": "0.0.0-unstable.a85ef555b2",
|
|
50
|
+
"@webiny/wcp": "0.0.0-unstable.a85ef555b2",
|
|
51
51
|
"rimraf": "6.1.3",
|
|
52
52
|
"typescript": "7.0.2"
|
|
53
53
|
},
|
package/constants.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const ROOT_FOLDER = \"root\";\n"],"names":["ROOT_FOLDER"],"mappings":"AAAO,MAAMA,cAAc"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { AssetRequestFactory as AssetRequestFactoryAbstraction, type IAssetRequestFactory } from "./abstractions.js";
|
|
2
|
-
declare class AssetRequestFactoryImpl implements IAssetRequestFactory {
|
|
3
|
-
create(data: AssetRequestFactoryAbstraction.AssetRequestData): AssetRequestFactoryAbstraction.AssetRequest;
|
|
4
|
-
}
|
|
5
|
-
export declare const AssetRequestFactory: typeof AssetRequestFactoryImpl & {
|
|
6
|
-
__abstraction: import("@webiny/di").Abstraction<IAssetRequestFactory>;
|
|
7
|
-
};
|
|
8
|
-
export {};
|