{"version":3,"file":"ModelSchema.mjs","sources":["../../src/ModelSchema.ts"],"sourcesContent":["import { isSchemaModelType, } from './ModelType';\nimport { processSchema } from './SchemaProcessor';\nimport { allow } from './Authorization';\nimport { brand, getBrand } from './util';\nexport const rdsSchemaBrandName = 'RDSSchema';\nexport const rdsSchemaBrand = brand(rdsSchemaBrandName);\nexport const ddbSchemaBrandName = 'DDBSchema';\nconst ddbSchemaBrand = brand(ddbSchemaBrandName);\n/**\n * Filter the schema types down to only include the ModelTypes as SchemaModelType\n *\n * @param schemaContents The object containing all SchemaContent for this schema\n * @returns Only the schemaContents that are ModelTypes, coerced to the SchemaModelType surface\n */\nconst filterSchemaModelTypes = (schemaContents) => {\n    const modelTypes = {};\n    if (schemaContents) {\n        Object.entries(schemaContents).forEach(([key, content]) => {\n            if (isSchemaModelType(content)) {\n                modelTypes[key] = content;\n            }\n        });\n    }\n    return modelTypes;\n};\n/**\n * Model Schema type guard\n * @param schema - api-next ModelSchema or string\n * @returns true if the given value is a ModelSchema\n */\nexport const isModelSchema = (schema) => {\n    return typeof schema === 'object' && schema.data !== undefined;\n};\n/**\n * Ensures that only supported entities are being added to the SQL schema through `addToSchema`\n * Models are not supported for brownfield SQL\n *\n * @param types - purposely widened to ModelSchemaContents, because we need to validate at runtime that a model is not being passed in here\n */\nfunction validateAddToSchema(types) {\n    for (const [name, type] of Object.entries(types)) {\n        if (getBrand(type) === 'modelType') {\n            throw new Error(`Invalid value specified for ${name} in addToSchema(). Models cannot be manually added to a SQL schema.`);\n        }\n    }\n}\nfunction _rdsSchema(types, config) {\n    const data = {\n        types,\n        authorization: [],\n        configuration: config,\n    };\n    const models = filterSchemaModelTypes(data.types);\n    return {\n        data,\n        models,\n        transform() {\n            const internalSchema = {\n                data,\n                context: this.context,\n            };\n            return processSchema({ schema: internalSchema });\n        },\n        authorization(callback) {\n            const rules = callback(allow);\n            this.data.authorization = Array.isArray(rules) ? rules : [rules];\n            const { authorization: _, ...rest } = this;\n            return rest;\n        },\n        addToSchema(types) {\n            validateAddToSchema(types);\n            this.data.types = { ...this.data.types, ...types };\n            const { addToSchema: _, ...rest } = this;\n            return rest;\n        },\n        addQueries(types) {\n            this.data.types = { ...this.data.types, ...types };\n            const { addQueries: _, ...rest } = this;\n            return rest;\n        },\n        addMutations(types) {\n            this.data.types = { ...this.data.types, ...types };\n            const { addMutations: _, ...rest } = this;\n            return rest;\n        },\n        addSubscriptions(types) {\n            this.data.types = { ...this.data.types, ...types };\n            const { addSubscriptions: _, ...rest } = this;\n            return rest;\n        },\n        setAuthorization(callback) {\n            callback(models, this);\n            const { setAuthorization: _, ...rest } = this;\n            return rest;\n        },\n        setRelationships(callback) {\n            const { setRelationships: _, ...rest } = this;\n            // The relationships are added via `models.<Model>.relationships`\n            // modifiers that's being called within the callback. They are modifying\n            // by references on each model, so there is not anything else to be done\n            // here.\n            callback(models);\n            return rest;\n        },\n        renameModels(callback) {\n            const { renameModels: _, ...rest } = this;\n            // returns an array of tuples [curName, newName]\n            const changeLog = callback();\n            changeLog.forEach(([curName, newName]) => {\n                const currentType = data.types[curName];\n                if (currentType === undefined) {\n                    throw new Error(`Invalid renameModels call. ${curName} is not defined in the schema`);\n                }\n                if (typeof newName !== 'string' || newName.length < 1) {\n                    throw new Error(`Invalid renameModels call. New name must be a non-empty string. Received: \"${newName}\"`);\n                }\n                models[newName] = currentType;\n                data.types[newName] = currentType;\n                models[newName].data.originalName = curName;\n                delete models[curName];\n                delete data.types[curName];\n            });\n            return rest;\n        },\n        ...rdsSchemaBrand,\n    };\n}\nfunction _ddbSchema(types, config) {\n    const data = {\n        types,\n        authorization: [],\n        configuration: config,\n    };\n    return {\n        data,\n        transform() {\n            const internalSchema = {\n                data,\n                context: this.context,\n            };\n            return processSchema({ schema: internalSchema });\n        },\n        authorization(callback) {\n            const rules = callback(allow);\n            this.data.authorization = Array.isArray(rules) ? rules : [rules];\n            const { authorization: _, ...rest } = this;\n            return rest;\n        },\n        models: filterSchemaModelTypes(data.types),\n        ...ddbSchemaBrand,\n    };\n}\nfunction bindConfigToSchema(config) {\n    return (types) => {\n        return (config.database.engine === 'dynamodb'\n            ? _ddbSchema(types, config)\n            : _rdsSchema(types, config));\n    };\n}\n/**\n * The API and data model definition for Amplify Data. Pass in `{ <NAME>: a.model(...) }` to create a database table\n * and exposes CRUDL operations via an API.\n * @param types The API and data model definition\n * @returns An API and data model definition to be deployed with Amplify (Gen 2) experience (`processSchema(...)`)\n * or with the Amplify Data CDK construct (`@aws-amplify/data-construct`)\n */\nexport const schema = bindConfigToSchema({ database: { engine: 'dynamodb' } });\n/**\n * Configure wraps schema definition with non-default config to allow usecases other than\n * the default DynamoDB use-case.\n *\n * @param config The SchemaConfig augments the schema with content like the database type\n * @returns\n */\nexport function configure(config) {\n    return {\n        schema: bindConfigToSchema(config),\n    };\n}\nexport function isCustomPathData(obj) {\n    return ('stack' in obj &&\n        (typeof obj.stack === 'undefined' || typeof obj.stack === 'string') &&\n        'entry' in obj &&\n        typeof obj.entry === 'string');\n}\n"],"names":[],"mappings":"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"}