UNPKG

12.1 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../src/metadata/IndexMetadata.ts"],"names":[],"mappings":"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","file":"IndexMetadata.js","sourcesContent":["import {EntityMetadata} from \"./EntityMetadata\";\nimport {IndexMetadataArgs} from \"../metadata-args/IndexMetadataArgs\";\nimport {NamingStrategyInterface} from \"../naming-strategy/NamingStrategyInterface\";\nimport {ColumnMetadata} from \"./ColumnMetadata\";\nimport {EmbeddedMetadata} from \"./EmbeddedMetadata\";\n\n/**\n * Index metadata contains all information about table's index.\n */\nexport class IndexMetadata {\n\n // ---------------------------------------------------------------------\n // Public Properties\n // ---------------------------------------------------------------------\n\n /**\n * Entity metadata of the class to which this index is applied.\n */\n entityMetadata: EntityMetadata;\n\n /**\n * Embedded metadata if this index was applied on embedded.\n */\n embeddedMetadata?: EmbeddedMetadata;\n\n /**\n * Indicates if this index must be unique.\n */\n isUnique: boolean = false;\n\n /**\n * The SPATIAL modifier indexes the entire column and does not allow indexed columns to contain NULL values.\n * Works only in MySQL.\n */\n isSpatial: boolean = false;\n\n /**\n * The FULLTEXT modifier indexes the entire column and does not allow prefixing.\n * Works only in MySQL.\n */\n isFulltext: boolean = false;\n\n /**\n * Indicates if this index must synchronize with database index.\n */\n synchronize: boolean = true;\n\n /**\n * If true, the index only references documents with the specified field.\n * These indexes use less space but behave differently in some situations (particularly sorts).\n * This option is only supported for mongodb database.\n */\n isSparse?: boolean;\n\n /**\n * Builds the index in the background so that building an index an does not block other database activities.\n * This option is only supported for mongodb database.\n */\n isBackground?: boolean;\n\n /**\n * Specifies a time to live, in seconds.\n * This option is only supported for mongodb database.\n */\n expireAfterSeconds?: number;\n\n /**\n * Target class to which metadata is applied.\n */\n target?: Function|string;\n\n /**\n * Indexed columns.\n */\n columns: ColumnMetadata[] = [];\n\n /**\n * User specified index name.\n */\n givenName?: string;\n\n /**\n * User specified column names.\n */\n givenColumnNames?: ((object?: any) => (any[]|{ [key: string]: number }))|string[];\n\n /**\n * Final index name.\n * If index name was given by a user then it stores normalized (by naming strategy) givenName.\n * If index name was not given then its generated.\n */\n name: string;\n\n /**\n * Index filter condition.\n */\n where?: string;\n\n /**\n * Map of column names with order set.\n * Used only by MongoDB driver.\n */\n columnNamesWithOrderingMap: { [key: string]: number } = {};\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(options: {\n entityMetadata: EntityMetadata,\n embeddedMetadata?: EmbeddedMetadata,\n columns?: ColumnMetadata[],\n args?: IndexMetadataArgs\n }) {\n this.entityMetadata = options.entityMetadata;\n this.embeddedMetadata = options.embeddedMetadata;\n if (options.columns)\n this.columns = options.columns;\n\n if (options.args) {\n this.target = options.args.target;\n if (options.args.synchronize !== null && options.args.synchronize !== undefined)\n this.synchronize = options.args.synchronize;\n this.isUnique = !!options.args.unique;\n this.isSpatial = !!options.args.spatial;\n this.isFulltext = !!options.args.fulltext;\n this.where = options.args.where;\n this.isSparse = options.args.sparse;\n this.isBackground = options.args.background;\n this.expireAfterSeconds = options.args.expireAfterSeconds;\n this.givenName = options.args.name;\n this.givenColumnNames = options.args.columns;\n }\n }\n\n // ---------------------------------------------------------------------\n // Public Build Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds some depend index properties.\n * Must be called after all entity metadata's properties map, columns and relations are built.\n */\n build(namingStrategy: NamingStrategyInterface): this {\n if (this.synchronize === false) {\n this.name = this.givenName!;\n return this;\n }\n\n const map: { [key: string]: number } = {};\n\n // if columns already an array of string then simply return it\n if (this.givenColumnNames) {\n let columnPropertyPaths: string[] = [];\n if (this.givenColumnNames instanceof Array) {\n columnPropertyPaths = this.givenColumnNames.map(columnName => {\n if (this.embeddedMetadata)\n return this.embeddedMetadata.propertyPath + \".\" + columnName;\n\n return columnName;\n });\n columnPropertyPaths.forEach(propertyPath => map[propertyPath] = 1);\n } else { // todo: indices in embeds are not implemented in this syntax. deprecate this syntax?\n // if columns is a function that returns array of field names then execute it and get columns names from it\n const columnsFnResult = this.givenColumnNames(this.entityMetadata.propertiesMap);\n if (columnsFnResult instanceof Array) {\n columnPropertyPaths = columnsFnResult.map((i: any) => String(i));\n columnPropertyPaths.forEach(name => map[name] = 1);\n } else {\n columnPropertyPaths = Object.keys(columnsFnResult).map((i: any) => String(i));\n Object.keys(columnsFnResult).forEach(columnName => map[columnName] = columnsFnResult[columnName]);\n }\n }\n\n this.columns = columnPropertyPaths.map(propertyPath => {\n const columnWithSameName = this.entityMetadata.columns.find(column => column.propertyPath === propertyPath);\n if (columnWithSameName) {\n return [columnWithSameName];\n }\n const relationWithSameName = this.entityMetadata.relations.find(relation => relation.isWithJoinColumn && relation.propertyName === propertyPath);\n if (relationWithSameName) {\n return relationWithSameName.joinColumns;\n }\n const indexName = this.givenName ? \"\\\"\" + this.givenName + \"\\\" \" : \"\";\n const entityName = this.entityMetadata.targetName;\n throw new Error(`Index ${indexName}contains column that is missing in the entity (${entityName}): ` + propertyPath);\n })\n .reduce((a, b) => a.concat(b));\n }\n\n this.columnNamesWithOrderingMap = Object.keys(map).reduce((updatedMap, key) => {\n const column = this.entityMetadata.columns.find(column => column.propertyPath === key);\n if (column)\n updatedMap[column.databasePath] = map[key];\n\n return updatedMap;\n }, {} as { [key: string]: number });\n\n this.name = this.givenName ? this.givenName : namingStrategy.indexName(this.entityMetadata.tablePath, this.columns.map(column => column.databaseName), this.where);\n return this;\n }\n\n}\n"],"sourceRoot":".."}
\No newline at end of file