{"version":3,"file":"ModelField.mjs","sources":["../../src/ModelField.ts"],"sourcesContent":["import { brand } from './util';\nimport { allow } from './Authorization';\nimport { createValidationBuilder, } from './Validate';\n/**\n * Used to \"attach\" auth types to ModelField without exposing them on the builder.\n */\nexport const __auth = Symbol('__auth');\n/**\n * Used by `.default()` to represent a generated field (SQL).\n */\nexport const __generated = Symbol('__generated');\nconst brandName = 'modelField';\nconst internal = Symbol('internal');\nexport var ModelFieldType;\n(function (ModelFieldType) {\n    ModelFieldType[\"Id\"] = \"ID\";\n    ModelFieldType[\"String\"] = \"String\";\n    ModelFieldType[\"Integer\"] = \"Int\";\n    ModelFieldType[\"Float\"] = \"Float\";\n    ModelFieldType[\"Boolean\"] = \"Boolean\";\n    ModelFieldType[\"Date\"] = \"AWSDate\";\n    ModelFieldType[\"Time\"] = \"AWSTime\";\n    ModelFieldType[\"DateTime\"] = \"AWSDateTime\";\n    ModelFieldType[\"Timestamp\"] = \"AWSTimestamp\";\n    ModelFieldType[\"Email\"] = \"AWSEmail\";\n    ModelFieldType[\"JSON\"] = \"AWSJSON\";\n    ModelFieldType[\"Phone\"] = \"AWSPhone\";\n    ModelFieldType[\"Url\"] = \"AWSURL\";\n    ModelFieldType[\"IPAddress\"] = \"AWSIPAddress\";\n})(ModelFieldType || (ModelFieldType = {}));\nexport var ModelFieldDataType;\n(function (ModelFieldDataType) {\n    ModelFieldDataType[\"String\"] = \"string\";\n    ModelFieldDataType[\"Number\"] = \"number\";\n    ModelFieldDataType[\"Boolean\"] = \"boolean\";\n    ModelFieldDataType[\"Date\"] = \"Date\";\n    ModelFieldDataType[\"JSON\"] = \"any\";\n})(ModelFieldDataType || (ModelFieldDataType = {}));\n/**\n * Model Field Implementation\n *\n * @typeParam T - holds the JS data type of the field; invoking the public methods changes this type accordingly\n * @example\n * string() => T = string | null\n * string().array() => T = Array<string | null> | null\n * string().array().required() => T = Array<string | null>\n * string().required().array().required() => T = Array<string>\n *\n * @param fieldType - stores the GraphQL data type of the field\n */\nfunction _field(fieldType) {\n    const _meta = {\n        lastInvokedMethod: null,\n    };\n    const data = {\n        fieldType,\n        required: false,\n        array: false,\n        arrayRequired: false,\n        default: undefined,\n        authorization: [],\n        validation: [],\n    };\n    const builder = {\n        required() {\n            if (_meta.lastInvokedMethod === 'array') {\n                data.arrayRequired = true;\n            }\n            else {\n                data.required = true;\n            }\n            _meta.lastInvokedMethod = 'required';\n            return this;\n        },\n        array() {\n            data.array = true;\n            _meta.lastInvokedMethod = 'array';\n            return this;\n        },\n        default(val) {\n            data.default = typeof val === 'undefined' ? __generated : val;\n            _meta.lastInvokedMethod = 'default';\n            return this;\n        },\n        authorization(callback) {\n            const { resource: _, ...rest } = allow;\n            const rules = callback(rest);\n            data.authorization = Array.isArray(rules) ? rules : [rules];\n            _meta.lastInvokedMethod = 'authorization';\n            return this;\n        },\n        validate(callback) {\n            const { builder, getRules } = createValidationBuilder();\n            callback(builder);\n            data.validation = getRules();\n            _meta.lastInvokedMethod = 'validate';\n            return this;\n        },\n        ...brand(brandName),\n        [internal]() {\n            return this;\n        },\n    };\n    return { ...builder, data };\n}\n/**\n * A unique identifier scalar type. This scalar is serialized like a String but isn't meant to be human-readable.\n * If not specified on create operations, a ULID will be auto-generated service-side.\n * @returns ID field definition\n */\nexport function id() {\n    return _field(ModelFieldType.Id);\n}\n/**\n * A string scalar type that is represented server-side as a UTF-8 character sequence.\n * @returns string field definition\n */\nexport function string() {\n    return _field(ModelFieldType.String);\n}\n/**\n * An integer scalar type with a supported value range between -(2^31) and 2^31-1.\n * @returns integer field definition\n */\nexport function integer() {\n    return _field(ModelFieldType.Integer);\n}\n/**\n * A float scalar type following represented server-side as an IEEE 754 floating point value.\n * @returns float field definition\n */\nexport function float() {\n    return _field(ModelFieldType.Float);\n}\n/**\n * A boolean scalar type that can be either true or false.\n * @returns boolean field definition\n */\nexport function boolean() {\n    return _field(ModelFieldType.Boolean);\n}\n/**\n * A date scalar type that is represented server-side as an extended ISO 8601 date string in the format `YYYY-MM-DD`.\n * @returns date field definition\n */\nexport function date() {\n    return _field(ModelFieldType.Date);\n}\n/**\n * A time scalar type that is represented server-side as an extended ISO 8601 time string in the format `hh:mm:ss.sss`.\n * @returns time field definition\n */\nexport function time() {\n    return _field(ModelFieldType.Time);\n}\n/**\n * A date time scalar type that is represented server-side as an extended ISO 8601 date and time string in the format `YYYY-MM-DDThh:mm:ss.sssZ`.\n * @returns datetime field definition\n */\nexport function datetime() {\n    return _field(ModelFieldType.DateTime);\n}\n/**\n * A timestamp scalar type that is represented by an integer value of the number of seconds before or after `1970-01-01-T00:00Z`.\n * @returns timestamp field definition\n */\nexport function timestamp() {\n    return _field(ModelFieldType.Timestamp);\n}\n/**\n * An email scalar type that is represented server-side in the format `local-part@domain-part` as defined by RFC 822.\n * @returns email field definition\n */\nexport function email() {\n    return _field(ModelFieldType.Email);\n}\n/**\n * A JSON scalar type that is automatically parsed and loaded server-side as maps, lists, or scalar values\n * rather than as the literal input strings.\n * @returns JSON field definition\n */\nexport function json() {\n    return _field(ModelFieldType.JSON);\n}\n/**\n * A phone number scalar type thas is stored as a string server-side. Phone numbers can contain either spaces\n * or hyphens to separate digit groups. Phone numbers without a country code are assumed to be US/North American numbers adhering\n * to the North American Numbering Plan.\n * @returns phone number field definition\n */\nexport function phone() {\n    return _field(ModelFieldType.Phone);\n}\n/**\n * A URL scalar type as defined by RFC 1738. For example, https://www.amazon.com/dp/B000NZW3KC/ or mailto:example@example.com.\n * URLs must contain a schema (http, mailto) and can't contain two forward slashes (//) in the path part.\n * @returns URL field definition\n */\nexport function url() {\n    return _field(ModelFieldType.Url);\n}\n/**\n * A valid IPv4 or IPv6 address scalar type. IPv4 addresses are expected in quad-dotted notation (123.12.34.56). IPv6 addresses\n * are expected in non-bracketed, colon-separated format (1a2b:3c4b:🔢4567). You can include an optional CIDR suffix (123.45.67.89/16)\n * to indicate subnet mask.\n * @returns IP address field definition\n */\nexport function ipAddress() {\n    return _field(ModelFieldType.IPAddress);\n}\n"],"names":[],"mappings":"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"}