describeModel function
definition as JSON-friendly data, in the spirit of artisan model:show --json (database columns are added by the caller that can query them).
Implementation
Map<String, Object?> describeModel(ModelDefinition<Model> definition) => {
'class': modelClassName(definition),
'table': definition.table,
if (definition.connection != null) 'connection': definition.connection,
'primaryKey': definition.primaryKey,
'keyType': definition.keyType.name,
'morphClass': definition.morphClass,
'timestamps': definition.timestamps,
'softDeletes': definition.softDeletes,
'fillable': definition.fillable,
'guarded': definition.guarded,
'hidden': definition.hidden,
if (definition.visible.isNotEmpty) 'visible': definition.visible,
if (definition.appends.isNotEmpty) 'appends': definition.appends,
'casts': {
for (final MapEntry(:key, :value) in definition.casts.entries)
key: castName(value),
},
if (definition.scopes.isNotEmpty) 'scopes': definition.scopes.keys.toList(),
'relations': [
for (final name in definition.relationNames)
describeRelation(definition.requireRelation(name)),
],
'observers': definition.observers.length,
};