@tier0/sdk-v2 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -15
- package/dist/cjs/capabilities.js +2 -2
- package/dist/cjs/capabilities.js.map +1 -1
- package/dist/cjs/client.d.ts +283 -375
- package/dist/cjs/cloud-transport.js +7 -3
- package/dist/cjs/cloud-transport.js.map +1 -1
- package/dist/cjs/controls.d.ts +19 -7
- package/dist/cjs/controls.js +37 -34
- package/dist/cjs/controls.js.map +1 -1
- package/dist/cjs/data/bootstrap.js +3 -2
- package/dist/cjs/data/bootstrap.js.map +1 -1
- package/dist/cjs/data/collection.d.ts +22 -0
- package/dist/cjs/data/collection.js +10 -9
- package/dist/cjs/data/collection.js.map +1 -1
- package/dist/cjs/data/schema.js +5 -1
- package/dist/cjs/data/schema.js.map +1 -1
- package/dist/cjs/files.d.ts +9 -9
- package/dist/cjs/mq/broker.d.ts +1 -1
- package/dist/cjs/mq/broker.js +1 -1
- package/dist/cjs/mq/broker.js.map +1 -1
- package/dist/cjs/mq/types.d.ts +1 -1
- package/dist/cjs/mq/types.js.map +1 -1
- package/dist/cjs/openapi/api.generated.d.ts +417 -541
- package/dist/cjs/openapi/api.generated.js +292 -377
- package/dist/cjs/openapi/api.generated.js.map +1 -1
- package/dist/cjs/openapi/client.js +1 -1
- package/dist/cjs/openapi/client.js.map +1 -1
- package/dist/cjs/openapi/codecs.generated.d.ts +394 -652
- package/dist/cjs/openapi/codecs.generated.js +2 -2
- package/dist/cjs/openapi/codecs.generated.js.map +1 -1
- package/dist/cjs/openapi/types.generated.d.ts +696 -905
- package/dist/cjs/openapi/types.generated.js.map +1 -1
- package/dist/cjs/source.d.ts +1 -7
- package/dist/cjs/source.js +2 -3
- package/dist/cjs/source.js.map +1 -1
- package/dist/cjs/stream.d.ts +0 -8
- package/dist/cjs/stream.js +3 -5
- package/dist/cjs/stream.js.map +1 -1
- package/dist/cjs/uns-v2/codec.js +1 -1
- package/dist/cjs/uns-v2/codec.js.map +1 -1
- package/dist/cjs/uns-v2/generated.d.ts +4590 -13315
- package/dist/cjs/uns-v2/generated.js +21 -42
- package/dist/cjs/uns-v2/generated.js.map +1 -1
- package/dist/esm/capabilities.js +2 -2
- package/dist/esm/capabilities.js.map +1 -1
- package/dist/esm/client.d.ts +283 -375
- package/dist/esm/cloud-transport.js +7 -3
- package/dist/esm/cloud-transport.js.map +1 -1
- package/dist/esm/controls.d.ts +19 -7
- package/dist/esm/controls.js +38 -35
- package/dist/esm/controls.js.map +1 -1
- package/dist/esm/data/bootstrap.js +4 -3
- package/dist/esm/data/bootstrap.js.map +1 -1
- package/dist/esm/data/collection.d.ts +22 -0
- package/dist/esm/data/collection.js +10 -10
- package/dist/esm/data/collection.js.map +1 -1
- package/dist/esm/data/schema.js +5 -1
- package/dist/esm/data/schema.js.map +1 -1
- package/dist/esm/files.d.ts +9 -9
- package/dist/esm/mq/broker.d.ts +1 -1
- package/dist/esm/mq/broker.js +1 -1
- package/dist/esm/mq/broker.js.map +1 -1
- package/dist/esm/mq/types.d.ts +1 -1
- package/dist/esm/mq/types.js.map +1 -1
- package/dist/esm/openapi/api.generated.d.ts +417 -541
- package/dist/esm/openapi/api.generated.js +292 -377
- package/dist/esm/openapi/api.generated.js.map +1 -1
- package/dist/esm/openapi/client.js +1 -1
- package/dist/esm/openapi/client.js.map +1 -1
- package/dist/esm/openapi/codecs.generated.d.ts +394 -652
- package/dist/esm/openapi/codecs.generated.js +1 -1
- package/dist/esm/openapi/codecs.generated.js.map +1 -1
- package/dist/esm/openapi/types.generated.d.ts +696 -905
- package/dist/esm/openapi/types.generated.js.map +1 -1
- package/dist/esm/source.d.ts +1 -7
- package/dist/esm/source.js +2 -3
- package/dist/esm/source.js.map +1 -1
- package/dist/esm/stream.d.ts +0 -8
- package/dist/esm/stream.js +3 -5
- package/dist/esm/stream.js.map +1 -1
- package/dist/esm/uns-v2/codec.js +2 -2
- package/dist/esm/uns-v2/codec.js.map +1 -1
- package/dist/esm/uns-v2/generated.d.ts +4590 -13315
- package/dist/esm/uns-v2/generated.js +21 -42
- package/dist/esm/uns-v2/generated.js.map +1 -1
- package/docs/acceptance-2026-10-22.md +3 -1
- package/package.json +2 -2
- package/skills/tier0-sdk-v2/SKILL.md +5 -3
- package/skills/tier0-sdk-v2/tier0-sdk-v2-agent/SKILL.md +4 -4
- package/skills/tier0-sdk-v2/tier0-sdk-v2-controls/SKILL.md +5 -3
- package/skills/tier0-sdk-v2/tier0-sdk-v2-data/SKILL.md +2 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/consistency.md +3 -3
- package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/modeling.md +6 -4
- package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/read-write.md +13 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-data/references/schema-evolution.md +2 -0
- package/skills/tier0-sdk-v2/tier0-sdk-v2-files/references/delete.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-files/references/url.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-members/references/app-members.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-members/references/platform-members.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-notifications/references/get.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-notifications/references/send.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-source/SKILL.md +2 -2
- package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/changes.md +4 -4
- package/skills/tier0-sdk-v2/tier0-sdk-v2-source/references/read.md +2 -2
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/SKILL.md +4 -4
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/create.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/deploy.md +11 -2
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/lifecycle.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/read.md +25 -5
- package/skills/tier0-sdk-v2/tier0-sdk-v2-stream/references/update.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-system/references/info.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-system/references/whoami.md +1 -1
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/SKILL.md +5 -3
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/create.md +10 -6
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/delete.md +5 -5
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/namespace.md +4 -4
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/read.md +8 -7
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/restore.md +2 -2
- package/skills/tier0-sdk-v2/tier0-sdk-v2-uns/references/update.md +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/data/schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Zod 4 → UNS record schema normalizer, plus write-time validation.\n *\n * UNS stores one closed JSON-schema subset per collection: `type`,\n * `properties`, `required`, `additionalProperties: false`, `items`, `enum`,\n * `minimum`, `maximum`, declared `format`, `title`, `description`. `toRecordSchema` converts the\n * `z.toJSONSchema` output into exactly that subset and rejects every other\n * keyword with a concrete replacement, so a declaration that cannot be stored\n * fails when it is compiled (an App can compile its declarations at build\n * time) instead of on the first request.\n */\nimport { z } from 'zod';\nimport { ALIAS_PATTERN, type CollectionDefinition, type IndexSpec } from './define.js';\n\nexport type RecordSchemaType = 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean';\nexport type EnumValue = string | number | boolean;\n\nexport interface RecordSchema {\n type: RecordSchemaType;\n /** Display annotation; does not add range/date checks or convert stored values. */\n format?: 'int32' | 'float' | 'double' | 'date-time';\n title?: string;\n description?: string;\n properties?: Record<string, RecordSchema>;\n required?: string[];\n additionalProperties?: false;\n items?: RecordSchema;\n enum?: EnumValue[];\n minimum?: number;\n maximum?: number;\n}\n\nexport interface NormalizedIndex {\n path?: string;\n paths?: string[];\n unique?: true;\n kind?: 'gin';\n expireAfterSeconds?: number;\n}\n\n/** One ensure item, exactly as it is sent to `/uns/app/collections/ensure`. */\nexport interface CompiledCollection {\n alias: string;\n recordSchema: RecordSchema;\n indexes: NormalizedIndex[];\n description?: string;\n}\n\nexport interface SchemaIssue {\n path: string;\n message: string;\n}\n\nexport class CollectionSchemaError extends Error {\n readonly alias: string;\n readonly issues: SchemaIssue[];\n\n constructor(alias: string, issues: SchemaIssue[]) {\n super(\n [\n `Collection \"${alias}\" cannot be stored in UNS:`,\n ...issues.map((issue) => ` - ${issue.path || '(root)'}: ${issue.message}`),\n ].join('\\n'),\n );\n this.name = 'CollectionSchemaError';\n this.alias = alias;\n this.issues = issues;\n }\n}\n\n/** UNS limits (unsmeta Schema.validate and collection indexes); title/description are UTF-8 bytes. */\nexport const SCHEMA_LIMITS = {\n depth: 8,\n properties: 128,\n enumValues: 100,\n title: 512,\n description: 2048,\n indexes: 16,\n indexPaths: 3,\n ttlIndexes: 1,\n minExpireAfterSeconds: 60,\n maxExpireAfterSeconds: 31_536_000,\n} as const;\n\nconst SAFE_INTEGER_BOUND = Number.MAX_SAFE_INTEGER;\nconst SCHEMA_TYPES = new Set<string>(['object', 'array', 'string', 'number', 'integer', 'boolean']);\nconst KEPT_KEYWORDS = new Set([\n 'type',\n 'format',\n 'title',\n 'description',\n 'properties',\n 'required',\n 'additionalProperties',\n 'items',\n 'enum',\n 'minimum',\n 'maximum',\n]);\nconst RESERVED_FIELDS = new Set(['_id', '_meta']);\n\nconst NULLABLE_HINT =\n '`.nullable()`, `.nullish()` and `z.union()` are not storable. Make the field `.optional()` and leave it out instead of storing null; model alternatives as one type or as separate optional fields.';\nconst API_INPUT_HINT = 'Keep the collection schema plain and enforce this rule in the API input schema.';\nconst OPEN_OBJECT_HINT =\n '`z.record()`, `z.looseObject()` and `.catchall()` are not storable: every stored object is closed. Declare fixed properties, or store an array of `{ key, value }` objects.';\n\nconst KEYWORD_HINTS: Record<string, string> = {\n anyOf: NULLABLE_HINT,\n oneOf: NULLABLE_HINT,\n allOf: '`z.intersection()` / `.and()` is not storable. Merge the objects with `.extend()`.',\n not: 'Negated schemas are not storable.',\n default: '`.default()` / `.prefault()` / `.catch()` is not storable. Apply defaults in the service when building the document.',\n format: `Strings only support the declaration \\`z.string().meta({ format: 'date-time' })\\`, which does not validate or convert dates. Other string formats (\\`z.email()\\`, \\`z.uuid()\\`...) are not storable. ${API_INPUT_HINT}`,\n pattern: `\\`.regex()\\`, \\`.startsWith()\\` and similar patterns are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n minLength: `String length limits are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n maxLength: `String length limits are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n contentEncoding: 'Encoded string content is not storable. Use `z.string()`.',\n const: '`z.literal()` is not storable. Use `z.enum([...])`.',\n exclusiveMinimum: '`.gt()` / `.positive()` (exclusive bounds) are not storable. Use inclusive `.min()` (`.min(1)` for a positive integer).',\n exclusiveMaximum: '`.lt()` / `.negative()` are not storable. Use inclusive `.max()`.',\n multipleOf: `\\`.multipleOf()\\` / \\`.step()\\` is not storable. ${API_INPUT_HINT}`,\n minItems: `Array length limits are not storable. ${API_INPUT_HINT}`,\n maxItems: `Array length limits are not storable. ${API_INPUT_HINT}`,\n uniqueItems: `Array uniqueness is not storable. ${API_INPUT_HINT}`,\n prefixItems: '`z.tuple()` is not storable. Use an object with named fields.',\n propertyNames: OPEN_OBJECT_HINT,\n patternProperties: OPEN_OBJECT_HINT,\n minProperties: OPEN_OBJECT_HINT,\n maxProperties: OPEN_OBJECT_HINT,\n $ref: 'Recursive or shared `$ref` schemas are not storable. Inline the structure or keep child records in their own collection.',\n $defs: 'Recursive or shared `$ref` schemas are not storable. Inline the structure or keep child records in their own collection.',\n readOnly: '`.readonly()` is not storable; remove it from the collection schema.',\n};\n\ntype JsonNode = Record<string, unknown>;\n\nconst encoder = new TextEncoder();\n\nfunction utf8Bytes(value: string): number {\n return encoder.encode(value).length;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction joinPath(base: string, key: string | number): string {\n if (typeof key === 'number') return `${base}[${key}]`;\n return base ? `${base}.${key}` : key;\n}\n\nfunction validFieldName(key: string): string | null {\n if (RESERVED_FIELDS.has(key)) return `\"${key}\" is a system field and cannot be declared.`;\n if (key.length === 0 || key === '[]') return `Field name \"${key}\" is reserved.`;\n if (/[.$\\\\]/.test(key)) return `Field name \"${key}\" must not contain \".\", \"$\" or \"\\\\\".`;\n return null;\n}\n\nfunction inferEnumType(values: unknown[]): RecordSchemaType | null {\n if (values.length === 0) return null;\n if (values.every((value) => typeof value === 'string')) return 'string';\n if (values.every((value) => typeof value === 'boolean')) return 'boolean';\n if (values.every((value) => typeof value === 'number')) {\n return values.every((value) => Number.isInteger(value)) ? 'integer' : 'number';\n }\n return null;\n}\n\nfunction normalizeNode(node: unknown, path: string, depth: number, issues: SchemaIssue[]): RecordSchema | null {\n if (!isPlainObject(node)) {\n issues.push({ path, message: 'Expected a schema object.' });\n return null;\n }\n if (depth > SCHEMA_LIMITS.depth) {\n issues.push({ path, message: `Nesting deeper than ${SCHEMA_LIMITS.depth} levels is not storable. Flatten the structure.` });\n return null;\n }\n\n let valid = true;\n for (const key of Object.keys(node)) {\n if (KEPT_KEYWORDS.has(key) || (depth === 0 && key === '$schema')) continue;\n valid = false;\n issues.push({\n path,\n message: `\\`${key}\\` is not supported. ${KEYWORD_HINTS[key] ?? 'Only type, properties, items, enum, minimum, maximum, declared format, title and description are storable; remove this constraint from the collection schema.'}`,\n });\n }\n\n const rawEnum = Array.isArray(node.enum) ? node.enum : undefined;\n let type = node.type;\n if (type === undefined && rawEnum) type = inferEnumType(rawEnum) ?? undefined;\n if (Array.isArray(type)) {\n issues.push({ path, message: `A field must have one type, got [${type.join(', ')}]. ${NULLABLE_HINT}` });\n return null;\n }\n if (type === 'null') {\n issues.push({ path, message: '`z.null()` is not storable. Make the field optional and leave it out.' });\n return null;\n }\n if (typeof type !== 'string' || !SCHEMA_TYPES.has(type)) {\n if (type === undefined && !('anyOf' in node) && !('oneOf' in node) && !('allOf' in node)) {\n issues.push({\n path,\n message: 'Every field needs a concrete type; `z.any()`, `z.unknown()` and `z.json()` are not storable. Declare the actual shape.',\n });\n }\n return null;\n }\n\n const out: RecordSchema = { type: type as RecordSchemaType };\n const format = node.format;\n if (format !== undefined) {\n if ((type === 'integer' && format === 'int32') || (type === 'number' && (format === 'float' || format === 'double')) || (type === 'string' && format === 'date-time')) {\n out.format = format;\n } else {\n issues.push({\n path,\n message: type === 'string'\n ? KEYWORD_HINTS.format\n : '`format` must be \"int32\" on integer fields, \"float\" / \"double\" on number fields, or \"date-time\" on string fields. Other types and formats are not storable.',\n });\n valid = false;\n }\n }\n for (const key of ['title', 'description'] as const) {\n const value = node[key];\n if (value === undefined) continue;\n const limit = key === 'title' ? SCHEMA_LIMITS.title : SCHEMA_LIMITS.description;\n // UNS measures these with Go len(): UTF-8 bytes, so CJK text uses 3 per character.\n if (typeof value !== 'string' || utf8Bytes(value) > limit) {\n issues.push({ path, message: `\\`${key}\\` must be a string of at most ${limit} UTF-8 bytes.` });\n valid = false;\n } else if (value) {\n out[key] = value;\n }\n }\n\n if (type === 'object') {\n if (node.additionalProperties !== undefined && node.additionalProperties !== false) {\n issues.push({ path, message: OPEN_OBJECT_HINT });\n valid = false;\n }\n const rawProperties = isPlainObject(node.properties) ? node.properties : {};\n const names = Object.keys(rawProperties);\n if (names.length > SCHEMA_LIMITS.properties) {\n issues.push({ path, message: `More than ${SCHEMA_LIMITS.properties} properties is not storable. Split the object.` });\n valid = false;\n }\n const properties: Record<string, RecordSchema> = {};\n for (const name of names) {\n const fieldPath = joinPath(path, name);\n const nameProblem = validFieldName(name);\n if (nameProblem) {\n issues.push({ path: fieldPath, message: nameProblem });\n valid = false;\n continue;\n }\n const child = normalizeNode(rawProperties[name], fieldPath, depth + 1, issues);\n if (child) properties[name] = child;\n else valid = false;\n }\n out.properties = properties;\n const required = Array.isArray(node.required)\n ? [...new Set(node.required.filter((name): name is string => typeof name === 'string' && name in rawProperties))].sort()\n : [];\n if (required.length > 0) out.required = required;\n out.additionalProperties = false;\n } else if (node.properties !== undefined || node.required !== undefined || node.additionalProperties !== undefined) {\n issues.push({ path, message: 'Only objects may declare properties.' });\n valid = false;\n }\n\n if (type === 'array') {\n const items = node.items;\n if (!isPlainObject(items)) {\n issues.push({ path, message: 'Arrays need one item schema (`z.array(item)`).' });\n valid = false;\n } else {\n const child = normalizeNode(items, `${path}[]`, depth + 1, issues);\n if (child) out.items = child;\n else valid = false;\n }\n }\n\n if (rawEnum) {\n const values: EnumValue[] = [];\n for (const value of rawEnum) {\n const scalar = typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n const fits =\n scalar &&\n (type === 'string'\n ? typeof value === 'string'\n : type === 'boolean'\n ? typeof value === 'boolean'\n : type === 'integer'\n ? Number.isInteger(value)\n : type === 'number'\n ? typeof value === 'number'\n : false);\n if (!fits) {\n issues.push({ path, message: `Enum value ${JSON.stringify(value)} does not match type ${type}.` });\n valid = false;\n } else if (!values.some((existing) => existing === value)) {\n values.push(value as EnumValue);\n }\n }\n if (values.length > SCHEMA_LIMITS.enumValues) {\n issues.push({ path, message: `More than ${SCHEMA_LIMITS.enumValues} enum values is not storable. Use a reference collection.` });\n valid = false;\n }\n if (values.length > 0) out.enum = values;\n }\n\n for (const key of ['minimum', 'maximum'] as const) {\n const value = node[key];\n if (value === undefined) continue;\n if (type !== 'number' && type !== 'integer') {\n issues.push({ path, message: `\\`${key}\\` is only valid on numbers.` });\n valid = false;\n continue;\n }\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n issues.push({ path, message: `\\`${key}\\` must be a finite number.` });\n valid = false;\n continue;\n }\n // z.number().int() always emits the safe-integer range; it is not a business bound.\n if (type === 'integer' && Math.abs(value) === SAFE_INTEGER_BOUND) continue;\n out[key] = value;\n }\n if (out.minimum !== undefined && out.maximum !== undefined && out.minimum > out.maximum) {\n issues.push({ path, message: '`minimum` is greater than `maximum`.' });\n valid = false;\n }\n\n return valid ? out : null;\n}\n\n/** Raw `z.toJSONSchema` output; exported for the snapshot tests. */\nexport function zodJsonSchema(schema: z.ZodType): JsonNode {\n return z.toJSONSchema(schema, { io: 'output', unrepresentable: 'throw', cycles: 'throw' }) as JsonNode;\n}\n\n/** Converts a Zod object schema to the UNS record-schema subset or throws `CollectionSchemaError`. */\nexport function toRecordSchema(alias: string, schema: z.ZodType): RecordSchema {\n let raw: JsonNode;\n try {\n raw = zodJsonSchema(schema);\n } catch (error) {\n throw new CollectionSchemaError(alias, [\n {\n path: '',\n message: `${error instanceof Error ? error.message : String(error)}. \\`z.date()\\`, \\`z.bigint()\\`, \\`.transform()\\`, \\`z.map()\\`, \\`z.set()\\`, \\`z.custom()\\` and recursive schemas are not storable; store instants as ISO-8601 UTC strings from \\`toISOString()\\` and dates as \"YYYY-MM-DD\" strings, and keep transforms in the API input schema.`,\n },\n ]);\n }\n const issues: SchemaIssue[] = [];\n const normalized = normalizeNode(raw, '', 0, issues);\n if (normalized && normalized.type !== 'object') {\n issues.push({ path: '', message: 'A collection schema must be `z.object({...})`.' });\n }\n if (issues.length > 0 || !normalized) throw new CollectionSchemaError(alias, issues);\n return normalized;\n}\n\n/** Resolves a dotted business path in a record schema; array levels accept index segments. */\nexport function recordSchemaAt(schema: RecordSchema, path: string): RecordSchema | undefined {\n let current: RecordSchema | undefined = schema;\n for (const segment of path.split('.')) {\n if (!current) return undefined;\n if (current.type === 'array' && isArraySegment(segment)) {\n current = current.items;\n } else if (current.type === 'object') {\n current = current.properties?.[segment];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\nfunction isArraySegment(segment: string): boolean {\n return /^(?:\\d+|\\$|\\$\\[[A-Za-z0-9_]*\\])$/.test(segment);\n}\n\n/**\n * Index paths follow object properties only: a path that continues past an\n * array (`items.sku`) would index values inside array items, which UNS\n * expression indexes cannot do.\n */\nfunction indexPathProblem(alias: string, schema: RecordSchema, path: string, kind: 'btree' | 'gin'): string | null {\n const segments = path.split('.');\n let current: RecordSchema | undefined = schema;\n for (const [position, segment] of segments.entries()) {\n if (current?.type === 'array') {\n const arrayPath = segments.slice(0, position).join('.');\n return `\"${path}\" reaches into the items of array \"${arrayPath}\"; index the array itself with kind: \"gin\", or copy the value to a top-level field.`;\n }\n current = current?.type === 'object' ? current.properties?.[segment] : undefined;\n if (!current) return `\"${path}\" is not a declared field of \"${alias}\".`;\n }\n const target = current as RecordSchema;\n if (kind === 'btree' && (target.type === 'object' || target.type === 'array')) {\n return `\"${path}\" is an ${target.type}; index a scalar field or use kind: \"gin\".`;\n }\n if (kind === 'gin' && target.type !== 'object' && target.type !== 'array') {\n return `\"${path}\" is a ${target.type}; a GIN index covers an object or array field.`;\n }\n return null;\n}\n\n/** A TTL index expires records by one integer field of Unix milliseconds. */\nfunction ttlProblem(alias: string, schema: RecordSchema, index: IndexSpec, kind: 'btree' | 'gin'): string | null {\n const seconds = index.expireAfterSeconds as number;\n if (!Number.isInteger(seconds) || seconds < SCHEMA_LIMITS.minExpireAfterSeconds || seconds > SCHEMA_LIMITS.maxExpireAfterSeconds) {\n return `\\`expireAfterSeconds\\` is an integer from ${SCHEMA_LIMITS.minExpireAfterSeconds} to ${SCHEMA_LIMITS.maxExpireAfterSeconds} (one year).`;\n }\n if (index.path === undefined || kind !== 'btree' || index.unique) return 'A TTL index covers a single `path` and is neither unique nor GIN.';\n const target = recordSchemaAt(schema, index.path);\n if (target?.type !== 'integer') {\n return `TTL field \"${index.path}\" of \"${alias}\" must be declared \\`z.number().int()\\` holding Unix milliseconds (e.g. \\`Date.now()\\`).`;\n }\n return null;\n}\n\nfunction normalizeIndexes(alias: string, indexes: readonly IndexSpec[], schema: RecordSchema, issues: SchemaIssue[]): NormalizedIndex[] {\n const out: NormalizedIndex[] = [];\n const seen = new Set<string>();\n let ttl = 0;\n if (indexes.length > SCHEMA_LIMITS.indexes) {\n issues.push({ path: 'indexes', message: `At most ${SCHEMA_LIMITS.indexes} indexes per collection.` });\n }\n indexes.forEach((index, position) => {\n const at = `indexes[${position}]`;\n const paths = index.paths ?? (index.path !== undefined ? [index.path] : []);\n if ((index.path !== undefined) === (index.paths !== undefined)) {\n issues.push({ path: at, message: 'Set exactly one of `path` or `paths`.' });\n return;\n }\n if (paths.length === 0 || paths.length > SCHEMA_LIMITS.indexPaths) {\n issues.push({ path: at, message: `A compound index has 1–${SCHEMA_LIMITS.indexPaths} paths.` });\n return;\n }\n const kind = index.kind ?? 'btree';\n if (kind !== 'btree' && kind !== 'gin') {\n issues.push({ path: at, message: '`kind` is \"btree\" or \"gin\".' });\n return;\n }\n if (kind === 'gin' && (paths.length !== 1 || index.unique)) {\n issues.push({ path: at, message: 'A GIN index covers one object/array path and cannot be unique.' });\n return;\n }\n if (new Set(paths).size !== paths.length) {\n issues.push({ path: at, message: 'A compound index lists each path once.' });\n return;\n }\n for (const fieldPath of paths) {\n const problem = indexPathProblem(alias, schema, fieldPath, kind);\n if (problem) {\n issues.push({ path: at, message: problem });\n return;\n }\n }\n if (index.expireAfterSeconds !== undefined) {\n const problem = ttlProblem(alias, schema, index, kind);\n if (problem) {\n issues.push({ path: at, message: problem });\n return;\n }\n ttl += 1;\n if (ttl > SCHEMA_LIMITS.ttlIndexes) {\n issues.push({ path: at, message: 'A collection has at most one TTL index (`expireAfterSeconds`).' });\n return;\n }\n }\n const normalized: NormalizedIndex = index.paths ? { paths: [...paths] } : { path: paths[0] };\n if (index.unique) normalized.unique = true;\n if (kind === 'gin') normalized.kind = 'gin';\n if (index.expireAfterSeconds !== undefined) normalized.expireAfterSeconds = index.expireAfterSeconds;\n const key = JSON.stringify(normalized);\n if (!seen.has(key)) {\n seen.add(key);\n out.push(normalized);\n }\n });\n // A TTL index is an ordinary B-tree on its path as well: a plain index on the same path would duplicate it.\n const ttlPaths = new Set(out.filter((index) => index.expireAfterSeconds !== undefined).map((index) => index.path));\n return out.filter((index) => index.expireAfterSeconds !== undefined || index.unique || index.kind || !ttlPaths.has(index.path));\n}\n\nconst compiled = new WeakMap<CollectionDefinition, CompiledCollection>();\n\n/** Ensure payload for one declaration; memoized per definition object. */\nexport function compileCollection(definition: CollectionDefinition): CompiledCollection {\n const cached = compiled.get(definition);\n if (cached) return cached;\n if (!ALIAS_PATTERN.test(definition.alias)) {\n throw new CollectionSchemaError(definition.alias, [{ path: 'alias', message: `Alias must match ${ALIAS_PATTERN}.` }]);\n }\n const recordSchema = toRecordSchema(definition.alias, definition.schema);\n const issues: SchemaIssue[] = [];\n const indexes = normalizeIndexes(definition.alias, definition.indexes, recordSchema, issues);\n if (issues.length > 0) throw new CollectionSchemaError(definition.alias, issues);\n const result: CompiledCollection = {\n alias: definition.alias,\n recordSchema,\n indexes,\n ...(definition.description ? { description: definition.description } : {}),\n };\n compiled.set(definition, result);\n return result;\n}\n\n/* ------------------------------------------------------------------ */\n/* Write validation */\n/* ------------------------------------------------------------------ */\n\ntype IssuePath = (string | number)[];\n\nfunction unknownKeyIssues(schema: RecordSchema | undefined, value: unknown, path: IssuePath, out: z.core.$ZodIssue[]) {\n if (!schema) return;\n if (schema.type === 'object' && isPlainObject(value)) {\n const properties = schema.properties ?? {};\n const unknown = Object.keys(value).filter((key) => !(key in properties));\n if (unknown.length > 0) {\n out.push({\n code: 'unrecognized_keys',\n keys: unknown,\n path,\n message: `Unknown field${unknown.length > 1 ? 's' : ''} ${unknown.map((key) => `\"${key}\"`).join(', ')}: declare ${unknown.length > 1 ? 'them' : 'it'} in the collection schema first.`,\n input: value,\n } as z.core.$ZodIssue);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key in properties) unknownKeyIssues(properties[key], child, [...path, key], out);\n }\n } else if (schema.type === 'array' && Array.isArray(value)) {\n value.forEach((item, index) => unknownKeyIssues(schema.items, item, [...path, index], out));\n }\n}\n\nfunction strictParse<T>(zodSchema: z.ZodType<T>, recordSchema: RecordSchema | undefined, value: unknown, path: IssuePath): T {\n const issues: z.core.$ZodIssue[] = [];\n unknownKeyIssues(recordSchema, value, path, issues);\n const result = zodSchema.safeParse(value);\n if (!result.success) {\n for (const issue of result.error.issues) issues.push({ ...issue, path: [...path, ...issue.path] } as z.core.$ZodIssue);\n }\n if (issues.length > 0) throw new z.ZodError(issues);\n return result.data as T;\n}\n\nfunction zodAt(schema: z.ZodType, path: string): z.ZodType | undefined {\n let current: z.ZodType | undefined = schema;\n for (const segment of path.split('.')) {\n while (current instanceof z.ZodOptional) current = current.unwrap() as z.ZodType;\n if (current instanceof z.ZodObject) {\n current = (current.shape as Record<string, z.ZodType>)[segment];\n } else if (current instanceof z.ZodArray && isArraySegment(segment)) {\n current = current.element as z.ZodType;\n } else {\n return undefined;\n }\n if (!current) return undefined;\n }\n return current;\n}\n\nfunction validationError(path: IssuePath, message: string, input: unknown): z.ZodError {\n return new z.ZodError([{ code: 'custom', path, message, input } as z.core.$ZodIssue]);\n}\n\n/** Splits `_id` / `_meta` off a document and strictly validates the body. */\nexport function validateDocument(\n definition: CollectionDefinition,\n document: Record<string, unknown>,\n): { id?: string; data: Record<string, unknown> } {\n if (!isPlainObject(document)) throw validationError([], 'Expected a document object.', document);\n const { _id, _meta, ...body } = document;\n void _meta;\n if (_id !== undefined && (typeof _id !== 'string' || _id.length === 0 || _id.length > 128)) {\n throw validationError(['_id'], '`_id` must be a string of 1–128 characters.', _id);\n }\n const { recordSchema } = compileCollection(definition);\n const data = strictParse(definition.schema, recordSchema, body, []) as Record<string, unknown>;\n return { ...(typeof _id === 'string' ? { id: _id } : {}), data };\n}\n\n/**\n * Validates `data` of a transaction step. Fields filled by `bindings`\n * (`data.<field>...`) are checked only for being declared; every literal\n * field is strictly validated, and other required fields must be present.\n */\nexport function validateStepData(\n definition: CollectionDefinition,\n data: Record<string, unknown>,\n boundFields: readonly string[],\n): Record<string, unknown> {\n if (!isPlainObject(data)) throw validationError(['data'], 'Expected a document object.', data);\n if ('_id' in data || '_meta' in data) {\n throw validationError(['data', '_id' in data ? '_id' : '_meta'], 'A transaction step sets the record ID with `id`, not `data._id`; `_meta` is read-only.', data);\n }\n const { recordSchema } = compileCollection(definition);\n const properties = recordSchema.properties ?? {};\n const bound = new Set(boundFields.filter((field) => field in properties));\n const unknownBound = boundFields.filter((field) => !(field in properties));\n if (unknownBound.length > 0) {\n throw validationError(['bindings'], `Bound field${unknownBound.length > 1 ? 's' : ''} ${unknownBound.join(', ')} not declared in \"${definition.alias}\".`, boundFields);\n }\n if (bound.size === 0) return strictParse(definition.schema, recordSchema, data, ['data']) as Record<string, unknown>;\n\n const literal = Object.fromEntries(Object.entries(data).filter(([key]) => !bound.has(key)));\n const omit = Object.fromEntries([...bound].map((field) => [field, true as const]));\n const literalSchema: RecordSchema = {\n ...recordSchema,\n properties: Object.fromEntries(Object.entries(properties).filter(([key]) => !bound.has(key))),\n required: recordSchema.required?.filter((key) => !bound.has(key)),\n };\n const parsed = strictParse(definition.schema.omit(omit as never), literalSchema, literal, ['data']) as Record<string, unknown>;\n const boundValues = Object.fromEntries(Object.entries(data).filter(([key]) => bound.has(key)));\n return { ...parsed, ...boundValues };\n}\n\nconst VALUE_OPERATORS = new Set(['$set', '$setOnInsert']);\nconst ELEMENT_OPERATORS = new Set(['$push', '$addToSet']);\nconst NUMERIC_OPERATORS = new Set(['$inc', '$mul']);\n\n/** Validates update-operator documents against the declaration (paths and values). */\nexport function validateUpdate(definition: CollectionDefinition, update: Record<string, unknown>): Record<string, unknown> {\n if (!isPlainObject(update) || Object.keys(update).length === 0) {\n throw validationError([], 'An update needs at least one operator such as `$set`.', update);\n }\n const { recordSchema } = compileCollection(definition);\n const out: Record<string, unknown> = {};\n\n for (const [operator, fields] of Object.entries(update)) {\n if (!operator.startsWith('$')) {\n throw validationError([operator], \"Updates use operators (`{ $set: { status: \\\"DONE\\\" } }`); use replaceOne() to replace a whole document.\", update);\n }\n if (!isPlainObject(fields)) throw validationError([operator], `\\`${operator}\\` takes an object of field paths.`, fields);\n const next: Record<string, unknown> = {};\n\n for (const [path, value] of Object.entries(fields)) {\n const issuePath = [operator, path];\n if (path === '_id' || path === '_meta' || path.startsWith('_meta.')) {\n throw validationError(issuePath, '`_id` and `_meta` are read-only.', value);\n }\n const target = recordSchemaAt(recordSchema, path);\n const zodTarget = zodAt(definition.schema, path);\n if (!target || !zodTarget) {\n throw validationError(issuePath, `\"${path}\" is not a declared field of \"${definition.alias}\".`, value);\n }\n\n if (VALUE_OPERATORS.has(operator)) {\n if (value === undefined) continue;\n next[path] = strictParse(zodTarget, target, value, issuePath);\n } else if (ELEMENT_OPERATORS.has(operator)) {\n const element = zodTarget instanceof z.ZodOptional ? zodTarget.unwrap() : zodTarget;\n if (target.type !== 'array' || !(element instanceof z.ZodArray)) {\n throw validationError(issuePath, `\\`${operator}\\` needs an array field; \"${path}\" is ${target.type}.`, value);\n }\n const each = isPlainObject(value) && Array.isArray(value.$each);\n const items = each ? ((value as { $each: unknown[] }).$each) : [value];\n const parsed = items.map((item, index) =>\n strictParse(element.element as z.ZodType, target.items, item, each ? [...issuePath, '$each', index] : issuePath),\n );\n next[path] = each ? { ...(value as Record<string, unknown>), $each: parsed } : parsed[0];\n } else if (NUMERIC_OPERATORS.has(operator)) {\n if (target.type !== 'number' && target.type !== 'integer') {\n throw validationError(issuePath, `\\`${operator}\\` needs a numeric field; \"${path}\" is ${target.type}.`, value);\n }\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw validationError(issuePath, `\\`${operator}\\` needs a finite number.`, value);\n }\n next[path] = value;\n } else if (operator === '$rename') {\n if (typeof value !== 'string' || !recordSchemaAt(recordSchema, value)) {\n throw validationError(issuePath, `\\`$rename\\` target \"${String(value)}\" is not a declared field.`, value);\n }\n next[path] = value;\n } else {\n // $unset, $min, $max, $currentDate, $pop, $pull, $pullAll: the path is\n // declared; UNS validates the resulting document.\n next[path] = value;\n }\n }\n if (Object.keys(next).length > 0) out[operator] = next;\n }\n if (Object.keys(out).length === 0) {\n throw validationError([], 'Nothing to update: undefined values are dropped; clear a field with `$unset`.', update);\n }\n return out;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/data/schema.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Zod 4 → UNS record schema normalizer, plus write-time validation.\n *\n * UNS stores one closed JSON-schema subset per collection: `type`,\n * `properties`, `required`, `additionalProperties: false`, `items`, `enum`,\n * `minimum`, `maximum`, declared `format`, `title`, `description`. `toRecordSchema` converts the\n * `z.toJSONSchema` output into exactly that subset and rejects every other\n * keyword with a concrete replacement, so a declaration that cannot be stored\n * fails when it is compiled (an App can compile its declarations at build\n * time) instead of on the first request.\n */\nimport { z } from 'zod';\nimport { ALIAS_PATTERN, type CollectionDefinition, type IndexSpec } from './define.js';\n\nexport type RecordSchemaType = 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean';\nexport type EnumValue = string | number | boolean;\n\nexport interface RecordSchema {\n type: RecordSchemaType;\n /** Display annotation; does not add range/date checks or convert stored values. */\n format?: 'int32' | 'float' | 'double' | 'date-time';\n title?: string;\n description?: string;\n properties?: Record<string, RecordSchema>;\n required?: string[];\n additionalProperties?: false;\n items?: RecordSchema;\n enum?: EnumValue[];\n minimum?: number;\n maximum?: number;\n}\n\nexport interface NormalizedIndex {\n path?: string;\n paths?: string[];\n unique?: true;\n kind?: 'gin';\n expireAfterSeconds?: number;\n}\n\n/** One ensure item, exactly as it is sent to `/uns/app/collections/ensure`. */\nexport interface CompiledCollection {\n alias: string;\n recordSchema: RecordSchema;\n indexes: NormalizedIndex[];\n description?: string;\n}\n\nexport interface SchemaIssue {\n path: string;\n message: string;\n}\n\nexport class CollectionSchemaError extends Error {\n readonly alias: string;\n readonly issues: SchemaIssue[];\n\n constructor(alias: string, issues: SchemaIssue[]) {\n super(\n [\n `Collection \"${alias}\" cannot be stored in UNS:`,\n ...issues.map((issue) => ` - ${issue.path || '(root)'}: ${issue.message}`),\n ].join('\\n'),\n );\n this.name = 'CollectionSchemaError';\n this.alias = alias;\n this.issues = issues;\n }\n}\n\n/** UNS limits (unsmeta Schema.validate and collection indexes); title/description are UTF-8 bytes. */\nexport const SCHEMA_LIMITS = {\n depth: 8,\n properties: 128,\n enumValues: 100,\n title: 512,\n description: 2048,\n indexes: 16,\n indexPaths: 3,\n ttlIndexes: 1,\n minExpireAfterSeconds: 60,\n maxExpireAfterSeconds: 31_536_000,\n} as const;\n\nconst SAFE_INTEGER_BOUND = Number.MAX_SAFE_INTEGER;\n// 新声明必须携带明确数值格式;只补注解,不改变范围校验或已有集合。\nconst DEFAULT_NUMERIC_FORMAT = { integer: 'int32', number: 'double' } as const;\nconst SCHEMA_TYPES = new Set<string>(['object', 'array', 'string', 'number', 'integer', 'boolean']);\nconst KEPT_KEYWORDS = new Set([\n 'type',\n 'format',\n 'title',\n 'description',\n 'properties',\n 'required',\n 'additionalProperties',\n 'items',\n 'enum',\n 'minimum',\n 'maximum',\n]);\nconst RESERVED_FIELDS = new Set(['_id', '_meta']);\n\nconst NULLABLE_HINT =\n '`.nullable()`, `.nullish()` and `z.union()` are not storable. Make the field `.optional()` and leave it out instead of storing null; model alternatives as one type or as separate optional fields.';\nconst API_INPUT_HINT = 'Keep the collection schema plain and enforce this rule in the API input schema.';\nconst OPEN_OBJECT_HINT =\n '`z.record()`, `z.looseObject()` and `.catchall()` are not storable: every stored object is closed. Declare fixed properties, or store an array of `{ key, value }` objects.';\n\nconst KEYWORD_HINTS: Record<string, string> = {\n anyOf: NULLABLE_HINT,\n oneOf: NULLABLE_HINT,\n allOf: '`z.intersection()` / `.and()` is not storable. Merge the objects with `.extend()`.',\n not: 'Negated schemas are not storable.',\n default: '`.default()` / `.prefault()` / `.catch()` is not storable. Apply defaults in the service when building the document.',\n format: `Strings only support the declaration \\`z.string().meta({ format: 'date-time' })\\`, which does not validate or convert dates. Other string formats (\\`z.email()\\`, \\`z.uuid()\\`...) are not storable. ${API_INPUT_HINT}`,\n pattern: `\\`.regex()\\`, \\`.startsWith()\\` and similar patterns are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n minLength: `String length limits are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n maxLength: `String length limits are not storable. Use \\`z.string()\\`. ${API_INPUT_HINT}`,\n contentEncoding: 'Encoded string content is not storable. Use `z.string()`.',\n const: '`z.literal()` is not storable. Use `z.enum([...])`.',\n exclusiveMinimum: '`.gt()` / `.positive()` (exclusive bounds) are not storable. Use inclusive `.min()` (`.min(1)` for a positive integer).',\n exclusiveMaximum: '`.lt()` / `.negative()` are not storable. Use inclusive `.max()`.',\n multipleOf: `\\`.multipleOf()\\` / \\`.step()\\` is not storable. ${API_INPUT_HINT}`,\n minItems: `Array length limits are not storable. ${API_INPUT_HINT}`,\n maxItems: `Array length limits are not storable. ${API_INPUT_HINT}`,\n uniqueItems: `Array uniqueness is not storable. ${API_INPUT_HINT}`,\n prefixItems: '`z.tuple()` is not storable. Use an object with named fields.',\n propertyNames: OPEN_OBJECT_HINT,\n patternProperties: OPEN_OBJECT_HINT,\n minProperties: OPEN_OBJECT_HINT,\n maxProperties: OPEN_OBJECT_HINT,\n $ref: 'Recursive or shared `$ref` schemas are not storable. Inline the structure or keep child records in their own collection.',\n $defs: 'Recursive or shared `$ref` schemas are not storable. Inline the structure or keep child records in their own collection.',\n readOnly: '`.readonly()` is not storable; remove it from the collection schema.',\n};\n\ntype JsonNode = Record<string, unknown>;\n\nconst encoder = new TextEncoder();\n\nfunction utf8Bytes(value: string): number {\n return encoder.encode(value).length;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction joinPath(base: string, key: string | number): string {\n if (typeof key === 'number') return `${base}[${key}]`;\n return base ? `${base}.${key}` : key;\n}\n\nfunction validFieldName(key: string): string | null {\n if (RESERVED_FIELDS.has(key)) return `\"${key}\" is a system field and cannot be declared.`;\n if (key.length === 0 || key === '[]') return `Field name \"${key}\" is reserved.`;\n if (/[.$\\\\]/.test(key)) return `Field name \"${key}\" must not contain \".\", \"$\" or \"\\\\\".`;\n return null;\n}\n\nfunction inferEnumType(values: unknown[]): RecordSchemaType | null {\n if (values.length === 0) return null;\n if (values.every((value) => typeof value === 'string')) return 'string';\n if (values.every((value) => typeof value === 'boolean')) return 'boolean';\n if (values.every((value) => typeof value === 'number')) {\n return values.every((value) => Number.isInteger(value)) ? 'integer' : 'number';\n }\n return null;\n}\n\nfunction normalizeNode(node: unknown, path: string, depth: number, issues: SchemaIssue[]): RecordSchema | null {\n if (!isPlainObject(node)) {\n issues.push({ path, message: 'Expected a schema object.' });\n return null;\n }\n if (depth > SCHEMA_LIMITS.depth) {\n issues.push({ path, message: `Nesting deeper than ${SCHEMA_LIMITS.depth} levels is not storable. Flatten the structure.` });\n return null;\n }\n\n let valid = true;\n for (const key of Object.keys(node)) {\n if (KEPT_KEYWORDS.has(key) || (depth === 0 && key === '$schema')) continue;\n valid = false;\n issues.push({\n path,\n message: `\\`${key}\\` is not supported. ${KEYWORD_HINTS[key] ?? 'Only type, properties, items, enum, minimum, maximum, declared format, title and description are storable; remove this constraint from the collection schema.'}`,\n });\n }\n\n const rawEnum = Array.isArray(node.enum) ? node.enum : undefined;\n let type = node.type;\n if (type === undefined && rawEnum) type = inferEnumType(rawEnum) ?? undefined;\n if (Array.isArray(type)) {\n issues.push({ path, message: `A field must have one type, got [${type.join(', ')}]. ${NULLABLE_HINT}` });\n return null;\n }\n if (type === 'null') {\n issues.push({ path, message: '`z.null()` is not storable. Make the field optional and leave it out.' });\n return null;\n }\n if (typeof type !== 'string' || !SCHEMA_TYPES.has(type)) {\n if (type === undefined && !('anyOf' in node) && !('oneOf' in node) && !('allOf' in node)) {\n issues.push({\n path,\n message: 'Every field needs a concrete type; `z.any()`, `z.unknown()` and `z.json()` are not storable. Declare the actual shape.',\n });\n }\n return null;\n }\n\n const out: RecordSchema = { type: type as RecordSchemaType };\n const format = node.format === undefined && (type === 'integer' || type === 'number')\n ? DEFAULT_NUMERIC_FORMAT[type]\n : node.format;\n if (format !== undefined) {\n if ((type === 'integer' && format === 'int32') || (type === 'number' && (format === 'float' || format === 'double')) || (type === 'string' && format === 'date-time')) {\n out.format = format;\n } else {\n issues.push({\n path,\n message: type === 'string'\n ? KEYWORD_HINTS.format\n : '`format` must be \"int32\" on integer fields, \"float\" / \"double\" on number fields, or \"date-time\" on string fields. Other types and formats are not storable.',\n });\n valid = false;\n }\n }\n for (const key of ['title', 'description'] as const) {\n const value = node[key];\n if (value === undefined) continue;\n const limit = key === 'title' ? SCHEMA_LIMITS.title : SCHEMA_LIMITS.description;\n // UNS measures these with Go len(): UTF-8 bytes, so CJK text uses 3 per character.\n if (typeof value !== 'string' || utf8Bytes(value) > limit) {\n issues.push({ path, message: `\\`${key}\\` must be a string of at most ${limit} UTF-8 bytes.` });\n valid = false;\n } else if (value) {\n out[key] = value;\n }\n }\n\n if (type === 'object') {\n if (node.additionalProperties !== undefined && node.additionalProperties !== false) {\n issues.push({ path, message: OPEN_OBJECT_HINT });\n valid = false;\n }\n const rawProperties = isPlainObject(node.properties) ? node.properties : {};\n const names = Object.keys(rawProperties);\n if (names.length > SCHEMA_LIMITS.properties) {\n issues.push({ path, message: `More than ${SCHEMA_LIMITS.properties} properties is not storable. Split the object.` });\n valid = false;\n }\n const properties: Record<string, RecordSchema> = {};\n for (const name of names) {\n const fieldPath = joinPath(path, name);\n const nameProblem = validFieldName(name);\n if (nameProblem) {\n issues.push({ path: fieldPath, message: nameProblem });\n valid = false;\n continue;\n }\n const child = normalizeNode(rawProperties[name], fieldPath, depth + 1, issues);\n if (child) properties[name] = child;\n else valid = false;\n }\n out.properties = properties;\n const required = Array.isArray(node.required)\n ? [...new Set(node.required.filter((name): name is string => typeof name === 'string' && name in rawProperties))].sort()\n : [];\n if (required.length > 0) out.required = required;\n out.additionalProperties = false;\n } else if (node.properties !== undefined || node.required !== undefined || node.additionalProperties !== undefined) {\n issues.push({ path, message: 'Only objects may declare properties.' });\n valid = false;\n }\n\n if (type === 'array') {\n const items = node.items;\n if (!isPlainObject(items)) {\n issues.push({ path, message: 'Arrays need one item schema (`z.array(item)`).' });\n valid = false;\n } else {\n const child = normalizeNode(items, `${path}[]`, depth + 1, issues);\n if (child) out.items = child;\n else valid = false;\n }\n }\n\n if (rawEnum) {\n const values: EnumValue[] = [];\n for (const value of rawEnum) {\n const scalar = typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\n const fits =\n scalar &&\n (type === 'string'\n ? typeof value === 'string'\n : type === 'boolean'\n ? typeof value === 'boolean'\n : type === 'integer'\n ? Number.isInteger(value)\n : type === 'number'\n ? typeof value === 'number'\n : false);\n if (!fits) {\n issues.push({ path, message: `Enum value ${JSON.stringify(value)} does not match type ${type}.` });\n valid = false;\n } else if (!values.some((existing) => existing === value)) {\n values.push(value as EnumValue);\n }\n }\n if (values.length > SCHEMA_LIMITS.enumValues) {\n issues.push({ path, message: `More than ${SCHEMA_LIMITS.enumValues} enum values is not storable. Use a reference collection.` });\n valid = false;\n }\n if (values.length > 0) out.enum = values;\n }\n\n for (const key of ['minimum', 'maximum'] as const) {\n const value = node[key];\n if (value === undefined) continue;\n if (type !== 'number' && type !== 'integer') {\n issues.push({ path, message: `\\`${key}\\` is only valid on numbers.` });\n valid = false;\n continue;\n }\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n issues.push({ path, message: `\\`${key}\\` must be a finite number.` });\n valid = false;\n continue;\n }\n // z.number().int() always emits the safe-integer range; it is not a business bound.\n if (type === 'integer' && Math.abs(value) === SAFE_INTEGER_BOUND) continue;\n out[key] = value;\n }\n if (out.minimum !== undefined && out.maximum !== undefined && out.minimum > out.maximum) {\n issues.push({ path, message: '`minimum` is greater than `maximum`.' });\n valid = false;\n }\n\n return valid ? out : null;\n}\n\n/** Raw `z.toJSONSchema` output; exported for the snapshot tests. */\nexport function zodJsonSchema(schema: z.ZodType): JsonNode {\n return z.toJSONSchema(schema, { io: 'output', unrepresentable: 'throw', cycles: 'throw' }) as JsonNode;\n}\n\n/** Converts a Zod object schema to the UNS record-schema subset or throws `CollectionSchemaError`. */\nexport function toRecordSchema(alias: string, schema: z.ZodType): RecordSchema {\n let raw: JsonNode;\n try {\n raw = zodJsonSchema(schema);\n } catch (error) {\n throw new CollectionSchemaError(alias, [\n {\n path: '',\n message: `${error instanceof Error ? error.message : String(error)}. \\`z.date()\\`, \\`z.bigint()\\`, \\`.transform()\\`, \\`z.map()\\`, \\`z.set()\\`, \\`z.custom()\\` and recursive schemas are not storable; store instants as ISO-8601 UTC strings from \\`toISOString()\\` and dates as \"YYYY-MM-DD\" strings, and keep transforms in the API input schema.`,\n },\n ]);\n }\n const issues: SchemaIssue[] = [];\n const normalized = normalizeNode(raw, '', 0, issues);\n if (normalized && normalized.type !== 'object') {\n issues.push({ path: '', message: 'A collection schema must be `z.object({...})`.' });\n }\n if (issues.length > 0 || !normalized) throw new CollectionSchemaError(alias, issues);\n return normalized;\n}\n\n/** Resolves a dotted business path in a record schema; array levels accept index segments. */\nexport function recordSchemaAt(schema: RecordSchema, path: string): RecordSchema | undefined {\n let current: RecordSchema | undefined = schema;\n for (const segment of path.split('.')) {\n if (!current) return undefined;\n if (current.type === 'array' && isArraySegment(segment)) {\n current = current.items;\n } else if (current.type === 'object') {\n current = current.properties?.[segment];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\nfunction isArraySegment(segment: string): boolean {\n return /^(?:\\d+|\\$|\\$\\[[A-Za-z0-9_]*\\])$/.test(segment);\n}\n\n/**\n * Index paths follow object properties only: a path that continues past an\n * array (`items.sku`) would index values inside array items, which UNS\n * expression indexes cannot do.\n */\nfunction indexPathProblem(alias: string, schema: RecordSchema, path: string, kind: 'btree' | 'gin'): string | null {\n const segments = path.split('.');\n let current: RecordSchema | undefined = schema;\n for (const [position, segment] of segments.entries()) {\n if (current?.type === 'array') {\n const arrayPath = segments.slice(0, position).join('.');\n return `\"${path}\" reaches into the items of array \"${arrayPath}\"; index the array itself with kind: \"gin\", or copy the value to a top-level field.`;\n }\n current = current?.type === 'object' ? current.properties?.[segment] : undefined;\n if (!current) return `\"${path}\" is not a declared field of \"${alias}\".`;\n }\n const target = current as RecordSchema;\n if (kind === 'btree' && (target.type === 'object' || target.type === 'array')) {\n return `\"${path}\" is an ${target.type}; index a scalar field or use kind: \"gin\".`;\n }\n if (kind === 'gin' && target.type !== 'object' && target.type !== 'array') {\n return `\"${path}\" is a ${target.type}; a GIN index covers an object or array field.`;\n }\n return null;\n}\n\n/** A TTL index expires records by one integer field of Unix milliseconds. */\nfunction ttlProblem(alias: string, schema: RecordSchema, index: IndexSpec, kind: 'btree' | 'gin'): string | null {\n const seconds = index.expireAfterSeconds as number;\n if (!Number.isInteger(seconds) || seconds < SCHEMA_LIMITS.minExpireAfterSeconds || seconds > SCHEMA_LIMITS.maxExpireAfterSeconds) {\n return `\\`expireAfterSeconds\\` is an integer from ${SCHEMA_LIMITS.minExpireAfterSeconds} to ${SCHEMA_LIMITS.maxExpireAfterSeconds} (one year).`;\n }\n if (index.path === undefined || kind !== 'btree' || index.unique) return 'A TTL index covers a single `path` and is neither unique nor GIN.';\n const target = recordSchemaAt(schema, index.path);\n if (target?.type !== 'integer') {\n return `TTL field \"${index.path}\" of \"${alias}\" must be declared \\`z.number().int()\\` holding Unix milliseconds (e.g. \\`Date.now()\\`).`;\n }\n return null;\n}\n\nfunction normalizeIndexes(alias: string, indexes: readonly IndexSpec[], schema: RecordSchema, issues: SchemaIssue[]): NormalizedIndex[] {\n const out: NormalizedIndex[] = [];\n const seen = new Set<string>();\n let ttl = 0;\n if (indexes.length > SCHEMA_LIMITS.indexes) {\n issues.push({ path: 'indexes', message: `At most ${SCHEMA_LIMITS.indexes} indexes per collection.` });\n }\n indexes.forEach((index, position) => {\n const at = `indexes[${position}]`;\n const paths = index.paths ?? (index.path !== undefined ? [index.path] : []);\n if ((index.path !== undefined) === (index.paths !== undefined)) {\n issues.push({ path: at, message: 'Set exactly one of `path` or `paths`.' });\n return;\n }\n if (paths.length === 0 || paths.length > SCHEMA_LIMITS.indexPaths) {\n issues.push({ path: at, message: `A compound index has 1–${SCHEMA_LIMITS.indexPaths} paths.` });\n return;\n }\n const kind = index.kind ?? 'btree';\n if (kind !== 'btree' && kind !== 'gin') {\n issues.push({ path: at, message: '`kind` is \"btree\" or \"gin\".' });\n return;\n }\n if (kind === 'gin' && (paths.length !== 1 || index.unique)) {\n issues.push({ path: at, message: 'A GIN index covers one object/array path and cannot be unique.' });\n return;\n }\n if (new Set(paths).size !== paths.length) {\n issues.push({ path: at, message: 'A compound index lists each path once.' });\n return;\n }\n for (const fieldPath of paths) {\n const problem = indexPathProblem(alias, schema, fieldPath, kind);\n if (problem) {\n issues.push({ path: at, message: problem });\n return;\n }\n }\n if (index.expireAfterSeconds !== undefined) {\n const problem = ttlProblem(alias, schema, index, kind);\n if (problem) {\n issues.push({ path: at, message: problem });\n return;\n }\n ttl += 1;\n if (ttl > SCHEMA_LIMITS.ttlIndexes) {\n issues.push({ path: at, message: 'A collection has at most one TTL index (`expireAfterSeconds`).' });\n return;\n }\n }\n const normalized: NormalizedIndex = index.paths ? { paths: [...paths] } : { path: paths[0] };\n if (index.unique) normalized.unique = true;\n if (kind === 'gin') normalized.kind = 'gin';\n if (index.expireAfterSeconds !== undefined) normalized.expireAfterSeconds = index.expireAfterSeconds;\n const key = JSON.stringify(normalized);\n if (!seen.has(key)) {\n seen.add(key);\n out.push(normalized);\n }\n });\n // A TTL index is an ordinary B-tree on its path as well: a plain index on the same path would duplicate it.\n const ttlPaths = new Set(out.filter((index) => index.expireAfterSeconds !== undefined).map((index) => index.path));\n return out.filter((index) => index.expireAfterSeconds !== undefined || index.unique || index.kind || !ttlPaths.has(index.path));\n}\n\nconst compiled = new WeakMap<CollectionDefinition, CompiledCollection>();\n\n/** Ensure payload for one declaration; memoized per definition object. */\nexport function compileCollection(definition: CollectionDefinition): CompiledCollection {\n const cached = compiled.get(definition);\n if (cached) return cached;\n if (!ALIAS_PATTERN.test(definition.alias)) {\n throw new CollectionSchemaError(definition.alias, [{ path: 'alias', message: `Alias must match ${ALIAS_PATTERN}.` }]);\n }\n const recordSchema = toRecordSchema(definition.alias, definition.schema);\n const issues: SchemaIssue[] = [];\n const indexes = normalizeIndexes(definition.alias, definition.indexes, recordSchema, issues);\n if (issues.length > 0) throw new CollectionSchemaError(definition.alias, issues);\n const result: CompiledCollection = {\n alias: definition.alias,\n recordSchema,\n indexes,\n ...(definition.description ? { description: definition.description } : {}),\n };\n compiled.set(definition, result);\n return result;\n}\n\n/* ------------------------------------------------------------------ */\n/* Write validation */\n/* ------------------------------------------------------------------ */\n\ntype IssuePath = (string | number)[];\n\nfunction unknownKeyIssues(schema: RecordSchema | undefined, value: unknown, path: IssuePath, out: z.core.$ZodIssue[]) {\n if (!schema) return;\n if (schema.type === 'object' && isPlainObject(value)) {\n const properties = schema.properties ?? {};\n const unknown = Object.keys(value).filter((key) => !(key in properties));\n if (unknown.length > 0) {\n out.push({\n code: 'unrecognized_keys',\n keys: unknown,\n path,\n message: `Unknown field${unknown.length > 1 ? 's' : ''} ${unknown.map((key) => `\"${key}\"`).join(', ')}: declare ${unknown.length > 1 ? 'them' : 'it'} in the collection schema first.`,\n input: value,\n } as z.core.$ZodIssue);\n }\n for (const [key, child] of Object.entries(value)) {\n if (key in properties) unknownKeyIssues(properties[key], child, [...path, key], out);\n }\n } else if (schema.type === 'array' && Array.isArray(value)) {\n value.forEach((item, index) => unknownKeyIssues(schema.items, item, [...path, index], out));\n }\n}\n\nfunction strictParse<T>(zodSchema: z.ZodType<T>, recordSchema: RecordSchema | undefined, value: unknown, path: IssuePath): T {\n const issues: z.core.$ZodIssue[] = [];\n unknownKeyIssues(recordSchema, value, path, issues);\n const result = zodSchema.safeParse(value);\n if (!result.success) {\n for (const issue of result.error.issues) issues.push({ ...issue, path: [...path, ...issue.path] } as z.core.$ZodIssue);\n }\n if (issues.length > 0) throw new z.ZodError(issues);\n return result.data as T;\n}\n\nfunction zodAt(schema: z.ZodType, path: string): z.ZodType | undefined {\n let current: z.ZodType | undefined = schema;\n for (const segment of path.split('.')) {\n while (current instanceof z.ZodOptional) current = current.unwrap() as z.ZodType;\n if (current instanceof z.ZodObject) {\n current = (current.shape as Record<string, z.ZodType>)[segment];\n } else if (current instanceof z.ZodArray && isArraySegment(segment)) {\n current = current.element as z.ZodType;\n } else {\n return undefined;\n }\n if (!current) return undefined;\n }\n return current;\n}\n\nfunction validationError(path: IssuePath, message: string, input: unknown): z.ZodError {\n return new z.ZodError([{ code: 'custom', path, message, input } as z.core.$ZodIssue]);\n}\n\n/** Splits `_id` / `_meta` off a document and strictly validates the body. */\nexport function validateDocument(\n definition: CollectionDefinition,\n document: Record<string, unknown>,\n): { id?: string; data: Record<string, unknown> } {\n if (!isPlainObject(document)) throw validationError([], 'Expected a document object.', document);\n const { _id, _meta, ...body } = document;\n void _meta;\n if (_id !== undefined && (typeof _id !== 'string' || _id.length === 0 || _id.length > 128)) {\n throw validationError(['_id'], '`_id` must be a string of 1–128 characters.', _id);\n }\n const { recordSchema } = compileCollection(definition);\n const data = strictParse(definition.schema, recordSchema, body, []) as Record<string, unknown>;\n return { ...(typeof _id === 'string' ? { id: _id } : {}), data };\n}\n\n/**\n * Validates `data` of a transaction step. Fields filled by `bindings`\n * (`data.<field>...`) are checked only for being declared; every literal\n * field is strictly validated, and other required fields must be present.\n */\nexport function validateStepData(\n definition: CollectionDefinition,\n data: Record<string, unknown>,\n boundFields: readonly string[],\n): Record<string, unknown> {\n if (!isPlainObject(data)) throw validationError(['data'], 'Expected a document object.', data);\n if ('_id' in data || '_meta' in data) {\n throw validationError(['data', '_id' in data ? '_id' : '_meta'], 'A transaction step sets the record ID with `id`, not `data._id`; `_meta` is read-only.', data);\n }\n const { recordSchema } = compileCollection(definition);\n const properties = recordSchema.properties ?? {};\n const bound = new Set(boundFields.filter((field) => field in properties));\n const unknownBound = boundFields.filter((field) => !(field in properties));\n if (unknownBound.length > 0) {\n throw validationError(['bindings'], `Bound field${unknownBound.length > 1 ? 's' : ''} ${unknownBound.join(', ')} not declared in \"${definition.alias}\".`, boundFields);\n }\n if (bound.size === 0) return strictParse(definition.schema, recordSchema, data, ['data']) as Record<string, unknown>;\n\n const literal = Object.fromEntries(Object.entries(data).filter(([key]) => !bound.has(key)));\n const omit = Object.fromEntries([...bound].map((field) => [field, true as const]));\n const literalSchema: RecordSchema = {\n ...recordSchema,\n properties: Object.fromEntries(Object.entries(properties).filter(([key]) => !bound.has(key))),\n required: recordSchema.required?.filter((key) => !bound.has(key)),\n };\n const parsed = strictParse(definition.schema.omit(omit as never), literalSchema, literal, ['data']) as Record<string, unknown>;\n const boundValues = Object.fromEntries(Object.entries(data).filter(([key]) => bound.has(key)));\n return { ...parsed, ...boundValues };\n}\n\nconst VALUE_OPERATORS = new Set(['$set', '$setOnInsert']);\nconst ELEMENT_OPERATORS = new Set(['$push', '$addToSet']);\nconst NUMERIC_OPERATORS = new Set(['$inc', '$mul']);\n\n/** Validates update-operator documents against the declaration (paths and values). */\nexport function validateUpdate(definition: CollectionDefinition, update: Record<string, unknown>): Record<string, unknown> {\n if (!isPlainObject(update) || Object.keys(update).length === 0) {\n throw validationError([], 'An update needs at least one operator such as `$set`.', update);\n }\n const { recordSchema } = compileCollection(definition);\n const out: Record<string, unknown> = {};\n\n for (const [operator, fields] of Object.entries(update)) {\n if (!operator.startsWith('$')) {\n throw validationError([operator], \"Updates use operators (`{ $set: { status: \\\"DONE\\\" } }`); use replaceOne() to replace a whole document.\", update);\n }\n if (!isPlainObject(fields)) throw validationError([operator], `\\`${operator}\\` takes an object of field paths.`, fields);\n const next: Record<string, unknown> = {};\n\n for (const [path, value] of Object.entries(fields)) {\n const issuePath = [operator, path];\n if (path === '_id' || path === '_meta' || path.startsWith('_meta.')) {\n throw validationError(issuePath, '`_id` and `_meta` are read-only.', value);\n }\n const target = recordSchemaAt(recordSchema, path);\n const zodTarget = zodAt(definition.schema, path);\n if (!target || !zodTarget) {\n throw validationError(issuePath, `\"${path}\" is not a declared field of \"${definition.alias}\".`, value);\n }\n\n if (VALUE_OPERATORS.has(operator)) {\n if (value === undefined) continue;\n next[path] = strictParse(zodTarget, target, value, issuePath);\n } else if (ELEMENT_OPERATORS.has(operator)) {\n const element = zodTarget instanceof z.ZodOptional ? zodTarget.unwrap() : zodTarget;\n if (target.type !== 'array' || !(element instanceof z.ZodArray)) {\n throw validationError(issuePath, `\\`${operator}\\` needs an array field; \"${path}\" is ${target.type}.`, value);\n }\n const each = isPlainObject(value) && Array.isArray(value.$each);\n const items = each ? ((value as { $each: unknown[] }).$each) : [value];\n const parsed = items.map((item, index) =>\n strictParse(element.element as z.ZodType, target.items, item, each ? [...issuePath, '$each', index] : issuePath),\n );\n next[path] = each ? { ...(value as Record<string, unknown>), $each: parsed } : parsed[0];\n } else if (NUMERIC_OPERATORS.has(operator)) {\n if (target.type !== 'number' && target.type !== 'integer') {\n throw validationError(issuePath, `\\`${operator}\\` needs a numeric field; \"${path}\" is ${target.type}.`, value);\n }\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw validationError(issuePath, `\\`${operator}\\` needs a finite number.`, value);\n }\n next[path] = value;\n } else if (operator === '$rename') {\n if (typeof value !== 'string' || !recordSchemaAt(recordSchema, value)) {\n throw validationError(issuePath, `\\`$rename\\` target \"${String(value)}\" is not a declared field.`, value);\n }\n next[path] = value;\n } else {\n // $unset, $min, $max, $currentDate, $pop, $pull, $pullAll: the path is\n // declared; UNS validates the resulting document.\n next[path] = value;\n }\n }\n if (Object.keys(next).length > 0) out[operator] = next;\n }\n if (Object.keys(out).length === 0) {\n throw validationError([], 'Nothing to update: undefined values are dropped; clear a field with `$unset`.', update);\n }\n return out;\n}\n"]}
|
package/dist/cjs/files.d.ts
CHANGED
|
@@ -29,15 +29,6 @@ export declare class FilesClient {
|
|
|
29
29
|
private readonly http;
|
|
30
30
|
private readonly api;
|
|
31
31
|
readonly multipart: {
|
|
32
|
-
abort: (body: components["schemas"]["SdkassetsFilesMultipartAbortRequest"], options?: RequestOptions) => Promise<{
|
|
33
|
-
aborted: number | bigint;
|
|
34
|
-
}>;
|
|
35
|
-
complete: (body: components["schemas"]["SdkassetsFilesMultipartCompleteRequest"], options?: RequestOptions) => Promise<{
|
|
36
|
-
expiresAt?: number | bigint;
|
|
37
|
-
filePath: string;
|
|
38
|
-
fileUrl?: string;
|
|
39
|
-
sizeBytes: number | bigint;
|
|
40
|
-
}>;
|
|
41
32
|
init: (body: components["schemas"]["SdkassetsFilesMultipartInitRequest"], options?: RequestOptions) => Promise<{
|
|
42
33
|
expiresAt: number | bigint;
|
|
43
34
|
fileKey: string;
|
|
@@ -49,6 +40,15 @@ export declare class FilesClient {
|
|
|
49
40
|
partUrls: (body: components["schemas"]["SdkassetsFilesMultipartPartUrlsRequest"], options?: RequestOptions) => Promise<{
|
|
50
41
|
partUrls: components["schemas"]["AssetFileMultipartPartUrl"][];
|
|
51
42
|
}>;
|
|
43
|
+
complete: (body: components["schemas"]["SdkassetsFilesMultipartCompleteRequest"], options?: RequestOptions) => Promise<{
|
|
44
|
+
expiresAt?: number | bigint;
|
|
45
|
+
filePath: string;
|
|
46
|
+
fileUrl?: string;
|
|
47
|
+
sizeBytes: number | bigint;
|
|
48
|
+
}>;
|
|
49
|
+
abort: (body: components["schemas"]["SdkassetsFilesMultipartAbortRequest"], options?: RequestOptions) => Promise<{
|
|
50
|
+
aborted: number | bigint;
|
|
51
|
+
}>;
|
|
52
52
|
};
|
|
53
53
|
constructor(http: HttpClient);
|
|
54
54
|
private storage;
|
package/dist/cjs/mq/broker.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MQTT broker 地址归一化工具。
|
|
3
3
|
*
|
|
4
|
-
* 平台 `/openapi/
|
|
4
|
+
* 平台 `/openapi/v2/info` 返回的 `mqttBroker` 格式随环境变化,不保证统一:
|
|
5
5
|
* - enterprise:env 为空时后端兜底返回 `tcp://<host>:1883`(面向边缘/服务端客户端的连接串);
|
|
6
6
|
* - SaaS(Tier0 Cloud):env 原样透传,常见为 `host:port` 或裸 `host`。
|
|
7
7
|
*
|
package/dist/cjs/mq/broker.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* MQTT broker 地址归一化工具。
|
|
4
4
|
*
|
|
5
|
-
* 平台 `/openapi/
|
|
5
|
+
* 平台 `/openapi/v2/info` 返回的 `mqttBroker` 格式随环境变化,不保证统一:
|
|
6
6
|
* - enterprise:env 为空时后端兜底返回 `tcp://<host>:1883`(面向边缘/服务端客户端的连接串);
|
|
7
7
|
* - SaaS(Tier0 Cloud):env 原样透传,常见为 `host:port` 或裸 `host`。
|
|
8
8
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/mq/broker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MQTT broker 地址归一化工具。\n *\n * 平台 `/openapi/
|
|
1
|
+
{"version":3,"file":"broker.js","sourceRoot":"","sources":["../../../src/mq/broker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MQTT broker 地址归一化工具。\n *\n * 平台 `/openapi/v2/info` 返回的 `mqttBroker` 格式随环境变化,不保证统一:\n * - enterprise:env 为空时后端兜底返回 `tcp://<host>:1883`(面向边缘/服务端客户端的连接串);\n * - SaaS(Tier0 Cloud):env 原样透传,常见为 `host:port` 或裸 `host`。\n *\n * 浏览器 wss 客户端不应直接把它当 hostname 拼 URL(会得到 `wss://tcp://...`\n * 这类非法地址),先经本模块解析/推导,再交给 `Tier0MQClient`。\n */\n\n/** 解析后的 broker 端点。hostname 保证为裸主机(无 scheme、无端口、无路径)。 */\nexport interface MqttBrokerEndpoint {\n /** 裸主机名(已剥离 scheme/path/query,不含端口)。 */\n hostname: string;\n /**\n * 原始端口。注意:对 `tcp://host:1883` 这是 **tcp 端口**,浏览器 wss 场景\n * 不能直接沿用(wss 通常是 8084),由 `toWebSocketUrl` 的 `wssPort` 决定。\n */\n port?: number;\n /** 原始 scheme(tcp/mqtt/mqtts/ws/wss/...),裸 host 输入时为 undefined。 */\n scheme?: string;\n}\n\nconst SCHEME_RE = /^([a-zA-Z][a-zA-Z0-9+.-]*):\\/\\//;\n\n/**\n * 解析各种形态的 broker 字符串为结构化端点。\n *\n * 兼容输入:`tcp://host:1883`、`mqtts://host:8883`、`wss://host:8084/mqtt`、\n * `host:1883`、裸 `host`。无法解析(空串、非法 URL)返回 undefined。\n */\nexport function parseMqttBroker(broker?: string | null): MqttBrokerEndpoint | undefined {\n const raw = broker?.trim();\n if (!raw) return undefined;\n\n if (SCHEME_RE.test(raw)) {\n try {\n const u = new URL(raw);\n if (!u.hostname) return undefined;\n const scheme = SCHEME_RE.exec(raw)?.[1]?.toLowerCase();\n return {\n hostname: u.hostname,\n port: u.port ? Number.parseInt(u.port, 10) : undefined,\n scheme,\n };\n } catch {\n return undefined;\n }\n }\n\n // 无 scheme:`host:port` 或裸 `host`;含路径/空白的是垃圾输入,拒绝\n if (/[\\s/]/.test(raw)) return undefined;\n const i = raw.lastIndexOf(':');\n if (i > 0 && /^\\d+$/.test(raw.slice(i + 1))) {\n const hostname = raw.slice(0, i);\n if (!hostname) return undefined;\n return { hostname, port: Number.parseInt(raw.slice(i + 1), 10) };\n }\n return { hostname: raw };\n}\n\n/** 浏览器 wss 默认端口(与平台 OS_MQTT_WEBSOCKET_TSL_PORT 默认值一致)。 */\nexport const DEFAULT_WSS_PORT = 8084;\n/** MQTT over WebSocket 路径。 */\nexport const DEFAULT_WS_PATH = '/mqtt';\n\nexport interface ToWebSocketUrlOptions {\n /** wss 端口,默认 {@link DEFAULT_WSS_PORT}(8084)。 */\n wssPort?: number;\n /**\n * 显式指定 ws(false)/wss(true)。缺省自适应:浏览器 https 页面用 wss,\n * 或 WebSocket 端口为 8084 时用 wss,其余用 ws。\n */\n secure?: boolean;\n}\n\n/**\n * 当前运行环境是否处于 https 安全上下文。\n *\n * 用 `globalThis.location` 而不是 `window.location`:Web Worker\n * (dedicated/shared)里 `window` 不存在,但 `location.protocol` 同样是 `https:`,\n * 应同等视为安全上下文(否则会被降级为 ws 而被浏览器按 mixed content 拦截)。\n */\nexport function isBrowserHttps(): boolean {\n const loc = (globalThis as { location?: { protocol?: string } }).location;\n return typeof loc?.protocol === 'string' && loc.protocol === 'https:';\n}\n\n/**\n * 把 `mqttBroker`(或 {@link MqttBrokerEndpoint})推导为可直接传给\n * `Tier0MQClient` 的 WebSocket URL。\n *\n * 规则:\n * - 输入已是 `ws(s)://` URL:原样归一(补 `/mqtt` 路径,端口、path、query 均保留);\n * - 输入 `tcp://host:1883` / `host:port` / 裸 `host`:按 `secure` 推导 scheme,\n * 端口一律用 `wssPort`(8084),**不沿用** tcp 端口;\n * - 输入为空/无法解析:返回 undefined(调用方应回退或报错,勿硬拼 URL)。\n *\n * @example\n * toWebSocketUrl('tcp://example.tier0.dev:1883', { secure: true });\n * // → 'wss://example.tier0.dev:8084/mqtt'\n */\nexport function toWebSocketUrl(\n broker: string | MqttBrokerEndpoint | undefined | null,\n opts: ToWebSocketUrlOptions = {},\n): string | undefined {\n if (broker == null || broker === '') return undefined;\n\n // 已是 ws(s) URL:解析后归一直通(保留其 scheme/端口/path/query,仅补 /mqtt 路径)\n if (typeof broker === 'string' && /^wss?:\\/\\//i.test(broker.trim())) {\n try {\n const u = new URL(broker.trim());\n if (!u.hostname) return undefined;\n if (!u.pathname || u.pathname === '/') {\n u.pathname = DEFAULT_WS_PATH;\n }\n return u.toString();\n } catch {\n return undefined;\n }\n }\n\n const endpoint = typeof broker === 'string' ? parseMqttBroker(broker) : broker;\n if (!endpoint?.hostname) return undefined;\n\n // ws(s) 端点:保留其 scheme 与端口(\"已是 WebSocket 地址\"的直通语义)\n if (endpoint.scheme === 'ws' || endpoint.scheme === 'wss') {\n const port = endpoint.port ? `:${endpoint.port}` : '';\n return `${endpoint.scheme}://${endpoint.hostname}${port}${DEFAULT_WS_PATH}`;\n }\n\n const port = opts.wssPort ?? DEFAULT_WSS_PORT;\n const secure = opts.secure ?? (isBrowserHttps() || port === DEFAULT_WSS_PORT);\n return `${secure ? 'wss' : 'ws'}://${endpoint.hostname}:${port}${DEFAULT_WS_PATH}`;\n}\n"]}
|
package/dist/cjs/mq/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export interface MQTTConfig {
|
|
|
3
3
|
* broker 地址。支持三种形态:
|
|
4
4
|
* - 完整 WebSocket URL,如 `wss://host:8084/mqtt`(推荐浏览器场景显式使用);
|
|
5
5
|
* - 裸 `host`(可含端口,如 `host:8084`);
|
|
6
|
-
* - 平台 `/openapi/
|
|
6
|
+
* - 平台 `/openapi/v2/info` 返回的原始 `mqttBroker`(如 `tcp://host:1883`,
|
|
7
7
|
* 建议先用 {@link toWebSocketUrl} 归一后再传入,见 `@tier0/sdk-v2/mq` 的 broker 工具)。
|
|
8
8
|
*/
|
|
9
9
|
host?: string;
|
package/dist/cjs/mq/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mq/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface MQTTConfig {\n /**\n * broker 地址。支持三种形态:\n * - 完整 WebSocket URL,如 `wss://host:8084/mqtt`(推荐浏览器场景显式使用);\n * - 裸 `host`(可含端口,如 `host:8084`);\n * - 平台 `/openapi/
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mq/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface MQTTConfig {\n /**\n * broker 地址。支持三种形态:\n * - 完整 WebSocket URL,如 `wss://host:8084/mqtt`(推荐浏览器场景显式使用);\n * - 裸 `host`(可含端口,如 `host:8084`);\n * - 平台 `/openapi/v2/info` 返回的原始 `mqttBroker`(如 `tcp://host:1883`,\n * 建议先用 {@link toWebSocketUrl} 归一后再传入,见 `@tier0/sdk-v2/mq` 的 broker 工具)。\n */\n host?: string;\n /** WebSocket port fallback when host has no embedded WebSocket port. */\n port?: number;\n /**\n * 当 host 不带 ws(s) scheme 时,显式指定用 wss(true) 还是 ws(false)。\n * 缺省自适应:浏览器 https 页面或端口 8084 用 wss,其余用 ws。\n */\n secure?: boolean;\n clientId?: string;\n username?: string;\n /** Original API key; connect-time changes refresh automatically derived identity fields. */\n password?: string;\n keepAlive?: number;\n reconnectPeriod?: number;\n connectTimeout?: number;\n clean?: boolean;\n /**\n * 背压保护阈值:handler 连续返回 false(表示下游停滞/消费者已断开)达到\n * 该次数后,SDK 自动移除该订阅并向 broker 退订,避免消息在无消费者的\n * 应用内队列中持续堆积。0 或不设置表示关闭该保护(保持原有行为)。\n */\n maxBackpressuredDeliveries?: number;\n}\n\nexport type MQTTMessage = {\n topic: string;\n payload: string | Buffer;\n qos: number;\n retain: boolean;\n};\n\nexport type MQTTEventMap = {\n connect: () => void;\n disconnect: () => void;\n error: (error: Error) => void;\n message: (message: MQTTMessage) => void;\n /** 订阅因持续背压被 SDK 自动移除时触发。 */\n subscriptionDropped: (info: { topic: string; reason: string }) => void;\n};\n"]}
|