diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 65f558e..656a2ef 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.0.0" + ".": "2.1.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 96e30e1..d6c1bf6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 43 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/imagekit-inc%2Fimagekit-c7ad6f552b38f2145781847f8b390fa1ec43068d64e45a33012a97a9299edc10.yml -openapi_spec_hash: 50f281e91210ad5018ac7e4eee216f56 -config_hash: 74a8263b80c732a2b016177e7d56bb9c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/imagekit-inc%2Fimagekit-9d184cb502ab32a85db2889c796cdfebe812f2a55a604df79c85dd4b5e7e2add.yml +openapi_spec_hash: a9aa620376fce66532c84f9364209b0b +config_hash: eb4cf65a4c6b26a2901076eff5810d5d diff --git a/CHANGELOG.md b/CHANGELOG.md index 488241b..304a30e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 2.1.0 (2025-11-03) + +Full Changelog: [v2.0.0...v2.1.0](https://github.com/imagekit-developer/imagekit-go/compare/v2.0.0...v2.1.0) + +### Features + +* **api:** add GetImageAttributesOptions and ResponsiveImageAttributes schemas; update resource references in main.yaml; remove dummy endpoint ([41072da](https://github.com/imagekit-developer/imagekit-go/commit/41072da63cd2ba891a911d932af3bc8b70c90588)) +* **api:** fix go sdk breaking changes ([6cbddff](https://github.com/imagekit-developer/imagekit-go/commit/6cbddffab95c89b964fc29ce119ceb70d7ebded5)) + + +### Bug Fixes + +* **docs:** update go get command to include version path in README.md ([d7d4c82](https://github.com/imagekit-developer/imagekit-go/commit/d7d4c829ebccafd1242d79a03651f1189c9f24d0)) + + +### Chores + +* **internal:** grammar fix (it's -> its) ([e35e192](https://github.com/imagekit-developer/imagekit-go/commit/e35e1922f7ad2541ed116db557bcedd8c9c088de)) + ## 2.0.0 (2025-10-05) Full Changelog: [v0.0.1...v2.0.0](https://github.com/imagekit-developer/imagekit-go/compare/v0.0.1...v2.0.0) diff --git a/README.md b/README.md index 58286aa..9e5488d 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Or to pin the version: ```sh -go get -u 'github.com/imagekit-developer/imagekit-go@v2.0.0' +go get -u 'github.com/imagekit-developer/imagekit-go/v2@v2.1.0' ``` @@ -167,7 +167,7 @@ custom := param.Override[imagekit.FooParams](12) ### Request unions -Unions are represented as a struct with fields prefixed by "Of" for each of it's variants, +Unions are represented as a struct with fields prefixed by "Of" for each of its variants, only one field can be non-zero. The non-zero field will be serialized. Sub-properties of the union can be accessed via methods on the union struct. diff --git a/aliases.go b/aliases.go index be8fe53..33ed8d6 100644 --- a/aliases.go +++ b/aliases.go @@ -40,6 +40,13 @@ type ExtensionAutoTaggingParam = shared.ExtensionAutoTaggingParam // This is an alias to an internal type. type ExtensionAIAutoDescriptionParam = shared.ExtensionAIAutoDescriptionParam +// Options for generating responsive image attributes including `src`, `srcSet`, +// and `sizes` for HTML `` elements. This schema extends `SrcOptions` to add +// support for responsive image generation with breakpoints. +// +// This is an alias to an internal type. +type GetImageAttributesOptionsParam = shared.GetImageAttributesOptionsParam + // This is an alias to an internal type. type ImageOverlayParam = shared.ImageOverlayParam @@ -133,6 +140,12 @@ type OverlayTimingEndUnionParam = shared.OverlayTimingEndUnionParam // This is an alias to an internal type. type OverlayTimingStartUnionParam = shared.OverlayTimingStartUnionParam +// Resulting set of attributes suitable for an HTML `` element. Useful for +// enabling responsive image loading with `srcSet` and `sizes`. +// +// This is an alias to an internal type. +type ResponsiveImageAttributesParam = shared.ResponsiveImageAttributesParam + // This is an alias to an internal type. type SolidColorOverlayParam = shared.SolidColorOverlayParam diff --git a/api.md b/api.md index d1fe4eb..2589aa8 100644 --- a/api.md +++ b/api.md @@ -2,10 +2,12 @@ - shared.BaseOverlayParam - shared.ExtensionsParam +- shared.GetImageAttributesOptionsParam - shared.ImageOverlayParam - shared.OverlayUnionParam - shared.OverlayPositionParam - shared.OverlayTimingParam +- shared.ResponsiveImageAttributesParam - shared.SolidColorOverlayParam - shared.SolidColorOverlayTransformationParam - shared.SrcOptionsParam @@ -18,6 +20,12 @@ - shared.TransformationPosition - shared.VideoOverlayParam +# Dummy + +Methods: + +- client.Dummy.New(ctx context.Context, body imagekit.DummyNewParams) error + # CustomMetadataFields Response Types: diff --git a/dummy.go b/dummy.go index 9f26efb..780af86 100644 --- a/dummy.go +++ b/dummy.go @@ -48,15 +48,22 @@ type DummyNewParams struct { BaseOverlay shared.BaseOverlayParam `json:"baseOverlay,omitzero"` // Array of extensions to be applied to the asset. Each extension can be configured // with specific parameters based on the extension type. - Extensions shared.ExtensionsParam `json:"extensions,omitzero"` - ImageOverlay shared.ImageOverlayParam `json:"imageOverlay,omitzero"` + Extensions shared.ExtensionsParam `json:"extensions,omitzero"` + // Options for generating responsive image attributes including `src`, `srcSet`, + // and `sizes` for HTML `` elements. This schema extends `SrcOptions` to add + // support for responsive image generation with breakpoints. + GetImageAttributesOptions shared.GetImageAttributesOptionsParam `json:"getImageAttributesOptions,omitzero"` + ImageOverlay shared.ImageOverlayParam `json:"imageOverlay,omitzero"` // Specifies an overlay to be applied on the parent image or video. ImageKit // supports overlays including images, text, videos, subtitles, and solid colors. // See // [Overlay using layers](https://imagekit.io/docs/transformations#overlay-using-layers). - Overlay shared.OverlayUnionParam `json:"overlay,omitzero"` - OverlayPosition shared.OverlayPositionParam `json:"overlayPosition,omitzero"` - OverlayTiming shared.OverlayTimingParam `json:"overlayTiming,omitzero"` + Overlay shared.OverlayUnionParam `json:"overlay,omitzero"` + OverlayPosition shared.OverlayPositionParam `json:"overlayPosition,omitzero"` + OverlayTiming shared.OverlayTimingParam `json:"overlayTiming,omitzero"` + // Resulting set of attributes suitable for an HTML `` element. Useful for + // enabling responsive image loading with `srcSet` and `sizes`. + ResponsiveImageAttributes shared.ResponsiveImageAttributesParam `json:"responsiveImageAttributes,omitzero"` SolidColorOverlay shared.SolidColorOverlayParam `json:"solidColorOverlay,omitzero"` SolidColorOverlayTransformation shared.SolidColorOverlayTransformationParam `json:"solidColorOverlayTransformation,omitzero"` // Options for generating ImageKit URLs with transformations. See the diff --git a/dummy_test.go b/dummy_test.go index 0548e6a..96a9a1c 100644 --- a/dummy_test.go +++ b/dummy_test.go @@ -69,6 +69,168 @@ func TestDummyNewWithOptionalParams(t *testing.T) { }, shared.ExtensionUnionParam{ OfAIAutoDescription: &shared.ExtensionAIAutoDescriptionParam{}, }}, + GetImageAttributesOptions: shared.GetImageAttributesOptionsParam{ + SrcOptionsParam: shared.SrcOptionsParam{ + Src: "/my-image.jpg", + URLEndpoint: "https://ik.imagekit.io/demo", + ExpiresIn: imagekit.Float(0), + QueryParameters: map[string]string{ + "foo": "string", + }, + Signed: imagekit.Bool(true), + Transformation: []shared.TransformationParam{{ + AIChangeBackground: imagekit.String("aiChangeBackground"), + AIDropShadow: shared.TransformationAIDropShadowUnionParam{ + OfTransformationAIDropShadowBoolean: imagekit.Bool(true), + }, + AIEdit: imagekit.String("aiEdit"), + AIRemoveBackground: true, + AIRemoveBackgroundExternal: true, + AIRetouch: true, + AIUpscale: true, + AIVariation: true, + AspectRatio: shared.TransformationAspectRatioUnionParam{ + OfString: imagekit.String("4:3"), + }, + AudioCodec: shared.TransformationAudioCodecAac, + Background: imagekit.String("red"), + Blur: imagekit.Float(10), + Border: imagekit.String("5_FF0000"), + ColorProfile: imagekit.Bool(true), + ContrastStretch: true, + Crop: shared.TransformationCropForce, + CropMode: shared.TransformationCropModePadResize, + DefaultImage: imagekit.String("defaultImage"), + Dpr: imagekit.Float(2), + Duration: shared.TransformationDurationUnionParam{ + OfFloat: imagekit.Float(0), + }, + EndOffset: shared.TransformationEndOffsetUnionParam{ + OfFloat: imagekit.Float(0), + }, + Flip: shared.TransformationFlipH, + Focus: imagekit.String("center"), + Format: shared.TransformationFormatAuto, + Gradient: shared.TransformationGradientUnionParam{ + OfTransformationGradientBoolean: imagekit.Bool(true), + }, + Grayscale: true, + Height: shared.TransformationHeightUnionParam{ + OfFloat: imagekit.Float(200), + }, + Lossless: imagekit.Bool(true), + Metadata: imagekit.Bool(true), + Named: imagekit.String("named"), + Opacity: imagekit.Float(0), + Original: imagekit.Bool(true), + Overlay: shared.OverlayUnionParam{ + OfText: &shared.TextOverlayParam{ + BaseOverlayParam: shared.BaseOverlayParam{ + Position: shared.OverlayPositionParam{ + Focus: shared.OverlayPositionFocusCenter, + X: shared.OverlayPositionXUnionParam{ + OfFloat: imagekit.Float(0), + }, + Y: shared.OverlayPositionYUnionParam{ + OfFloat: imagekit.Float(0), + }, + }, + Timing: shared.OverlayTimingParam{ + Duration: shared.OverlayTimingDurationUnionParam{ + OfFloat: imagekit.Float(0), + }, + End: shared.OverlayTimingEndUnionParam{ + OfFloat: imagekit.Float(0), + }, + Start: shared.OverlayTimingStartUnionParam{ + OfFloat: imagekit.Float(0), + }, + }, + }, + Text: "text", + Encoding: "auto", + Transformation: []shared.TextOverlayTransformationParam{{ + Alpha: imagekit.Float(1), + Background: imagekit.String("background"), + Flip: shared.TextOverlayTransformationFlipH, + FontColor: imagekit.String("fontColor"), + FontFamily: imagekit.String("fontFamily"), + FontSize: shared.TextOverlayTransformationFontSizeUnionParam{ + OfFloat: imagekit.Float(0), + }, + InnerAlignment: shared.TextOverlayTransformationInnerAlignmentLeft, + LineHeight: shared.TextOverlayTransformationLineHeightUnionParam{ + OfFloat: imagekit.Float(0), + }, + Padding: shared.TextOverlayTransformationPaddingUnionParam{ + OfFloat: imagekit.Float(0), + }, + Radius: shared.TextOverlayTransformationRadiusUnionParam{ + OfFloat: imagekit.Float(0), + }, + Rotation: shared.TextOverlayTransformationRotationUnionParam{ + OfFloat: imagekit.Float(0), + }, + Typography: imagekit.String("typography"), + Width: shared.TextOverlayTransformationWidthUnionParam{ + OfFloat: imagekit.Float(0), + }, + }}, + }, + }, + Page: shared.TransformationPageUnionParam{ + OfFloat: imagekit.Float(0), + }, + Progressive: imagekit.Bool(true), + Quality: imagekit.Float(80), + Radius: shared.TransformationRadiusUnionParam{ + OfFloat: imagekit.Float(20), + }, + Raw: imagekit.String("raw"), + Rotation: shared.TransformationRotationUnionParam{ + OfFloat: imagekit.Float(90), + }, + Shadow: shared.TransformationShadowUnionParam{ + OfTransformationShadowBoolean: imagekit.Bool(true), + }, + Sharpen: shared.TransformationSharpenUnionParam{ + OfTransformationSharpenBoolean: imagekit.Bool(true), + }, + StartOffset: shared.TransformationStartOffsetUnionParam{ + OfFloat: imagekit.Float(0), + }, + StreamingResolutions: []shared.StreamingResolution{shared.StreamingResolution240}, + Trim: shared.TransformationTrimUnionParam{ + OfTransformationTrimBoolean: imagekit.Bool(true), + }, + UnsharpMask: shared.TransformationUnsharpMaskUnionParam{ + OfTransformationUnsharpMaskBoolean: imagekit.Bool(true), + }, + VideoCodec: shared.TransformationVideoCodecH264, + Width: shared.TransformationWidthUnionParam{ + OfFloat: imagekit.Float(300), + }, + X: shared.TransformationXUnionParam{ + OfFloat: imagekit.Float(0), + }, + XCenter: shared.TransformationXCenterUnionParam{ + OfFloat: imagekit.Float(0), + }, + Y: shared.TransformationYUnionParam{ + OfFloat: imagekit.Float(0), + }, + YCenter: shared.TransformationYCenterUnionParam{ + OfFloat: imagekit.Float(0), + }, + Zoom: imagekit.Float(0), + }}, + TransformationPosition: shared.TransformationPositionPath, + }, + DeviceBreakpoints: []float64{640, 750, 828, 1080, 1200, 1920, 2048, 3840}, + ImageBreakpoints: []float64{16, 32, 48, 64, 96, 128, 256, 384}, + Sizes: imagekit.String("(min-width: 768px) 50vw, 100vw"), + Width: imagekit.Float(400), + }, ImageOverlay: shared.ImageOverlayParam{ BaseOverlayParam: shared.BaseOverlayParam{ Position: shared.OverlayPositionParam{ @@ -316,6 +478,12 @@ func TestDummyNewWithOptionalParams(t *testing.T) { OfFloat: imagekit.Float(0), }, }, + ResponsiveImageAttributes: shared.ResponsiveImageAttributesParam{ + Src: "https://ik.imagekit.io/demo/image.jpg?tr=w-3840", + Sizes: imagekit.String("100vw"), + SrcSet: imagekit.String("https://ik.imagekit.io/demo/image.jpg?tr=w-640 640w, https://ik.imagekit.io/demo/image.jpg?tr=w-1080 1080w, https://ik.imagekit.io/demo/image.jpg?tr=w-1920 1920w"), + Width: imagekit.Float(400), + }, SolidColorOverlay: shared.SolidColorOverlayParam{ BaseOverlayParam: shared.BaseOverlayParam{ Position: shared.OverlayPositionParam{ diff --git a/internal/version.go b/internal/version.go index fef6622..436f832 100644 --- a/internal/version.go +++ b/internal/version.go @@ -2,4 +2,4 @@ package internal -const PackageVersion = "2.0.0" // x-release-please-version +const PackageVersion = "2.1.0" // x-release-please-version diff --git a/packages/respjson/respjson.go b/packages/respjson/respjson.go index cc0088c..9e61c5c 100644 --- a/packages/respjson/respjson.go +++ b/packages/respjson/respjson.go @@ -5,7 +5,7 @@ package respjson // Use [Field.Valid] to check if an optional value was null or omitted. // // A Field will always occur in the following structure, where it -// mirrors the original field in it's parent struct: +// mirrors the original field in its parent struct: // // type ExampleObject struct { // Foo bool `json:"foo"` diff --git a/shared/shared.go b/shared/shared.go index 831548c..a85359a 100644 --- a/shared/shared.go +++ b/shared/shared.go @@ -196,6 +196,47 @@ func (r *ExtensionAIAutoDescriptionParam) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } +// Options for generating responsive image attributes including `src`, `srcSet`, +// and `sizes` for HTML `` elements. This schema extends `SrcOptions` to add +// support for responsive image generation with breakpoints. +type GetImageAttributesOptionsParam struct { + // Custom list of **device-width breakpoints** in pixels. These define common + // screen widths for responsive image generation. + // + // Defaults to `[640, 750, 828, 1080, 1200, 1920, 2048, 3840]`. Sorted + // automatically. + DeviceBreakpoints []float64 `json:"deviceBreakpoints,omitzero"` + // Custom list of **image-specific breakpoints** in pixels. Useful for generating + // small variants (e.g., placeholders or thumbnails). + // + // Merged with `deviceBreakpoints` before calculating `srcSet`. Defaults to + // `[16, 32, 48, 64, 96, 128, 256, 384]`. Sorted automatically. + ImageBreakpoints []float64 `json:"imageBreakpoints,omitzero"` + // The value for the HTML `sizes` attribute (e.g., `"100vw"` or + // `"(min-width:768px) 50vw, 100vw"`). + // + // - If it includes one or more `vw` units, breakpoints smaller than the + // corresponding percentage of the smallest device width are excluded. + // - If it contains no `vw` units, the full breakpoint list is used. + // + // Enables a width-based strategy and generates `w` descriptors in `srcSet`. + Sizes param.Opt[string] `json:"sizes,omitzero"` + // The intended display width of the image in pixels, used **only when the `sizes` + // attribute is not provided**. + // + // Triggers a DPR-based strategy (1x and 2x variants) and generates `x` descriptors + // in `srcSet`. + // + // Ignored if `sizes` is present. + Width param.Opt[float64] `json:"width,omitzero"` + SrcOptionsParam +} + +func (r GetImageAttributesOptionsParam) MarshalJSON() (data []byte, err error) { + type shadow GetImageAttributesOptionsParam + return param.MarshalObject(r, (*shadow)(&r)) +} + type ImageOverlayParam struct { // Specifies the relative path to the image used as an overlay. Input string `json:"input,required"` @@ -623,6 +664,32 @@ func (u *OverlayTimingStartUnionParam) asAny() any { return nil } +// Resulting set of attributes suitable for an HTML `` element. Useful for +// enabling responsive image loading with `srcSet` and `sizes`. +// +// The property Src is required. +type ResponsiveImageAttributesParam struct { + // URL for the _largest_ candidate (assigned to plain `src`). + Src string `json:"src,required" format:"uri"` + // `sizes` returned (or synthesised as `100vw`). The value for the HTML `sizes` + // attribute. + Sizes param.Opt[string] `json:"sizes,omitzero"` + // Candidate set with `w` or `x` descriptors. Multiple image URLs separated by + // commas, each with a descriptor. + SrcSet param.Opt[string] `json:"srcSet,omitzero"` + // Width as a number (if `width` was provided in the input options). + Width param.Opt[float64] `json:"width,omitzero"` + paramObj +} + +func (r ResponsiveImageAttributesParam) MarshalJSON() (data []byte, err error) { + type shadow ResponsiveImageAttributesParam + return param.MarshalObject(r, (*shadow)(&r)) +} +func (r *ResponsiveImageAttributesParam) UnmarshalJSON(data []byte) error { + return apijson.UnmarshalRoot(data, r) +} + type SolidColorOverlayParam struct { // Specifies the color of the block using an RGB hex code (e.g., `FF0000`), an RGBA // code (e.g., `FFAABB50`), or a color name (e.g., `red`). If an 8-character value