/
githubmirror
/
angular
Обзор
Документация
Войти
/
githubmirror
/
angular
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/core/src/render3/jit/pipe.ts
78 строк
2 KB
Alex Rickabaugh
refactor(core): remove circular dep in JIT decorator definitions (#59083)
06 дек 2024, 03:01
06 дек 2024, 03:01
8cea383
Код
Авторство
О чём код?
/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import { getCompilerFacade, JitCompilerUsage, R3PipeMetadataFacade, } from '../../compiler/compiler_facade'; import {reflectDependencies} from '../../di/jit/util'; import {Type} from '../../interface/type'; import type {Pipe} from '../../metadata/directives'; import {NG_FACTORY_DEF, NG_PIPE_DEF} from '../fields'; import {angularCoreEnv} from './environment'; export function compilePipe(type: Type<any>, meta: Pipe): void { let ngPipeDef: any = null; let ngFactoryDef: any = null; Object.defineProperty(type, NG_FACTORY_DEF, { get: () => { if (ngFactoryDef === null) { const metadata = getPipeMetadata(type, meta); const compiler = getCompilerFacade({ usage: JitCompilerUsage.Decorator, kind: 'pipe', type: metadata.type, }); ngFactoryDef = compiler.compileFactory(angularCoreEnv, `ng:///${metadata.name}/ɵfac.js`, { name: metadata.name, type: metadata.type, typeArgumentCount: 0, deps: reflectDependencies(type), target: compiler.FactoryTarget.Pipe, }); } return ngFactoryDef; }, // Make the property configurable in dev mode to allow overriding in tests configurable: !!ngDevMode, }); Object.defineProperty(type, NG_PIPE_DEF, { get: () => { if (ngPipeDef === null) { const metadata = getPipeMetadata(type, meta); const compiler = getCompilerFacade({ usage: JitCompilerUsage.Decorator, kind: 'pipe', type: metadata.type, }); ngPipeDef = compiler.compilePipe( angularCoreEnv, `ng:///${metadata.name}/ɵpipe.js`, metadata, ); } return ngPipeDef; }, // Make the property configurable in dev mode to allow overriding in tests configurable: !!ngDevMode, }); } function getPipeMetadata(type: Type<any>, meta: Pipe): R3PipeMetadataFacade { return { type: type, name: type.name, pipeName: meta.name, pure: meta.pure !== undefined ? meta.pure : true, isStandalone: meta.standalone === undefined ? true : !!meta.standalone, }; }