Files
open-wc/src/domain/identity/content_id.gd
T
sindoring c1dc07c705 feat(M01): add typed domain identities
Work-Package: M01-FND-DOMAIN-IDENTITIES-001

Agent: sindo-main-codex
2026-07-13 16:11:00 +04:00

44 lines
1.3 KiB
GDScript

class_name ContentId
extends RefCounted
## Stable authored-content identity serialized as canonical lowercase UUID text.
## It is independent of runtime entities, server database entries and wire GUIDs.
var uuid_text: String:
get:
return _uuid_text
var _uuid_text: String
## Normalizes surrounding whitespace and hexadecimal letter case.
func _init(uuid_text_value: String) -> void:
_uuid_text = uuid_text_value.strip_edges().to_lower()
## Reports whether the value has the canonical 8-4-4-4-12 UUID text shape.
func is_valid() -> bool:
if _uuid_text.length() != 36:
return false
for character_index in range(_uuid_text.length()):
if character_index in [8, 13, 18, 23]:
if _uuid_text[character_index] != "-":
return false
elif not _is_lowercase_hexadecimal_character(_uuid_text[character_index]):
return false
return true
## Compares stable content identity by normalized UUID text.
func equals(other_content_id: ContentId) -> bool:
return other_content_id != null and _uuid_text == other_content_id.uuid_text
## Returns the canonical dictionary/serialization key.
func to_key() -> String:
return _uuid_text
func _is_lowercase_hexadecimal_character(character: String) -> bool:
return (character >= "0" and character <= "9") or (character >= "a" and character <= "f")