diff --git a/projects/ngx-meta/api-extractor/ngx-meta.api.md b/projects/ngx-meta/api-extractor/ngx-meta.api.md index 4f96ef56..b7596d9f 100644 --- a/projects/ngx-meta/api-extractor/ngx-meta.api.md +++ b/projects/ngx-meta/api-extractor/ngx-meta.api.md @@ -433,6 +433,16 @@ export type _ProvideNgxMetaManagerOptions = Partial<{ // @public export const provideNgxMetaMetadataLoader: () => Provider[]; +// @internal (undocumented) +export const _provideNgxMetaModuleManager: >(key: Key, scope: ReadonlyArray, options?: _ProvideNgxMetaModuleManagerOptions) => FactoryProvider; + +// @internal (undocumented) +export type _ProvideNgxMetaModuleManagerOptions = Partial<{ + f: MetadataSetterFactory; + n: NgxMetaElementNameAttribute; + gS: true; +}> & _ProvideNgxMetaManagerOptions; + // @public export const provideNgxMetaOpenGraph: () => Provider[]; @@ -620,6 +630,12 @@ export const withManagerJsonPath: (...jsonPath: MetadataResolverOptions['jsonPat // @alpha export const withManagerObjectMerging: () => _ProvideNgxMetaManagerOptions; +// @internal (undocumented) +export const _withModuleManagerNameAttribute: (nameAttribute: _ProvideNgxMetaModuleManagerOptions['n']) => _ProvideNgxMetaModuleManagerOptions; + +// @internal (undocumented) +export const _withModuleManagerSetterFactory: (setterFactory: _ProvideNgxMetaModuleManagerOptions['f']) => _ProvideNgxMetaModuleManagerOptions; + // @public export const withNameAttribute: (value: string) => readonly ["name", string]; @@ -635,6 +651,9 @@ export const withOptions: (...options: ReadonlyArray) => T; // @public export const withPropertyAttribute: (value: string) => readonly ["property", string]; +// @internal (undocumented) +export const _withSameNameGlobal: () => _ProvideNgxMetaModuleManagerOptions; + // (No @packageDocumentation comment for this package) ``` diff --git a/projects/ngx-meta/src/core/src/managers/provider/index.ts b/projects/ngx-meta/src/core/src/managers/provider/index.ts index 1ac9acce..26fe4152 100644 --- a/projects/ngx-meta/src/core/src/managers/provider/index.ts +++ b/projects/ngx-meta/src/core/src/managers/provider/index.ts @@ -6,6 +6,13 @@ export { withManagerJsonPath, _ProvideNgxMetaManagerOptions, } from './provide-ngx-meta-manager' +export { + _provideNgxMetaModuleManager, + _ProvideNgxMetaModuleManagerOptions, + _withModuleManagerNameAttribute, + _withModuleManagerSetterFactory, + _withSameNameGlobal, +} from './provide-ngx-meta-module-manager' export { makeMetadataManagerProviderFromSetterFactory, MetadataSetterFactory, diff --git a/projects/ngx-meta/src/core/src/managers/provider/provide-ngx-meta-module-manager.ts b/projects/ngx-meta/src/core/src/managers/provider/provide-ngx-meta-module-manager.ts new file mode 100644 index 00000000..cccfe26e --- /dev/null +++ b/projects/ngx-meta/src/core/src/managers/provider/provide-ngx-meta-module-manager.ts @@ -0,0 +1,80 @@ +import { + _ProvideNgxMetaManagerOptions, + provideNgxMetaManager, + withManagerDeps, + withManagerGlobal, + withManagerJsonPath, +} from './provide-ngx-meta-manager' +import { + NgxMetaElementNameAttribute, + NgxMetaElementsService, + withContentAttribute, + withNameAttribute, +} from '../../meta-elements' +import { MetadataSetterFactory } from './make-metadata-manager-provider-from-setter-factory' +import { withOptions } from '../../utils' + +/** + * @internal + */ +export const _provideNgxMetaModuleManager = < + Type extends object, + Key extends StringKey, +>( + key: Key, + scope: ReadonlyArray, + options: _ProvideNgxMetaModuleManagerOptions = {}, +) => + provideNgxMetaManager( + withManagerJsonPath(...scope, key), + options.f ?? + ((metaElementsService: NgxMetaElementsService) => (value) => + metaElementsService.set( + options.n ?? withNameAttribute(key), + withContentAttribute(value as string | null | undefined), + )), + withOptions( + withManagerDeps(options.d ?? [NgxMetaElementsService]), + options.gS ? withManagerGlobal(key) : {}, + options, + ), + ) + +type StringKey = Extract + +/** + * @internal + */ +export type _ProvideNgxMetaModuleManagerOptions = Partial<{ + f: MetadataSetterFactory + n: NgxMetaElementNameAttribute + gS: true +}> & + _ProvideNgxMetaManagerOptions + +/** + * @internal + */ +export const _withModuleManagerSetterFactory = ( + setterFactory: _ProvideNgxMetaModuleManagerOptions['f'], +): _ProvideNgxMetaModuleManagerOptions => ({ + f: setterFactory, +}) + +/** + * @internal + */ +export const _withModuleManagerNameAttribute = ( + nameAttribute: _ProvideNgxMetaModuleManagerOptions['n'], +): _ProvideNgxMetaModuleManagerOptions => ({ + n: nameAttribute, +}) + +/** + * @internal + */ +export const _withSameNameGlobal = < + T, +>(): _ProvideNgxMetaModuleManagerOptions => ({ + gS: true, +})