333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
1
{"version":3,"sources":["../../src/metadata/EmbeddedMetadata.ts"],"names":[],"mappings":"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","file":"EmbeddedMetadata.js","sourcesContent":["import {ColumnMetadata} from \"./ColumnMetadata\";\nimport {RelationMetadata} from \"./RelationMetadata\";\nimport {EntityMetadata} from \"./EntityMetadata\";\nimport {EmbeddedMetadataArgs} from \"../metadata-args/EmbeddedMetadataArgs\";\nimport {RelationIdMetadata} from \"./RelationIdMetadata\";\nimport {RelationCountMetadata} from \"./RelationCountMetadata\";\nimport {Connection} from \"../connection/Connection\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {EntityListenerMetadata} from \"./EntityListenerMetadata\";\nimport {IndexMetadata} from \"./IndexMetadata\";\nimport {UniqueMetadata} from \"./UniqueMetadata\";\n\n/**\n * Contains all information about entity's embedded property.\n */\nexport class EmbeddedMetadata {\n\n    // ---------------------------------------------------------------------\n    // Public Properties\n    // ---------------------------------------------------------------------\n\n    /**\n     * Entity metadata where this embedded is.\n     */\n    entityMetadata: EntityMetadata;\n\n    /**\n     * Parent embedded in the case if this embedded inside other embedded.\n     */\n    parentEmbeddedMetadata?: EmbeddedMetadata;\n\n    /**\n     * Embedded target type.\n     */\n    type: Function;\n\n    /**\n     * Property name on which this embedded is attached.\n     */\n    propertyName: string;\n\n    /**\n     * Gets full path to this embedded property (including embedded property name).\n     * Full path is relevant when embedded is used inside other embeds (one or multiple nested).\n     * For example it will return \"counters.subcounters\".\n     */\n    propertyPath: string;\n\n    /**\n     * Columns inside this embed.\n     */\n    columns: ColumnMetadata[] = [];\n\n    /**\n     * Relations inside this embed.\n     */\n    relations: RelationMetadata[] = [];\n\n    /**\n     * Entity listeners inside this embed.\n     */\n    listeners: EntityListenerMetadata[] = [];\n\n    /**\n     * Indices applied to the embed columns.\n     */\n    indices: IndexMetadata[] = [];\n\n    /**\n     * Uniques applied to the embed columns.\n     */\n    uniques: UniqueMetadata[] = [];\n\n    /**\n     * Relation ids inside this embed.\n     */\n    relationIds: RelationIdMetadata[] = [];\n\n    /**\n     * Relation counts inside this embed.\n     */\n    relationCounts: RelationCountMetadata[] = [];\n\n    /**\n     * Nested embeddable in this embeddable (which has current embedded as parent embedded).\n     */\n    embeddeds: EmbeddedMetadata[] = [];\n\n    /**\n     * Indicates if this embedded is in array mode.\n     *\n     * This option works only in mongodb.\n     */\n    isArray: boolean = false;\n\n    /**\n     * Prefix of the embedded, used instead of propertyName.\n     * If set to empty string or false, then prefix is not set at all.\n     */\n    customPrefix: string|boolean|undefined;\n\n    /**\n     * Gets the prefix of the columns.\n     * By default its a property name of the class where this prefix is.\n     * But if custom prefix is set then it takes its value as a prefix.\n     * However if custom prefix is set to empty string or false, then prefix to column is not applied at all.\n     */\n    prefix: string;\n\n    /**\n     * Returns array of property names of current embed and all its parent embeds.\n     *\n     * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n     * we need to get value of \"id\" column from the post real entity object.\n     * this method will return [\"data\", \"information\", \"counters\"]\n     */\n    parentPropertyNames: string[] = [];\n\n    /**\n     * Returns array of prefixes of current embed and all its parent embeds.\n     */\n    parentPrefixes: string[] = [];\n\n    /**\n     * Returns embed metadatas from all levels of the parent tree.\n     *\n     * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n     * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n     */\n    embeddedMetadataTree: EmbeddedMetadata[] = [];\n\n    /**\n     * Embed metadatas from all levels of the parent tree.\n     *\n     * example: post[data][information][counters].id where \"data\", \"information\" and \"counters\" are embeds\n     * this method will return [embed metadata of data, embed metadata of information, embed metadata of counters]\n     */\n    columnsFromTree: ColumnMetadata[] = [];\n\n    /**\n     * Relations of this embed and all relations from its child embeds.\n     */\n    relationsFromTree: RelationMetadata[] = [];\n\n    /**\n     * Relations of this embed and all relations from its child embeds.\n     */\n    listenersFromTree: EntityListenerMetadata[] = [];\n\n    /**\n     * Indices of this embed and all indices from its child embeds.\n     */\n    indicesFromTree: IndexMetadata[] = [];\n\n    /**\n     * Uniques of this embed and all uniques from its child embeds.\n     */\n    uniquesFromTree: UniqueMetadata[] = [];\n\n    /**\n     * Relation ids of this embed and all relation ids from its child embeds.\n     */\n    relationIdsFromTree: RelationIdMetadata[] = [];\n\n    /**\n     * Relation counts of this embed and all relation counts from its child embeds.\n     */\n    relationCountsFromTree: RelationCountMetadata[] = [];\n\n    // ---------------------------------------------------------------------\n    // Constructor\n    // ---------------------------------------------------------------------\n\n    constructor(options: {\n        entityMetadata: EntityMetadata,\n        args: EmbeddedMetadataArgs,\n    }) {\n        this.entityMetadata = options.entityMetadata;\n        this.type = options.args.type();\n        this.propertyName = options.args.propertyName;\n        this.customPrefix = options.args.prefix;\n        this.isArray = options.args.isArray;\n    }\n\n    // ---------------------------------------------------------------------\n    // Public Methods\n    // ---------------------------------------------------------------------\n\n    /**\n     * Creates a new embedded object.\n     */\n    create(): any {\n        return new (this.type as any);\n    }\n\n    // ---------------------------------------------------------------------\n    // Builder Methods\n    // ---------------------------------------------------------------------\n\n    build(connection: Connection): this {\n        this.embeddeds.forEach(embedded => embedded.build(connection));\n        this.prefix = this.buildPrefix(connection);\n        this.parentPropertyNames = this.buildParentPropertyNames();\n        this.parentPrefixes = this.buildParentPrefixes();\n        this.propertyPath = this.parentPropertyNames.join(\".\");\n        this.embeddedMetadataTree = this.buildEmbeddedMetadataTree();\n        this.columnsFromTree = this.buildColumnsFromTree();\n        this.relationsFromTree = this.buildRelationsFromTree();\n        this.listenersFromTree = this.buildListenersFromTree();\n        this.indicesFromTree = this.buildIndicesFromTree();\n        this.uniquesFromTree = this.buildUniquesFromTree();\n        this.relationIdsFromTree = this.buildRelationIdsFromTree();\n        this.relationCountsFromTree = this.buildRelationCountsFromTree();\n        return this;\n    }\n\n    // ---------------------------------------------------------------------\n    // Protected Methods\n    // ---------------------------------------------------------------------\n\n    protected buildPartialPrefix(): string[] {\n        // if prefix option was not set or explicitly set to true - default prefix\n        if (this.customPrefix === undefined || this.customPrefix === true) {\n            return [this.propertyName];\n        }\n\n        // if prefix option was set to empty string or explicity set to false - disable prefix\n        if (this.customPrefix === \"\" || this.customPrefix === false) {\n            return [];\n        }\n\n        // use custom prefix\n        if (typeof this.customPrefix === \"string\") {\n            return [this.customPrefix];\n        }\n\n        throw new Error(`Invalid prefix option given for ${this.entityMetadata.targetName}#${this.propertyName}`);\n    }\n\n    protected buildPrefix(connection: Connection): string {\n        if (connection.driver instanceof MongoDriver)\n            return this.propertyName;\n\n        let prefixes: string[] = [];\n        if (this.parentEmbeddedMetadata)\n            prefixes.push(this.parentEmbeddedMetadata.buildPrefix(connection));\n\n        prefixes.push(...this.buildPartialPrefix());\n\n        return prefixes.join(\"_\"); // todo: use naming strategy instead of \"_\"  !!!\n    }\n\n    protected buildParentPropertyNames(): string[] {\n        return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPropertyNames().concat(this.propertyName) : [this.propertyName];\n    }\n\n    protected buildParentPrefixes(): string[] {\n        return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildParentPrefixes().concat(this.buildPartialPrefix()) : this.buildPartialPrefix();\n    }\n\n    protected buildEmbeddedMetadataTree(): EmbeddedMetadata[] {\n        return this.parentEmbeddedMetadata ? this.parentEmbeddedMetadata.buildEmbeddedMetadataTree().concat(this) : [this];\n    }\n\n    protected buildColumnsFromTree(): ColumnMetadata[] {\n        return this.embeddeds.reduce((columns, embedded) => columns.concat(embedded.buildColumnsFromTree()), this.columns);\n    }\n\n    protected buildRelationsFromTree(): RelationMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildRelationsFromTree()), this.relations);\n    }\n\n    protected buildListenersFromTree(): EntityListenerMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildListenersFromTree()), this.listeners);\n    }\n\n    protected buildIndicesFromTree(): IndexMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildIndicesFromTree()), this.indices);\n    }\n\n    protected buildUniquesFromTree(): UniqueMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildUniquesFromTree()), this.uniques);\n    }\n\n    protected buildRelationIdsFromTree(): RelationIdMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildRelationIdsFromTree()), this.relationIds);\n    }\n\n    protected buildRelationCountsFromTree(): RelationCountMetadata[] {\n        return this.embeddeds.reduce((relations, embedded) => relations.concat(embedded.buildRelationCountsFromTree()), this.relationCounts);\n    }\n\n}\n"],"sourceRoot":".."}