cli/docs/services/core.md
google-labs-jules[bot] 456a5d6864 docs: replace raw AST dumps with descriptive markdown (#34)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-11-25 00:09:03 +00:00

150 lines
4.8 KiB
Markdown

---
title: core
---
# Service: `core`
The `core` service is the foundation of the application. It serves as a central hub for managing service lifecycles, dependency injection, asset handling, and inter-process communication (IPC).
## Types
### `type Core`
`Core` is the central application object. It holds references to the Wails application instance, configuration, and registered services.
```go
type Core struct {
// App is the Wails application instance
App *application.App
// Features manages feature flags
Features *Features
// ... internal fields
}
```
### `type Option`
`Option` is a function type used to configure the `Core` during initialization.
```go
type Option func(*Core) error
```
### `type Startable`
`Startable` is an interface for services that require initialization logic when the application starts.
```go
type Startable interface {
OnStartup(ctx context.Context) error
}
```
### `type Stoppable`
`Stoppable` is an interface for services that require cleanup logic when the application shuts down.
```go
type Stoppable interface {
OnShutdown(ctx context.Context) error
}
```
### `type Message`
`Message` is a marker interface for structs that can be sent via the Core's IPC system.
```go
type Message interface{}
```
### `type ActionServiceStartup`
`ActionServiceStartup` is a message dispatched when the application services are starting up.
```go
type ActionServiceStartup struct{}
```
### `type ActionServiceShutdown`
`ActionServiceShutdown` is a message dispatched when the application services are shutting down.
```go
type ActionServiceShutdown struct{}
```
## Functions
### `func New(opts ...Option) (*Core, error)`
`New` initializes a new `Core` instance with the provided options. It sets up the internal service registry and feature flags.
### `func WithService(factory func(*Core) (any, error)) Option`
`WithService` registers a service using a factory function. It automatically discovers the service name from the package path and registers any IPC handlers if the service implements `HandleIPCEvents`.
### `func WithName(name string, factory func(*Core) (any, error)) Option`
`WithName` registers a service with a specific name using a factory function. Unlike `WithService`, it does not automatically discover IPC handlers.
### `func WithWails(app *application.App) Option`
`WithWails` injects the Wails application instance into the `Core`. This is required for services that need to interact with the Wails runtime.
### `func WithAssets(fs embed.FS) Option`
`WithAssets` registers the application's embedded assets (filesystem).
### `func WithServiceLock() Option`
`WithServiceLock` locks the service registry after initialization, preventing further service registration.
### `func ServiceFor[T any](c *Core, name string) (T, error)`
`ServiceFor` retrieves a registered service by its name and asserts that it is of type `T`. Returns an error if the service is not found or the type assertion fails.
### `func MustServiceFor[T any](c *Core, name string) T`
`MustServiceFor` is a helper that wraps `ServiceFor` and panics if the service is not found or the type is incorrect.
### `func App() *application.App`
`App` returns the global Wails application instance. It panics if the Core has not been initialized.
## Methods
### `func (c *Core) Config() Config`
`Config` returns the registered `Config` service. This is a convenience method for accessing application configuration.
### `func (c *Core) Assets() embed.FS`
`Assets` returns the embedded filesystem containing the application's assets.
### `func (c *Core) ServiceStartup(ctx context.Context, options application.ServiceOptions) error`
`ServiceStartup` is the entry point for the Core's startup lifecycle. It initializes all registered `Startable` services and dispatches the `ActionServiceStartup` message.
### `func (c *Core) ServiceShutdown(ctx context.Context) error`
`ServiceShutdown` is the entry point for the Core's shutdown lifecycle. It dispatches the `ActionServiceShutdown` message and calls `OnShutdown` on all `Stoppable` services in reverse registration order.
### `func (c *Core) RegisterAction(handler func(*Core, Message) error)`
`RegisterAction` registers a new IPC message handler.
### `func (c *Core) RegisterActions(handlers ...func(*Core, Message) error)`
`RegisterActions` registers multiple IPC message handlers at once.
### `func (c *Core) ACTION(msg Message) error`
`ACTION` dispatches a message to all registered IPC handlers. It aggregates errors from all handlers.
### `func (c *Core) RegisterService(name string, api any) error`
`RegisterService` adds a new service to the Core. It detects if the service implements `Startable` or `Stoppable` and registers it for lifecycle events.
### `func (c *Core) Service(name string) any`
`Service` retrieves a registered service instance by name as an `any` type. Returns `nil` if not found.