Skip to content

Commit d5f7da2

Browse files
AndrewKushnirPawel Kozlowski
authored andcommitted
feat(common): define public API surface for NgOptimizedImage directive (#47082)
This commit annotates a set of symbols exposed by the NgOptimizedImage directive as a public API. PR Close #47082
1 parent d3c6c37 commit d5f7da2

File tree

10 files changed

+104
-1
lines changed

10 files changed

+104
-1
lines changed

goldens/public-api/common/index.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import { NgModuleFactory } from '@angular/core';
1717
import { Observable } from 'rxjs';
1818
import { OnChanges } from '@angular/core';
1919
import { OnDestroy } from '@angular/core';
20+
import { OnInit } from '@angular/core';
2021
import { PipeTransform } from '@angular/core';
22+
import { Provider } from '@angular/core';
2123
import { Renderer2 } from '@angular/core';
2224
import { SimpleChanges } from '@angular/core';
2325
import { Subscribable } from 'rxjs';
@@ -256,6 +258,20 @@ export class I18nSelectPipe implements PipeTransform {
256258
static ɵpipe: i0.ɵɵPipeDeclaration<I18nSelectPipe, "i18nSelect", true>;
257259
}
258260

261+
// @public
262+
export const IMAGE_LOADER: InjectionToken<ImageLoader>;
263+
264+
// @public
265+
export type ImageLoader = (config: ImageLoaderConfig) => string;
266+
267+
// @public
268+
export interface ImageLoaderConfig {
269+
// (undocumented)
270+
src: string;
271+
// (undocumented)
272+
width?: number;
273+
}
274+
259275
// @public
260276
export function isPlatformBrowser(platformId: Object): boolean;
261277

@@ -517,6 +533,35 @@ export abstract class NgLocalization {
517533
static ɵprov: i0.ɵɵInjectableDeclaration<NgLocalization>;
518534
}
519535

536+
// @public
537+
export class NgOptimizedImage implements OnInit, OnChanges, OnDestroy {
538+
constructor(imageLoader: ImageLoader, renderer: Renderer2, imgElement: ElementRef, injector: Injector);
539+
set height(value: string | number | undefined);
540+
// (undocumented)
541+
get height(): number | undefined;
542+
loading?: string;
543+
// (undocumented)
544+
ngOnChanges(changes: SimpleChanges): void;
545+
// (undocumented)
546+
ngOnDestroy(): void;
547+
// (undocumented)
548+
ngOnInit(): void;
549+
set priority(value: string | boolean | undefined);
550+
// (undocumented)
551+
get priority(): boolean;
552+
rawSrc: string;
553+
rawSrcset: string;
554+
// (undocumented)
555+
srcset?: string;
556+
set width(value: string | number | undefined);
557+
// (undocumented)
558+
get width(): number | undefined;
559+
// (undocumented)
560+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgOptimizedImage, "img[rawSrc]", never, { "rawSrc": "rawSrc"; "rawSrcset": "rawSrcset"; "width": "width"; "height": "height"; "loading": "loading"; "priority": "priority"; "src": "src"; "srcset": "srcset"; }, {}, never, never, true>;
561+
// (undocumented)
562+
static ɵfac: i0.ɵɵFactoryDeclaration<NgOptimizedImage, never>;
563+
}
564+
520565
// @public
521566
export class NgPlural {
522567
constructor(_localization: NgLocalization);
@@ -743,6 +788,29 @@ interface PopStateEvent_2 {
743788
}
744789
export { PopStateEvent_2 as PopStateEvent }
745790

791+
// @public
792+
export const PRECONNECT_CHECK_BLOCKLIST: InjectionToken<(string | string[])[]>;
793+
794+
// @public
795+
export const provideCloudflareLoader: (path: string, options?: {
796+
ensurePreconnect?: boolean | undefined;
797+
}) => Provider[];
798+
799+
// @public
800+
export const provideCloudinaryLoader: (path: string, options?: {
801+
ensurePreconnect?: boolean | undefined;
802+
}) => Provider[];
803+
804+
// @public
805+
export const provideImageKitLoader: (path: string, options?: {
806+
ensurePreconnect?: boolean | undefined;
807+
}) => Provider[];
808+
809+
// @public
810+
export const provideImgixLoader: (path: string, options?: {
811+
ensurePreconnect?: boolean | undefined;
812+
}) => Provider[];
813+
746814
// @public
747815
export function registerLocaleData(data: any, localeId?: string | any, extraData?: any): void;
748816

packages/common/src/common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ export {PLATFORM_BROWSER_ID as ɵPLATFORM_BROWSER_ID, PLATFORM_SERVER_ID as ɵPL
2727
export {VERSION} from './version';
2828
export {ViewportScroller, NullViewportScroller as ɵNullViewportScroller} from './viewport_scroller';
2929
export {XhrFactory} from './xhr';
30+
export * from './directives/ng_optimized_image';

packages/common/src/directives/ng_optimized_image/image_loaders/cloudflare_loader.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ import {createImageLoader, ImageLoaderConfig} from './image_loader';
1717
* @param path Your domain name
1818
* e.g. https://mysite.com
1919
* @returns Provider that provides an ImageLoader function
20+
*
21+
* @publicApi
22+
* @developerPreview
2023
*/
2124
export const provideCloudflareLoader = createImageLoader(
2225
createCloudflareURL,

packages/common/src/directives/ng_optimized_image/image_loaders/cloudinary_loader.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ import {createImageLoader, ImageLoaderConfig} from './image_loader';
2222
* should verify that there is a corresponding `<link rel="preconnect">`
2323
* present in the document's `<head>`.
2424
* @returns Set of providers to configure the Cloudinary loader.
25+
*
26+
* @publicApi
27+
* @developerPreview
2528
*/
2629
export const provideCloudinaryLoader = createImageLoader(
2730
createCloudinaryURL,

packages/common/src/directives/ng_optimized_image/image_loaders/image_loader.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ import {isAbsoluteURL, isValidPath, normalizePath, normalizeSrc} from '../util';
1414

1515
/**
1616
* Config options recognized by the image loader function.
17+
*
18+
* @publicApi
19+
* @developerPreview
1720
*/
1821
export interface ImageLoaderConfig {
1922
// Name of the image to be added to the image request URL
@@ -24,6 +27,9 @@ export interface ImageLoaderConfig {
2427

2528
/**
2629
* Represents an image loader function.
30+
*
31+
* @publicApi
32+
* @developerPreview
2733
*/
2834
export type ImageLoader = (config: ImageLoaderConfig) => string;
2935

@@ -36,6 +42,9 @@ const noopImageLoader = (config: ImageLoaderConfig) => config.src;
3642
/**
3743
* Special token that allows to configure a function that will be used to produce an image URL based
3844
* on the specified input.
45+
*
46+
* @publicApi
47+
* @developerPreview
3948
*/
4049
export const IMAGE_LOADER = new InjectionToken<ImageLoader>('ImageLoader', {
4150
providedIn: 'root',

packages/common/src/directives/ng_optimized_image/image_loaders/imagekit_loader.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ import {createImageLoader, ImageLoaderConfig} from './image_loader';
2121
* should verify that there is a corresponding `<link rel="preconnect">`
2222
* present in the document's `<head>`.
2323
* @returns Set of providers to configure the ImageKit loader.
24+
*
25+
* @publicApi
26+
* @developerPreview
2427
*/
2528
export const provideImageKitLoader = createImageLoader(
2629
createImagekitURL,

packages/common/src/directives/ng_optimized_image/image_loaders/imgix_loader.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import {createImageLoader, ImageLoaderConfig} from './image_loader';
1919
* should verify that there is a corresponding `<link rel="preconnect">`
2020
* present in the document's `<head>`.
2121
* @returns Set of providers to configure the Imgix loader.
22+
*
23+
* @publicApi
24+
* @developerPreview
2225
*/
2326
export const provideImgixLoader =
2427
createImageLoader(createImgixURL, ngDevMode ? ['https://somepath.imgix.net/'] : undefined);

packages/common/src/directives/ng_optimized_image/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
* Use of this source code is governed by an MIT-style license that can be
66
* found in the LICENSE file at https://angular.io/license
77
*/
8+
9+
// These exports represent the set of symbols exposed as a public API.
10+
export {provideCloudflareLoader} from './image_loaders/cloudflare_loader';
11+
export {provideCloudinaryLoader} from './image_loaders/cloudinary_loader';
812
export {IMAGE_LOADER, ImageLoader, ImageLoaderConfig} from './image_loaders/image_loader';
13+
export {provideImageKitLoader} from './image_loaders/imagekit_loader';
914
export {provideImgixLoader} from './image_loaders/imgix_loader';
1015
export {NgOptimizedImage} from './ng_optimized_image';
1116
export {PRECONNECT_CHECK_BLOCKLIST} from './preconnect_link_checker';

packages/common/src/directives/ng_optimized_image/ng_optimized_image.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ const ASPECT_RATIO_TOLERANCE = .1;
6161
*
6262
* @usageNotes
6363
* TODO: add Image directive usage notes.
64+
*
65+
* @publicApi
66+
* @developerPreview
6467
*/
6568
@Directive({
6669
standalone: true,
@@ -95,8 +98,10 @@ export class NgOptimizedImage implements OnInit, OnChanges, OnDestroy {
9598
* descriptors to generate the final `srcset` property of the image.
9699
*
97100
* Example:
101+
* ```
98102
* <img rawSrc="hello.jpg" rawSrcset="100w, 200w" /> =>
99103
* <img src="path/hello.jpg" srcset="path/hello.jpg?w=100 100w, path/hello.jpg?w=200 200w" />
104+
* ```
100105
*/
101106
@Input() rawSrcset!: string;
102107

@@ -144,7 +149,7 @@ export class NgOptimizedImage implements OnInit, OnChanges, OnDestroy {
144149
}
145150

146151
/**
147-
* Get a value of the `src` and `srcset` if they're set on a host <img> element.
152+
* Get a value of the `src` and `srcset` if they're set on a host `<img>` element.
148153
* These inputs are needed to verify that there are no conflicting sources provided
149154
* at the same time (e.g. `src` and `rawSrc` together or `srcset` and `rawSrcset`,
150155
* thus causing an ambiguity on which src to use) and that images

packages/common/src/directives/ng_optimized_image/preconnect_link_checker.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ const INTERNAL_PRECONNECT_CHECK_BLOCKLIST = new Set(['localhost', '127.0.0.1', '
3232
* {provide: PRECONNECT_CHECK_BLOCKLIST, multi: true,
3333
* useValue: ['https://your-domain-1.com', 'https://your-domain-2.com']}
3434
* ```
35+
*
36+
* @publicApi
37+
* @developerPreview
3538
*/
3639
export const PRECONNECT_CHECK_BLOCKLIST =
3740
new InjectionToken<Array<string|string[]>>('PRECONNECT_CHECK_BLOCKLIST');

0 commit comments

Comments
 (0)