Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 59 additions & 7 deletions lib/adapters/REST/endpoints/asset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,17 @@ import type { AxiosInstance } from 'contentful-sdk-core'
import { errorHandler } from 'contentful-sdk-core'
import copy from 'fast-copy'
import type { SetOptional } from 'type-fest'
import type { CollectionProp, GetSpaceEnvironmentParams, QueryParams } from '../../../common-types'
import type {
CollectionProp,
CreateReleaseAssetParams,
CreateWithFilesReleaseAssetParams,
CreateWithIdReleaseAssetParams,
GetReleaseAssetParams,
GetSpaceEnvironmentParams,
Link,
QueryParams,
UpdateReleaseAssetParams,
} from '../../../common-types'
import type {
AssetFileProp,
AssetProcessingForLocale,
Expand All @@ -15,13 +25,18 @@ import type { RestEndpoint } from '../types'
import * as raw from './raw'
import { create as createUpload } from './upload'
import { normalizeSelect } from './utils'
import * as releaseAsset from './release-asset'

export const get: RestEndpoint<'Asset', 'get'> = (
http: AxiosInstance,
params: GetSpaceEnvironmentParams & { assetId: string } & QueryParams,
params: GetSpaceEnvironmentParams & { assetId: string; releaseId?: string } & QueryParams,
rawData?: unknown,
headers?: RawAxiosRequestHeaders
) => {
if (params.releaseId) {
return releaseAsset.get(http, params as GetReleaseAssetParams)
}

return raw.get<AssetProps>(
http,
`/spaces/${params.spaceId}/environments/${params.environmentId}/assets/${params.assetId}`,
Expand Down Expand Up @@ -50,10 +65,14 @@ export const getPublished: RestEndpoint<'Asset', 'getPublished'> = (

export const getMany: RestEndpoint<'Asset', 'getMany'> = (
http: AxiosInstance,
params: GetSpaceEnvironmentParams & QueryParams,
params: GetSpaceEnvironmentParams & QueryParams & { releaseId?: string },
rawData?: unknown,
headers?: RawAxiosRequestHeaders
) => {
if (params.releaseId) {
return releaseAsset.getMany(http, params as GetReleaseAssetParams)
}

return raw.get<CollectionProp<AssetProps>>(
http,
`/spaces/${params.spaceId}/environments/${params.environmentId}/assets`,
Expand All @@ -66,10 +85,14 @@ export const getMany: RestEndpoint<'Asset', 'getMany'> = (

export const update: RestEndpoint<'Asset', 'update'> = (
http: AxiosInstance,
params: GetSpaceEnvironmentParams & { assetId: string },
params: GetSpaceEnvironmentParams & { assetId: string; releaseId?: string },
rawData: AssetProps,
headers?: RawAxiosRequestHeaders
) => {
if (params.releaseId) {
return releaseAsset.update(http, params as UpdateReleaseAssetParams, rawData, headers ?? {})
}

const data: SetOptional<typeof rawData, 'sys'> = copy(rawData)
delete data.sys
return raw.put<AssetProps>(
Expand Down Expand Up @@ -161,9 +184,13 @@ export const unarchive: RestEndpoint<'Asset', 'unarchive'> = (

export const create: RestEndpoint<'Asset', 'create'> = (
http: AxiosInstance,
params: GetSpaceEnvironmentParams,
params: GetSpaceEnvironmentParams & { releaseId?: string },
rawData: CreateAssetProps
) => {
if (params.releaseId) {
return releaseAsset.create(http, params as CreateReleaseAssetParams, rawData, {})
}

const data = copy(rawData)

return raw.post<AssetProps>(
Expand All @@ -175,9 +202,13 @@ export const create: RestEndpoint<'Asset', 'create'> = (

export const createWithId: RestEndpoint<'Asset', 'createWithId'> = (
http: AxiosInstance,
params: GetSpaceEnvironmentParams & { assetId: string },
params: GetSpaceEnvironmentParams & { assetId: string; releaseId?: string },
rawData: CreateAssetProps
) => {
if (params.releaseId) {
return releaseAsset.createWithId(http, params as CreateWithIdReleaseAssetParams, rawData, {})
}

const data = copy(rawData)

return raw.put<AssetProps>(
Expand All @@ -189,9 +220,13 @@ export const createWithId: RestEndpoint<'Asset', 'createWithId'> = (

export const createFromFiles: RestEndpoint<'Asset', 'createFromFiles'> = async (
http: AxiosInstance,
params: GetSpaceEnvironmentParams & { uploadTimeout?: number },
params: GetSpaceEnvironmentParams & { uploadTimeout?: number; releaseId?: string },
data: Omit<AssetFileProp, 'sys'>
) => {
if (params.releaseId) {
return releaseAsset.createFromFiles(http, params as CreateWithFilesReleaseAssetParams, data, {})
}

const httpUpload = getUploadHttpClient(http, { uploadTimeout: params.uploadTimeout })

const { file } = data.fields
Expand Down Expand Up @@ -293,6 +328,15 @@ export const processForLocale: RestEndpoint<'Asset', 'processForLocale'> = async
options?: AssetProcessingForLocale
}
) => {
if (asset.sys.release) {
return releaseAsset.processForLocale(http, {
asset: asset as AssetProps<{ release: Link<'Release'> }>,
locale,
options: { processingCheckRetries, processingCheckWait },
...params,
})
}

return raw
.put<AssetProps>(
http,
Expand Down Expand Up @@ -333,6 +377,14 @@ export const processForAllLocales: RestEndpoint<'Asset', 'processForAllLocales'>
...params
}: GetSpaceEnvironmentParams & { asset: AssetProps; options?: AssetProcessingForLocale }
) => {
if (asset.sys.release) {
return releaseAsset.processForAllLocales(http, {
asset: asset as AssetProps<{ release: Link<'Release'> }>,
options,
...params,
})
}

const locales = Object.keys(asset.fields.file || {})

let mostUpToDateAssetVersion: AssetProps = asset
Expand Down
14 changes: 12 additions & 2 deletions lib/adapters/REST/endpoints/entry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import type {
UpdateEntryParams,
UpdateReleaseEntryParams,
CreateReleaseEntryParams,
GetManyReleaseEntryParams,
GetReleaseEntryParams,
} from '../../../common-types'
import type { CreateEntryProps, EntryProps, EntryReferenceProps } from '../../../entities/entry'
import type { RestEndpoint } from '../types'
Expand All @@ -26,10 +28,14 @@ import * as releaseEntry from './release-entry'

export const get: RestEndpoint<'Entry', 'get'> = <T extends KeyValueMap = KeyValueMap>(
http: AxiosInstance,
params: GetEntryParams & QueryParams,
params: GetEntryParams & QueryParams & { releaseId?: string },
rawData?: unknown,
headers?: RawAxiosRequestHeaders
) => {
if (params.releaseId) {
return releaseEntry.get(http, params as GetReleaseEntryParams)
}

return raw.get<EntryProps<T>>(
http,
`/spaces/${params.spaceId}/environments/${params.environmentId}/entries/${params.entryId}`,
Expand Down Expand Up @@ -60,10 +66,14 @@ export const getPublished: RestEndpoint<'Entry', 'getPublished'> = <

export const getMany: RestEndpoint<'Entry', 'getMany'> = <T extends KeyValueMap = KeyValueMap>(
http: AxiosInstance,
params: GetManyEntryParams & QueryParams,
params: GetManyEntryParams & QueryParams & { releaseId?: string },
rawData?: unknown,
headers?: RawAxiosRequestHeaders
) => {
if (params.releaseId) {
return releaseEntry.getMany(http, params as GetManyReleaseEntryParams)
}

return raw.get<CollectionProp<EntryProps<T>>>(
http,
`/spaces/${params.spaceId}/environments/${params.environmentId}/entries`,
Expand Down
2 changes: 2 additions & 0 deletions lib/adapters/REST/endpoints/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import * as OAuthApplication from './oauth-application'
import * as PersonalAccessToken from './personal-access-token'
import * as PreviewApiKey from './preview-api-key'
import * as Release from './release'
import * as ReleaseAsset from './release-asset'
import * as ReleaseEntry from './release-entry'
import * as ReleaseAction from './release-action'
import * as Resource from './resource'
Expand Down Expand Up @@ -108,6 +109,7 @@ export default {
AccessToken,
PreviewApiKey,
Release,
ReleaseAsset,
ReleaseEntry,
ReleaseAction,
Resource,
Expand Down
Loading