cabloy 5.1.97 → 5.1.98
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/.cabloy-version +1 -1
- package/CHANGELOG.md +27 -0
- package/cabloy-docs/.vitepress/config.mjs +7 -0
- package/cabloy-docs/backend/image-guide.md +544 -0
- package/cabloy-docs/frontend/image-guide.md +512 -0
- package/cabloy-docs/frontend/introduction.md +2 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +34 -3
- package/cabloy-docs/frontend/model-architecture.md +2 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +2 -0
- package/cabloy-docs/frontend/model-state-guide.md +2 -0
- package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +10 -8
- package/cabloy-docs/frontend/server-data.md +2 -0
- package/cabloy-docs/frontend/state-architecture-for-vue-developers.md +218 -0
- package/cabloy-docs/frontend/system-startup-guide.md +2 -0
- package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +11 -10
- package/cabloy-docs/fullstack/image-workflow.md +403 -0
- package/cabloy-docs/fullstack/introduction.md +1 -0
- package/package.json +1 -1
- package/vona/package.original.json +0 -1
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +424 -47
- package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/src/bean/ssrSite.admin.ts +4 -0
- package/vona/src/suite/cabloy-basic/modules/basic-siteweb/src/bean/ssrSite.web.ts +4 -0
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/cli/ssrSite/boilerplate/{{sceneName}}.{{beanName}}.ts_ +3 -0
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/service/ssrHandler.ts +11 -2
- package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/types/ssrSite.ts +6 -0
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/a-file/cli/fileProvider/boilerplate/{{sceneName}}.{{beanName}}.ts_ +23 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/cli/fileScene/boilerplate/{{sceneName}}.{{beanName}}.ts_ +5 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/package.json +66 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/index.ts +425 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/locales.ts +18 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.file.ts +322 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileProvider.ts +62 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileUploadPolicy.ts +196 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.redlock.ts +11 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.version.ts +38 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/config.ts +16 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/locale/en-us.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/locale/zh-cn.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/controller/file.ts +167 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadRequest.ts +33 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadResponse.ts +41 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDownloadRequest.ts +12 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadResponse.ts +59 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadTokenRequest.ts +24 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadTokenResponse.ts +16 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadUrlRequest.ts +33 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/file.ts +55 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/fileProvider.ts +24 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/index.ts +4 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileProvider.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileScene.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileUploadValidation.ts +15 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/index.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/model/file.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/model/fileProvider.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/file.ts +144 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileProvider.ts +111 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileScene.ts +53 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/index.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/package.json +53 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/.metadata/index.ts +104 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/bean/fileProvider.cloudflare.ts +123 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/index.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/service/fileCloudflare.ts +245 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/package.json +50 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/.metadata/index.ts +111 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/.metadata/this.ts +2 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/bean/fileProvider.native.ts +125 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/config/config.ts +7 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/index.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/src/service/fileNative.ts +125 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/tsconfig.build.json +11 -0
- package/vona/src/suite-vendor/a-file/modules/file-native/tsconfig.json +7 -0
- package/vona/src/suite-vendor/a-file/package.json +14 -0
- package/vona/src/suite-vendor/a-file/tsconfig.base.json +4 -0
- package/vona/src/suite-vendor/a-file/tsconfig.json +16 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/package.json +4 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +61 -3
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.image.ts +336 -152
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageProvider.ts +21 -14
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +59 -11
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.index.ts +12 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.redlock.ts +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.version.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/schedule.imageDraftPrune.ts +29 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/config/config.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +24 -54
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadFinalizeRequest.ts +13 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadFinalizeResponse.ts +10 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadResponse.ts +10 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadResponse.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageView.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/image.ts +10 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/imageUploadValidation.ts +15 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/image.ts +18 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageProvider.ts +28 -2
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/bean/imageProvider.cloudflare.ts +13 -1
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +26 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/package.json +6 -2
- package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/index.ts +37 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/src/bean/imageProvider.native.ts +21 -1
- package/vona/src/suite-vendor/a-image/modules/image-native/src/controller/image.ts +57 -0
- package/vona/src/suite-vendor/a-image/modules/image-native/src/service/imageNative.ts +142 -34
- package/vona/src/suite-vendor/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/entity.ts +2 -4
- package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormutils/src/lib/columns.ts +7 -3
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/pnpm-lock.yaml +389 -397
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +0 -9
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { OmitNever } from 'vona';
|
|
2
|
+
import type { ServiceOnion, TypeOnionOptionsEnableSimple } from 'vona-module-a-onion';
|
|
3
|
+
|
|
4
|
+
import type { EntityFile } from '../entity/file.ts';
|
|
5
|
+
import type { EntityFileProvider } from '../entity/fileProvider.ts';
|
|
6
|
+
import type {
|
|
7
|
+
IFileDeliveryOptions,
|
|
8
|
+
IFileDirectUploadInput,
|
|
9
|
+
IFileDownloadResult,
|
|
10
|
+
IFileProviderDirectUploadResource,
|
|
11
|
+
IFileProviderResource,
|
|
12
|
+
IFileUploadInput,
|
|
13
|
+
IFileUploadUrlInput,
|
|
14
|
+
} from './file.ts';
|
|
15
|
+
|
|
16
|
+
export type TypeFileProviderPick = Partial<
|
|
17
|
+
Pick<EntityFileProvider, 'id' | 'providerName' | 'clientName'>
|
|
18
|
+
>;
|
|
19
|
+
|
|
20
|
+
export interface IFileProviderRecord {}
|
|
21
|
+
|
|
22
|
+
export interface IFileProviderClientRecord {
|
|
23
|
+
default: never;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface IFileProviderClientOptions {
|
|
27
|
+
bucket?: string;
|
|
28
|
+
deliveryBaseUrl?: string;
|
|
29
|
+
public?: boolean;
|
|
30
|
+
presignExpiresIn?: number;
|
|
31
|
+
signedDeliveryKind?: 'proxy' | 'provider';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type TypeFileProviderClientOptions<T> =
|
|
35
|
+
T extends IDecoratorFileProviderOptions<any, infer O> ? O : never;
|
|
36
|
+
|
|
37
|
+
export type TypeFileProviderClientName<T> =
|
|
38
|
+
T extends IDecoratorFileProviderOptions<infer R, any> ? keyof R & string : never;
|
|
39
|
+
|
|
40
|
+
export interface IDecoratorFileProviderOptions<
|
|
41
|
+
R extends IFileProviderClientRecord = IFileProviderClientRecord,
|
|
42
|
+
T extends IFileProviderClientOptions = IFileProviderClientOptions,
|
|
43
|
+
> extends TypeOnionOptionsEnableSimple {
|
|
44
|
+
base?: T;
|
|
45
|
+
clients?: { [K in keyof R]?: R[K] extends undefined ? T : R[K] };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type TypeFileProviderOptionsByName<N extends keyof IFileProviderRecord> =
|
|
49
|
+
IFileProviderRecord[N];
|
|
50
|
+
|
|
51
|
+
export type TypeFileProviderClientOptionsByName<N extends keyof IFileProviderRecord> =
|
|
52
|
+
TypeFileProviderOptionsByName<N> extends IDecoratorFileProviderOptions<any, any>
|
|
53
|
+
? TypeFileProviderClientOptions<TypeFileProviderOptionsByName<N>>
|
|
54
|
+
: never;
|
|
55
|
+
|
|
56
|
+
export type TypeFileProviderClientNameByName<N extends keyof IFileProviderRecord> =
|
|
57
|
+
TypeFileProviderOptionsByName<N> extends IDecoratorFileProviderOptions<any, any>
|
|
58
|
+
? TypeFileProviderClientName<TypeFileProviderOptionsByName<N>>
|
|
59
|
+
: never;
|
|
60
|
+
|
|
61
|
+
export type TypeFileProviderExecuteByName<N extends keyof IFileProviderRecord> =
|
|
62
|
+
TypeFileProviderOptionsByName<N> extends IDecoratorFileProviderOptions<any, any>
|
|
63
|
+
? IFileProviderExecute<TypeFileProviderClientOptionsByName<N>, TypeFileProviderOptionsByName<N>>
|
|
64
|
+
: never;
|
|
65
|
+
|
|
66
|
+
export interface IFileProviderExecute<
|
|
67
|
+
T extends IFileProviderClientOptions = IFileProviderClientOptions,
|
|
68
|
+
O extends IDecoratorFileProviderOptions = IDecoratorFileProviderOptions,
|
|
69
|
+
> {
|
|
70
|
+
upload(input: IFileUploadInput, clientOptions: T, options: O): Promise<IFileProviderResource>;
|
|
71
|
+
uploadUrl?(
|
|
72
|
+
input: IFileUploadUrlInput,
|
|
73
|
+
clientOptions: T,
|
|
74
|
+
options: O,
|
|
75
|
+
): Promise<IFileProviderResource>;
|
|
76
|
+
createDirectUpload?(
|
|
77
|
+
input: IFileDirectUploadInput,
|
|
78
|
+
clientOptions: T,
|
|
79
|
+
options: O,
|
|
80
|
+
): Promise<IFileProviderDirectUploadResource>;
|
|
81
|
+
get(file: EntityFile, clientOptions: T, options: O): Promise<IFileProviderResource | undefined>;
|
|
82
|
+
delete(file: EntityFile, clientOptions: T, options: O): Promise<void>;
|
|
83
|
+
getDownloadUrl(
|
|
84
|
+
file: EntityFile,
|
|
85
|
+
clientOptions: T,
|
|
86
|
+
options: O,
|
|
87
|
+
deliveryOptions?: IFileDeliveryOptions,
|
|
88
|
+
): Promise<string>;
|
|
89
|
+
download?(
|
|
90
|
+
file: EntityFile,
|
|
91
|
+
clientOptions: T,
|
|
92
|
+
options: O,
|
|
93
|
+
deliveryOptions?: IFileDeliveryOptions,
|
|
94
|
+
): Promise<IFileDownloadResult>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
declare module 'vona-module-a-onion' {
|
|
98
|
+
export interface BeanOnion {
|
|
99
|
+
fileProvider: ServiceOnion<IFileProviderRecord>;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
declare module 'vona' {
|
|
104
|
+
export interface ConfigOnions {
|
|
105
|
+
fileProvider: OmitNever<IFileProviderRecord>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface IBeanSceneRecord {
|
|
109
|
+
fileProvider: never;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { OmitNever, VonaContext } from 'vona';
|
|
2
|
+
import type { ServiceOnion } from 'vona-module-a-onion';
|
|
3
|
+
|
|
4
|
+
import type { IFileProviderRecord } from './fileProvider.ts';
|
|
5
|
+
|
|
6
|
+
export interface IFileSceneRecord {}
|
|
7
|
+
|
|
8
|
+
export interface IFileSceneOptionsUpload {
|
|
9
|
+
maxSize?: number;
|
|
10
|
+
mimeTypes?: string[];
|
|
11
|
+
extensions?: string[];
|
|
12
|
+
multiple?: boolean;
|
|
13
|
+
public?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface IDecoratorFileSceneOptionsProvider {
|
|
17
|
+
providerName?: keyof IFileProviderRecord;
|
|
18
|
+
clientName?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type TypeFileSceneOptionsResolver = (
|
|
22
|
+
ctx: VonaContext,
|
|
23
|
+
) => Promise<IDecoratorFileSceneOptionsProvider>;
|
|
24
|
+
|
|
25
|
+
export type TypeDecoratorFileSceneOptionsProvider =
|
|
26
|
+
| TypeFileSceneOptionsResolver
|
|
27
|
+
| IDecoratorFileSceneOptionsProvider;
|
|
28
|
+
|
|
29
|
+
export type TypeFileSceneOptionsMetaResolver = (
|
|
30
|
+
ctx: VonaContext,
|
|
31
|
+
) => Promise<Record<string, any> | undefined> | Record<string, any> | undefined;
|
|
32
|
+
|
|
33
|
+
export interface IDecoratorFileSceneOptions {
|
|
34
|
+
provider?: TypeDecoratorFileSceneOptionsProvider;
|
|
35
|
+
upload?: IFileSceneOptionsUpload;
|
|
36
|
+
meta?: Record<string, any> | TypeFileSceneOptionsMetaResolver;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
declare module 'vona-module-a-onion' {
|
|
40
|
+
export interface BeanOnion {
|
|
41
|
+
fileScene: ServiceOnion<IFileSceneRecord>;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
declare module 'vona' {
|
|
46
|
+
export interface ConfigOnions {
|
|
47
|
+
fileScene: OmitNever<IFileSceneRecord>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface IBeanSceneRecord {
|
|
51
|
+
fileScene: never;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vona-module-file-cloudflare",
|
|
3
|
+
"version": "5.0.3",
|
|
4
|
+
"description": "",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"Vona Module"
|
|
7
|
+
],
|
|
8
|
+
"author": "",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"src"
|
|
12
|
+
],
|
|
13
|
+
"type": "module",
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": [
|
|
17
|
+
"./src/index.ts",
|
|
18
|
+
"./dist/index.d.ts"
|
|
19
|
+
],
|
|
20
|
+
"import": "./src/index.ts",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./package.json": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"clean": "rimraf dist tsconfig.build.tsbuildinfo",
|
|
27
|
+
"tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/vona.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
|
|
28
|
+
"prepublishOnly": "npm run tsc:publish",
|
|
29
|
+
"prepack": "clean-package",
|
|
30
|
+
"postpack": "clean-package restore"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@aws-sdk/client-s3": "^3.883.0",
|
|
34
|
+
"@aws-sdk/s3-request-presigner": "^3.883.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"clean-package": "^2.2.0",
|
|
38
|
+
"rimraf": "^6.1.3"
|
|
39
|
+
},
|
|
40
|
+
"clean-package": {
|
|
41
|
+
"indent": 2,
|
|
42
|
+
"remove": [
|
|
43
|
+
"clean-package",
|
|
44
|
+
"exports.\\..import"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
"title": "file-cloudflare",
|
|
48
|
+
"vonaModule": {
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"a-file": "5.0.0"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// eslint-disable
|
|
2
|
+
/** service: begin */
|
|
3
|
+
export * from '../service/fileCloudflare.ts';
|
|
4
|
+
|
|
5
|
+
import 'vona-module-a-bean';
|
|
6
|
+
declare module 'vona-module-a-bean' {
|
|
7
|
+
|
|
8
|
+
export interface IServiceRecord {
|
|
9
|
+
'file-cloudflare:fileCloudflare': never;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
declare module 'vona-module-file-cloudflare' {
|
|
15
|
+
|
|
16
|
+
export interface ServiceFileCloudflare {
|
|
17
|
+
/** @internal */
|
|
18
|
+
get scope(): ScopeModuleFileCloudflare;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ServiceFileCloudflare {
|
|
22
|
+
get $beanFullName(): 'file-cloudflare.service.fileCloudflare';
|
|
23
|
+
get $onionName(): 'file-cloudflare:fileCloudflare';
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** service: end */
|
|
28
|
+
/** service: begin */
|
|
29
|
+
import type { ServiceFileCloudflare } from '../service/fileCloudflare.ts';
|
|
30
|
+
export interface IModuleService {
|
|
31
|
+
'fileCloudflare': ServiceFileCloudflare;
|
|
32
|
+
}
|
|
33
|
+
/** service: end */
|
|
34
|
+
/** service: begin */
|
|
35
|
+
|
|
36
|
+
import 'vona';
|
|
37
|
+
declare module 'vona' {
|
|
38
|
+
export interface IBeanRecordGeneral {
|
|
39
|
+
'file-cloudflare.service.fileCloudflare': ServiceFileCloudflare;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** service: end */
|
|
43
|
+
/** fileProvider: begin */
|
|
44
|
+
export * from '../bean/fileProvider.cloudflare.ts';
|
|
45
|
+
import type { IFileProviderOptionsCloudflare } from '../bean/fileProvider.cloudflare.ts';
|
|
46
|
+
import 'vona-module-a-file';
|
|
47
|
+
declare module 'vona-module-a-file' {
|
|
48
|
+
|
|
49
|
+
export interface IFileProviderRecord {
|
|
50
|
+
'file-cloudflare:cloudflare': IFileProviderOptionsCloudflare;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
declare module 'vona-module-file-cloudflare' {
|
|
56
|
+
|
|
57
|
+
export interface FileProviderCloudflare {
|
|
58
|
+
/** @internal */
|
|
59
|
+
get scope(): ScopeModuleFileCloudflare;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface FileProviderCloudflare {
|
|
63
|
+
get $beanFullName(): 'file-cloudflare.fileProvider.cloudflare';
|
|
64
|
+
get $onionName(): 'file-cloudflare:cloudflare';
|
|
65
|
+
get $onionOptions(): IFileProviderOptionsCloudflare;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** fileProvider: end */
|
|
69
|
+
/** fileProvider: begin */
|
|
70
|
+
import type { FileProviderCloudflare } from '../bean/fileProvider.cloudflare.ts';
|
|
71
|
+
export interface IModuleFileProvider {
|
|
72
|
+
'cloudflare': FileProviderCloudflare;
|
|
73
|
+
}
|
|
74
|
+
/** fileProvider: end */
|
|
75
|
+
/** scope: begin */
|
|
76
|
+
import { BeanScopeBase, type BeanScopeUtil } from 'vona';
|
|
77
|
+
import { Scope } from 'vona-module-a-bean';
|
|
78
|
+
|
|
79
|
+
@Scope()
|
|
80
|
+
export class ScopeModuleFileCloudflare extends BeanScopeBase {}
|
|
81
|
+
|
|
82
|
+
export interface ScopeModuleFileCloudflare {
|
|
83
|
+
util: BeanScopeUtil;
|
|
84
|
+
service: IModuleService;
|
|
85
|
+
fileProvider: IModuleFileProvider;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
import 'vona';
|
|
89
|
+
declare module 'vona' {
|
|
90
|
+
export interface IBeanScopeRecord {
|
|
91
|
+
'file-cloudflare': ScopeModuleFileCloudflare;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface IBeanScopeContainer {
|
|
95
|
+
fileCloudflare: ScopeModuleFileCloudflare;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
/** scope: end */
|
package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/bean/fileProvider.cloudflare.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EntityFile,
|
|
3
|
+
IDecoratorFileProviderOptions,
|
|
4
|
+
IFileDeliveryOptions,
|
|
5
|
+
IFileDirectUploadInput,
|
|
6
|
+
IFileDownloadResult,
|
|
7
|
+
IFileProviderClientOptions,
|
|
8
|
+
IFileProviderClientRecord,
|
|
9
|
+
IFileProviderExecute,
|
|
10
|
+
IFileProviderResource,
|
|
11
|
+
IFileUploadInput,
|
|
12
|
+
IFileUploadUrlInput,
|
|
13
|
+
} from 'vona-module-a-file';
|
|
14
|
+
|
|
15
|
+
import { BeanBase } from 'vona';
|
|
16
|
+
import { FileProvider } from 'vona-module-a-file';
|
|
17
|
+
|
|
18
|
+
export interface IFileProviderCloudflareClientRecord extends IFileProviderClientRecord {}
|
|
19
|
+
|
|
20
|
+
export interface IFileProviderCloudflareClientOptions extends IFileProviderClientOptions {
|
|
21
|
+
endpoint?: string;
|
|
22
|
+
region?: string;
|
|
23
|
+
accessKeyId?: string;
|
|
24
|
+
secretAccessKey?: string;
|
|
25
|
+
forcePathStyle?: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface IFileProviderOptionsCloudflare extends IDecoratorFileProviderOptions<
|
|
29
|
+
IFileProviderCloudflareClientRecord,
|
|
30
|
+
IFileProviderCloudflareClientOptions
|
|
31
|
+
> {}
|
|
32
|
+
|
|
33
|
+
@FileProvider<IFileProviderOptionsCloudflare>({
|
|
34
|
+
base: {
|
|
35
|
+
signedDeliveryKind: 'provider',
|
|
36
|
+
public: false,
|
|
37
|
+
region: 'auto',
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
export class FileProviderCloudflare
|
|
41
|
+
extends BeanBase
|
|
42
|
+
implements
|
|
43
|
+
IFileProviderExecute<IFileProviderCloudflareClientOptions, IFileProviderOptionsCloudflare>
|
|
44
|
+
{
|
|
45
|
+
async upload(
|
|
46
|
+
input: IFileUploadInput,
|
|
47
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
48
|
+
_options: IFileProviderOptionsCloudflare,
|
|
49
|
+
): Promise<IFileProviderResource> {
|
|
50
|
+
return await this.scope.service.fileCloudflare.upload(input, clientOptions);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async uploadUrl(
|
|
54
|
+
input: IFileUploadUrlInput,
|
|
55
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
56
|
+
_options: IFileProviderOptionsCloudflare,
|
|
57
|
+
) {
|
|
58
|
+
return await this.scope.service.fileCloudflare.uploadUrl(input, clientOptions);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async createDirectUpload(
|
|
62
|
+
input: IFileDirectUploadInput,
|
|
63
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
64
|
+
_options: IFileProviderOptionsCloudflare,
|
|
65
|
+
) {
|
|
66
|
+
return await this.scope.service.fileCloudflare.createDirectUpload(input, clientOptions);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async get(
|
|
70
|
+
file: EntityFile,
|
|
71
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
72
|
+
_options: IFileProviderOptionsCloudflare,
|
|
73
|
+
) {
|
|
74
|
+
return {
|
|
75
|
+
resourceId: file.resourceId,
|
|
76
|
+
bucket: file.bucket ?? clientOptions.bucket,
|
|
77
|
+
objectKey: file.objectKey,
|
|
78
|
+
filename: file.filename,
|
|
79
|
+
contentType: file.contentType,
|
|
80
|
+
size: file.size,
|
|
81
|
+
etag: file.etag,
|
|
82
|
+
public: file.public ?? clientOptions.public,
|
|
83
|
+
meta: file.meta,
|
|
84
|
+
deliveryBaseUrl: file.deliveryBaseUrl ?? clientOptions.deliveryBaseUrl,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async delete(
|
|
89
|
+
file: EntityFile,
|
|
90
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
91
|
+
_options: IFileProviderOptionsCloudflare,
|
|
92
|
+
) {
|
|
93
|
+
await this.scope.service.fileCloudflare.remove(file, clientOptions);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async getDownloadUrl(
|
|
97
|
+
file: EntityFile,
|
|
98
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
99
|
+
_options: IFileProviderOptionsCloudflare,
|
|
100
|
+
deliveryOptions?: IFileDeliveryOptions,
|
|
101
|
+
) {
|
|
102
|
+
return await this.scope.service.fileCloudflare.getDownloadUrl(
|
|
103
|
+
file,
|
|
104
|
+
clientOptions,
|
|
105
|
+
deliveryOptions,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
async download(
|
|
110
|
+
file: EntityFile,
|
|
111
|
+
clientOptions: IFileProviderCloudflareClientOptions,
|
|
112
|
+
options: IFileProviderOptionsCloudflare,
|
|
113
|
+
deliveryOptions?: IFileDeliveryOptions,
|
|
114
|
+
): Promise<IFileDownloadResult> {
|
|
115
|
+
return {
|
|
116
|
+
kind: 'url',
|
|
117
|
+
url: await this.getDownloadUrl(file, clientOptions, options, deliveryOptions),
|
|
118
|
+
filename: file.filename,
|
|
119
|
+
contentType: file.contentType,
|
|
120
|
+
signed: !!(deliveryOptions?.signed ?? !(file.public ?? clientOptions.public)),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './.metadata/index.ts';
|