Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
e42dd11
chore: tasks migration plan
Pavel910 Nov 10, 2025
e37a141
chore: hcms migration plan
Pavel910 Nov 10, 2025
b620ed0
wip: migrate crud files to features
Pavel910 Nov 10, 2025
dde2e23
wip: migrate crud files to features
Pavel910 Nov 10, 2025
c3716f1
wip: migrate api-headless-cms
Pavel910 Nov 11, 2025
2a9a89e
wip: migrate api-headless-cms
Pavel910 Nov 12, 2025
8dca761
wip: migrate api-headless-cms
Pavel910 Nov 12, 2025
8a49dba
wip: migrate api-headless-cms
Pavel910 Nov 12, 2025
2dc3260
wip: delete unused files
Pavel910 Nov 12, 2025
632358c
wip: make domain names singular
Pavel910 Nov 12, 2025
ca96a7a
wip: migrate content group model domain
Pavel910 Nov 13, 2025
237eb82
wip: migrate content group model domain
Pavel910 Nov 13, 2025
ef2e1a4
wip: migrate content group model domain
Pavel910 Nov 13, 2025
3c19c5c
wip: migrate content group model domain
Pavel910 Nov 13, 2025
aeb74a1
wip: migrate content group model domain
Pavel910 Nov 13, 2025
c74fc98
wip: migrate content group model domain
Pavel910 Nov 13, 2025
d694ce2
wip: migrate content group model domain
Pavel910 Nov 14, 2025
dc23923
wip: migrate content model domain
Pavel910 Nov 14, 2025
9802b83
wip: update di container dep and context docs
Pavel910 Nov 14, 2025
182323d
wip: migrate content model crud
Pavel910 Nov 14, 2025
9d7201f
wip: migrate content model crud
Pavel910 Nov 14, 2025
f024815
wip: migrate content model crud
Pavel910 Nov 16, 2025
6ed03d3
wip: migrate content model crud
Pavel910 Nov 16, 2025
b2b2bb3
wip: migrate content model crud
Pavel910 Nov 16, 2025
772e0d7
wip: migrate content model crud
Pavel910 Nov 17, 2025
e72acfe
wip: migrate content model crud
Pavel910 Nov 17, 2025
26bf9cc
wip: migrate content model crud
Pavel910 Nov 17, 2025
b4ff5b7
wip: migrate content model crud
Pavel910 Nov 17, 2025
475c63f
wip: migrate content model crud
Pavel910 Nov 17, 2025
6d1dfcc
wip: migrate headless cms scheduler
Pavel910 Nov 17, 2025
6ced0d0
wip: migrate headless cms scheduler
Pavel910 Nov 17, 2025
0329a2c
wip: migrate headless cms scheduler
Pavel910 Nov 17, 2025
aee6c32
wip: migrate headless cms scheduler
Pavel910 Nov 18, 2025
02c5238
wip: base api-scheduler setup
Pavel910 Nov 18, 2025
a87261f
wip: base api-scheduler setup
Pavel910 Nov 18, 2025
49ce896
wip: implement api-scheduler
Pavel910 Nov 18, 2025
13df020
wip: implement api-scheduler
Pavel910 Nov 18, 2025
6674541
wip: implement api-scheduler
Pavel910 Nov 18, 2025
d7cb2c5
wip: implement api-scheduler
Pavel910 Nov 19, 2025
a077288
wip: implement api-scheduler-headless-cms
Pavel910 Nov 19, 2025
755b7f3
wip: implement lifecycle hooks via event handlers
Pavel910 Nov 19, 2025
5f56017
wip: update test
Pavel910 Nov 19, 2025
2a23ff4
wip: update ai context and websockets
Pavel910 Nov 19, 2025
fc6a80e
wip: migrate record locking
Pavel910 Nov 19, 2025
f0f0e48
wip: migrate record locking
Pavel910 Nov 19, 2025
e0c01dc
wip: migrate record locking
Pavel910 Nov 20, 2025
be44525
wip: migrate record locking
Pavel910 Nov 20, 2025
e0c1446
wip: migrate record locking
Pavel910 Nov 20, 2025
7a4c0de
wip: remove obsolete files
Pavel910 Nov 20, 2025
27c9c70
wip: use HCMS use cases in tasks package
Pavel910 Nov 20, 2025
7364013
wip
Pavel910 Nov 20, 2025
371151b
wip: migration plan
Pavel910 Nov 21, 2025
a5cb1c5
wip: migrate file manager
Pavel910 Nov 21, 2025
44a0786
wip: migrate file manager
Pavel910 Nov 21, 2025
e831f14
wip: migrate file manager
Pavel910 Nov 21, 2025
f9d6f7a
wip: migrate file manager
Pavel910 Nov 21, 2025
9baa4c4
wip: migrate file manager
Pavel910 Nov 21, 2025
445d65c
wip: migrate file manager
Pavel910 Nov 21, 2025
9f622fa
wip: migrate file manager
Pavel910 Nov 23, 2025
03b50c2
wip: migrate file manager
Pavel910 Nov 30, 2025
5af355e
wip: migrate file manager
Pavel910 Nov 30, 2025
a257b71
Merge branch 'next' of github.com:webiny/webiny-js into next
Pavel910 Dec 1, 2025
ed7043b
merge: pull in changes from next
Pavel910 Dec 1, 2025
e6888b0
fix: add missing tenant checks
Pavel910 Dec 1, 2025
cf61576
fix: remove webinyVersion
Pavel910 Dec 1, 2025
793c67a
chore: update deps and formatting
Pavel910 Dec 1, 2025
1cb75f1
Merge branch 'next' into feat/migrate-backend
Pavel910 Dec 1, 2025
94a2863
fix: eslint issues
Pavel910 Dec 1, 2025
165bc66
fix: sync dependencies
Pavel910 Dec 1, 2025
60a1ac3
fix: update tests
Pavel910 Dec 2, 2025
c446c68
fix: update api-aco
Pavel910 Dec 2, 2025
98a97dd
fix: update api-aco
Pavel910 Dec 3, 2025
cfed3d6
fix: update tests
Pavel910 Dec 3, 2025
21bf30b
fix: polish Sidebar component (#4795)
adrians5j Dec 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
297 changes: 149 additions & 148 deletions ai-context/backend-developer-guide.md

Large diffs are not rendered by default.

1,362 changes: 0 additions & 1,362 deletions ai-context/cms-models.md

This file was deleted.

102 changes: 95 additions & 7 deletions ai-context/core-features-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,23 @@ This document provides the correct import paths and type definitions for commonl
## Features

### TenantContext
- **Import:** `import { TenantContext } from "@webiny/api-tenancy/features/TenantContext"`
- **Interface Type:** See `packages/api-tenancy/src/features/TenantContext/abstractions.ts`
- **Import:** `import { TenantContext } from "@webiny/api-core/features/TenantContext"`
- **Interface Type:** See `packages/api-core/src/features/TenantContext/abstractions.ts`
- **Usage:** Access current tenant information

### IdentityContext
- **Import:** `import { IdentityContext } from "@webiny/api-security/features/IdentityContext"`
- **Interface Type:** See `packages/api-security/src/features/IdentityContext/abstractions.ts`
- **Import:** `import { IdentityContext } from "@webiny/api-core/features/IdentityContext"`
- **Interface Type:** See `packages/api-core/src/features/IdentityContext/abstractions.ts`
- **Usage:** Access current user identity and permissions

### EventPublisher
- **Import:** `import { EventPublisher } from "@webiny/api-core"`
- **Import:** `import { EventPublisher } from "@webiny/api-core/features/EventPublisher"`
- **Interface Type:** See `packages/api-core/src/event-publisher/abstractions.ts`
- **Usage:** Publish domain events

### WcpContext
- **Import:** `import { WcpContext } from "@webiny/api-wcp/features/WcpContext"`
- **Interface Type:** See `packages/api-wcp/src/features/WcpContext/abstractions.ts`
- **Import:** `import { WcpContext } from "@webiny/api-core/features/WcpContext"`
- **Interface Type:** See `packages/api-core/src/features/WcpContext/abstractions.ts`
- **Usage:** WCP (Webiny Control Panel) integration for seats/tenants management

### GetSettings
Expand All @@ -43,6 +43,94 @@ This document provides the correct import paths and type definitions for commonl

---

## Headless CMS Features

### Content Entry Features

#### GetEntryById
- **Import:** `import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/GetEntryById/abstractions.ts`
- **Usage:** Fetch single entry by exact revision ID

#### GetEntry
- **Import:** `import { GetEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntry"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/GetEntry/abstractions.ts`
- **Usage:** Get single entry by query parameters (where + sort)

#### ListLatestEntries
- **Import:** `import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/ListEntries/abstractions.ts`
- **Usage:** List latest entries (manage API)

#### ListPublishedEntries
- **Import:** `import { ListPublishedEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/ListEntries/abstractions.ts`
- **Usage:** List published entries (read API)

#### ListDeletedEntries
- **Import:** `import { ListDeletedEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/ListEntries/abstractions.ts`
- **Usage:** List deleted entries (manage API)

#### CreateEntry
- **Import:** `import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/CreateEntry/abstractions.ts`
- **Usage:** Create new content entry

#### UpdateEntry
- **Import:** `import { UpdateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/UpdateEntry/abstractions.ts`
- **Usage:** Update existing content entry

#### DeleteEntry
- **Import:** `import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/DeleteEntry/abstractions.ts`
- **Usage:** Delete content entry

#### ListEntriesRepository
- **Import:** `import { ListEntriesRepository } from "@webiny/api-headless-cms/features/contentEntry/ListEntries"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentEntry/ListEntries/abstractions.ts`
- **Usage:** Repository for fetching entries from storage

### Content Model Features

#### GetModel
- **Import:** `import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/GetModel/abstractions.ts`
- **Usage:** Retrieve single model by ID with access control

#### ListModels
- **Import:** `import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/ListModels/abstractions.ts`
- **Usage:** List all accessible content models

#### GetModelRepository
- **Import:** `import { GetModelRepository } from "@webiny/api-headless-cms/features/contentModel/GetModel"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/GetModel/abstractions.ts`
- **Usage:** Fetch model from cache (plugin + DB models)

#### ListModelsRepository
- **Import:** `import { ListModelsRepository } from "@webiny/api-headless-cms/features/contentModel/ListModels"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/ListModels/abstractions.ts`
- **Usage:** Fetch all models from cache

#### ModelsFetcher
- **Import:** `import { ModelsFetcher } from "@webiny/api-headless-cms/features/contentModel/shared"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/shared/abstractions.ts`
- **Usage:** Centralized model fetching with caching and access control

#### ModelCache
- **Import:** `import { ModelCache } from "@webiny/api-headless-cms/features/contentModel/shared"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/shared/abstractions.ts`
- **Usage:** Cache for content models

#### PluginModelsProvider
- **Import:** `import { PluginModelsProvider } from "@webiny/api-headless-cms/features/contentModel/shared"`
- **Interface Type:** See `packages/api-headless-cms/src/features/contentModel/shared/abstractions.ts`
- **Usage:** Access to plugin-defined models

---

## Notes

- Always import abstractions from the feature path (not from package root)
Expand Down
47 changes: 46 additions & 1 deletion ai-context/di-container.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,61 @@
```ts
// Abstraction.ts
// eslint-disable-next-line @typescript-eslint/no-unused-vars
import type { Constructor, Dependencies, GetInterface, MapDependencies } from "./types.js";
import { Metadata } from "./Metadata.js";

type DropLast<T> = T extends [...infer P, any] ? [...P] : never;

type Implementation<A extends Abstraction<any>, I extends Constructor> = I & {
__abstraction: A;
};

// eslint-disable-next-line @typescript-eslint/no-unused-vars
export class Abstraction<T> {
public readonly token: symbol;

constructor(name: string) {
this.token = Symbol.for(name);
this.token = Symbol(name);
}

toString(): string {
return this.token.description || this.token.toString();
}

createImplementation<I extends Constructor<GetInterface<this>>>(params: {
implementation: I;
dependencies: Dependencies<I>;
}): Implementation<this, I> {
const metadata = new Metadata(params.implementation);
metadata.setAbstraction(this);
metadata.setDependencies(params.dependencies);

return params.implementation as Implementation<this, I>;
}

createDecorator<I extends Constructor>(params: {
decorator: I;
dependencies: MapDependencies<DropLast<ConstructorParameters<I>>>;
}): Implementation<this, I> {
const metadata = new Metadata(params.decorator);
metadata.setAbstraction(this);
metadata.setDependencies(params.dependencies as any);
metadata.setAttribute("IS_DECORATOR", true);

return params.decorator as Implementation<this, I>;
}

createComposite<I extends Constructor<GetInterface<this>>>(params: {
implementation: I;
dependencies: Dependencies<I>;
}): Implementation<this, I> {
const metadata = new Metadata(params.implementation);
metadata.setAbstraction(this);
metadata.setDependencies(params.dependencies);
metadata.setAttribute("IS_COMPOSITE", true);

return params.implementation as Implementation<this, I>;
}
}
```

Expand Down
32 changes: 11 additions & 21 deletions ai-context/event-publisher.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export class EventPublisher implements Abstraction.Interface {
```ts
// __tests__/EventPublisher.test.ts
import { describe, it, expect, beforeEach } from "vitest";
import { Container, Abstraction, createImplementation } from "@webiny/di";
import { Container, Abstraction } from "@webiny/di";
import { EventPublisherFeature } from "../feature";
import { EventPublisher as EventPublisherAbstraction } from "../abstractions";
import type { DomainEvent, IEventHandler } from "../abstractions";
Expand Down Expand Up @@ -123,8 +123,7 @@ class SendNotificationHandler implements IEventHandler<PagePublishedEvent> {
}
}

export const SendNotificationHandlerImpl = createImplementation({
abstraction: PagePublishedHandler,
export const SendNotificationHandlerImpl = PagePublishedHandler.createImplementation({
implementation: SendNotificationHandler,
dependencies: []
});
Expand All @@ -138,8 +137,7 @@ class UpdateSearchIndexHandler implements IEventHandler<PagePublishedEvent> {
}
}

export const UpdateSearchIndexHandlerImpl = createImplementation({
abstraction: PagePublishedHandler,
export const UpdateSearchIndexHandlerImpl = PagePublishedHandler.createImplementation({
implementation: UpdateSearchIndexHandler,
dependencies: []
});
Expand All @@ -155,8 +153,7 @@ class LogPagePublishedHandler implements IEventHandler<PagePublishedEvent> {
}
}

export const LogPagePublishedHandlerImpl = createImplementation({
abstraction: PagePublishedHandler,
export const LogPagePublishedHandlerImpl = PagePublishedHandler.createImplementation({
implementation: LogPagePublishedHandler,
dependencies: []
});
Expand All @@ -174,8 +171,7 @@ class SendWelcomeEmailHandler implements IEventHandler<UserRegisteredEvent> {
}
}

export const SendWelcomeEmailHandlerImpl = createImplementation({
abstraction: UserRegisteredHandler,
export const SendWelcomeEmailHandlerImpl = UserRegisteredHandler.createImplementation({
implementation: SendWelcomeEmailHandler,
dependencies: []
});
Expand All @@ -189,8 +185,7 @@ class CreateUserProfileHandler implements IEventHandler<UserRegisteredEvent> {
}
}

export const CreateUserProfileHandlerImpl = createImplementation({
abstraction: UserRegisteredHandler,
export const CreateUserProfileHandlerImpl = UserRegisteredHandler.createImplementation({
implementation: CreateUserProfileHandler,
dependencies: []
});
Expand All @@ -204,8 +199,7 @@ class TrackUserRegistrationHandler implements IEventHandler<UserRegisteredEvent>
}
}

export const TrackUserRegistrationHandlerImpl = createImplementation({
abstraction: UserRegisteredHandler,
export const TrackUserRegistrationHandlerImpl = UserRegisteredHandler.createImplementation({
implementation: TrackUserRegistrationHandler,
dependencies: []
});
Expand All @@ -223,8 +217,7 @@ class ProcessPaymentHandler implements IEventHandler<OrderPlacedEvent> {
}
}

export const ProcessPaymentHandlerImpl = createImplementation({
abstraction: OrderPlacedHandler,
export const ProcessPaymentHandlerImpl = OrderPlacedHandler.createImplementation({
implementation: ProcessPaymentHandler,
dependencies: []
});
Expand All @@ -238,8 +231,7 @@ class SendOrderConfirmationHandler implements IEventHandler<OrderPlacedEvent> {
}
}

export const SendOrderConfirmationHandlerImpl = createImplementation({
abstraction: OrderPlacedHandler,
export const SendOrderConfirmationHandlerImpl = OrderPlacedHandler.createImplementation({
implementation: SendOrderConfirmationHandler,
dependencies: []
});
Expand All @@ -253,8 +245,7 @@ class UpdateInventoryHandler implements IEventHandler<OrderPlacedEvent> {
}
}

export const UpdateInventoryHandlerImpl = createImplementation({
abstraction: OrderPlacedHandler,
export const UpdateInventoryHandlerImpl = OrderPlacedHandler.createImplementation({
implementation: UpdateInventoryHandler,
dependencies: []
});
Expand Down Expand Up @@ -541,8 +532,7 @@ describe("EventPublisher", () => {
}
}

const FailingHandlerImpl = createImplementation({
abstraction: PagePublishedHandler,
const FailingHandlerImpl = PagePublishedHandler.createImplementation({
implementation: FailingHandler,
dependencies: []
});
Expand Down
16 changes: 4 additions & 12 deletions ai-context/simple-models.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
```ts
// Page/PageModelBuilder.ts
import { ModelBuilder as Builder } from "~/models/ModelBuilder.js";
import { createImplementation } from "@webiny/di";
import { PageSchema, PageModelBuilder as BuilderAbstraction, type IPage } from "./abstractions";

class PageModelBuilderImpl implements BuilderAbstraction.Interface {
Expand All @@ -15,16 +14,14 @@ class PageModelBuilderImpl implements BuilderAbstraction.Interface {
}
}

export const PageModelBuilder = createImplementation({
abstraction: BuilderAbstraction,
export const PageModelBuilder = BuilderAbstraction.createImplementation({
implementation: PageModelBuilderImpl,
dependencies: []
});
```

```ts
// Page/PageModelFactory.ts
import { createImplementation } from "@webiny/di";
import {
PageModelFactory as FactoryAbstraction,
PageModelBuilder,
Expand All @@ -49,16 +46,14 @@ class PageModelFactoryImpl implements FactoryAbstraction.Interface {
}
}

export const PageModelFactory = createImplementation({
abstraction: FactoryAbstraction,
export const PageModelFactory = FactoryAbstraction.createImplementation({
implementation: PageModelFactoryImpl,
dependencies: [PageModelBuilder]
});
```

```ts
// Page/__tests__/PageModelBuilderDecorator.ts
import { createDecorator } from "@webiny/di";
import { PageModelBuilder as BuilderAbstraction } from "../abstractions";

class PageModelBuilderDecoratorImpl implements BuilderAbstraction.Interface {
Expand All @@ -81,8 +76,7 @@ class PageModelBuilderDecoratorImpl implements BuilderAbstraction.Interface {
}
}

export const PageModelBuilderDecorator = createDecorator({
abstraction: BuilderAbstraction,
export const PageModelBuilderDecorator = BuilderAbstraction.createDecorator({
decorator: PageModelBuilderDecoratorImpl,
dependencies: []
});
Expand All @@ -100,7 +94,6 @@ declare module "~/simple/Page/abstractions.js" {

```ts
// Page/__tests__/PageModelBuilderDecorator2.ts
import { createDecorator } from "@webiny/di";
import { PageModelBuilder as BuilderAbstraction } from "../abstractions";

class PageModelBuilderDecorator2Impl implements BuilderAbstraction.Interface {
Expand All @@ -117,8 +110,7 @@ class PageModelBuilderDecorator2Impl implements BuilderAbstraction.Interface {
}
}

export const PageModelBuilderDecorator2 = createDecorator({
abstraction: BuilderAbstraction,
export const PageModelBuilderDecorator2 = BuilderAbstraction.createDecorator({
decorator: PageModelBuilderDecorator2Impl,
dependencies: []
});
Expand Down
Loading