describeModel function

Map<String, Object?> describeModel(
  1. ModelDefinition<Model> definition
)

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,
};