Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function extractDirectiveMetadata(clazz, decorator, checker, reflector, isCore, defaultSelector) {
if (defaultSelector === void 0) { defaultSelector = null; }
if (decorator.args === null || decorator.args.length !== 1) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARITY_WRONG, decorator.node, "Incorrect number of arguments to @" + decorator.name + " decorator");
}
var meta = util_1.unwrapExpression(decorator.args[0]);
if (!ts.isObjectLiteralExpression(meta)) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARG_NOT_LITERAL, meta, "@" + decorator.name + " argument must be literal.");
}
var directive = metadata_1.reflectObjectLiteral(meta);
if (directive.has('jit')) {
// The only allowed value is true, so there's no need to expand further.
return undefined;
}
var members = reflector.getMembersOfClass(clazz);
// Precompute a list of ts.ClassElements that have decorators. This includes things like @Input,
// @Output, @HostBinding, etc.
var decoratedElements = members.filter(function (member) { return !member.isStatic && member.decorators !== null; });
var coreModule = isCore ? undefined : '@angular/core';
// Construct the map of inputs both from the @Directive/@Component
// decorator, and the decorated
// fields.
}
else if (typeof arg === 'string') {
predicate = [arg];
}
else if (isStringArrayOrDie(arg, '@' + name)) {
predicate = arg;
}
else {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.VALUE_HAS_WRONG_TYPE, node, "@" + name + " predicate cannot be interpreted");
}
// Extract the read and descendants options.
var read = null;
// The default value for descendants is true for every decorator except @ContentChildren.
var descendants = name !== 'ContentChildren';
if (args.length === 2) {
var optionsExpr = util_1.unwrapExpression(args[1]);
if (!ts.isObjectLiteralExpression(optionsExpr)) {
throw new Error("@" + name + " options must be an object literal");
}
var options = metadata_1.reflectObjectLiteral(optionsExpr);
if (options.has('read')) {
read = new compiler_1.WrappedNodeExpr(options.get('read'));
}
if (options.has('descendants')) {
var descendantsValue = metadata_1.staticallyResolve(options.get('descendants'), reflector, checker);
if (typeof descendantsValue !== 'boolean') {
throw new Error("@" + name + " options.descendants must be a boolean");
}
descendants = descendantsValue;
}
}
else if (args.length > 2) {
NgModuleDecoratorHandler.prototype.analyze = function (node, decorator) {
var _this = this;
var _a, _b, _c, _d;
if (decorator.args === null || decorator.args.length > 1) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARITY_WRONG, decorator.node, "Incorrect number of arguments to @NgModule decorator");
}
// @NgModule can be invoked without arguments. In case it is, pretend as if a blank object
// literal was specified. This simplifies the code below.
var meta = decorator.args.length === 1 ? util_1.unwrapExpression(decorator.args[0]) :
ts.createObjectLiteral([]);
if (!ts.isObjectLiteralExpression(meta)) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARG_NOT_LITERAL, meta, '@NgModule argument must be an object literal');
}
var ngModule = metadata_1.reflectObjectLiteral(meta);
if (ngModule.has('jit')) {
// The only allowed value is true, so there's no need to expand further.
return {};
}
// Extract the module declarations, imports, and exports.
var declarations = [];
if (ngModule.has('declarations')) {
var expr = ngModule.get('declarations');
var declarationMeta = metadata_1.staticallyResolve(expr, this.reflector, this.checker);
declarations = this.resolveTypeList(expr, declarationMeta, 'declarations');
(_a = this.referencesRegistry).add.apply(_a, tslib_1.__spread(declarations));
function extractQueriesFromDecorator(queryData, reflector, checker, isCore) {
var content = [], view = [];
var expr = util_1.unwrapExpression(queryData);
if (!ts.isObjectLiteralExpression(queryData)) {
throw new Error("queries metadata must be an object literal");
}
metadata_1.reflectObjectLiteral(queryData).forEach(function (queryExpr, propertyName) {
queryExpr = util_1.unwrapExpression(queryExpr);
if (!ts.isNewExpression(queryExpr) || !ts.isIdentifier(queryExpr.expression)) {
throw new Error("query metadata must be an instance of a query type");
}
var type = reflector.getImportOfIdentifier(queryExpr.expression);
if (type === null || (!isCore && type.from !== '@angular/core') ||
!QUERY_TYPES.has(type.name)) {
throw new Error("query metadata must be an instance of a query type");
}
var query = extractQueryMetadata(queryExpr, type.name, queryExpr.arguments || [], propertyName, reflector, checker);
if (type.name.startsWith('Content')) {
content.push(query);
metadata_1.reflectObjectLiteral(queryData).forEach(function (queryExpr, propertyName) {
queryExpr = util_1.unwrapExpression(queryExpr);
if (!ts.isNewExpression(queryExpr) || !ts.isIdentifier(queryExpr.expression)) {
throw new Error("query metadata must be an instance of a query type");
}
var type = reflector.getImportOfIdentifier(queryExpr.expression);
if (type === null || (!isCore && type.from !== '@angular/core') ||
!QUERY_TYPES.has(type.name)) {
throw new Error("query metadata must be an instance of a query type");
}
var query = extractQueryMetadata(queryExpr, type.name, queryExpr.arguments || [], propertyName, reflector, checker);
if (type.name.startsWith('Content')) {
content.push(query);
}
else {
view.push(query);
}
});
PipeDecoratorHandler.prototype.analyze = function (clazz, decorator) {
if (clazz.name === undefined) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ON_ANONYMOUS_CLASS, clazz, "@Pipes must have names");
}
var name = clazz.name.text;
var type = new compiler_1.WrappedNodeExpr(clazz.name);
if (decorator.args === null) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_NOT_CALLED, decorator.node, "@Pipe must be called");
}
if (decorator.args.length !== 1) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARITY_WRONG, decorator.node, '@Pipe must have exactly one argument');
}
var meta = util_1.unwrapExpression(decorator.args[0]);
if (!ts.isObjectLiteralExpression(meta)) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARG_NOT_LITERAL, meta, '@Pipe must have a literal argument');
}
var pipe = metadata_1.reflectObjectLiteral(meta);
if (!pipe.has('name')) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.PIPE_MISSING_NAME, meta, "@Pipe decorator is missing name field");
}
var pipeNameExpr = pipe.get('name');
var pipeName = metadata_1.staticallyResolve(pipeNameExpr, this.reflector, this.checker);
if (typeof pipeName !== 'string') {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.VALUE_HAS_WRONG_TYPE, pipeNameExpr, "@Pipe.name must be a string");
}
this.scopeRegistry.registerPipe(clazz, pipeName);
var pure = true;
if (pipe.has('pure')) {
var expr = pipe.get('pure');
ComponentDecoratorHandler.prototype._resolveLiteral = function (decorator) {
if (this.literalCache.has(decorator)) {
return this.literalCache.get(decorator);
}
if (decorator.args === null || decorator.args.length !== 1) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARITY_WRONG, decorator.node, "Incorrect number of arguments to @Component decorator");
}
var meta = util_1.unwrapExpression(decorator.args[0]);
if (!ts.isObjectLiteralExpression(meta)) {
throw new diagnostics_1.FatalDiagnosticError(diagnostics_1.ErrorCode.DECORATOR_ARG_NOT_LITERAL, meta, "Decorator argument must be literal.");
}
this.literalCache.set(decorator, meta);
return meta;
};
ComponentDecoratorHandler.prototype._extractStyleUrls = function (component) {