Boot and check diagnostics
What does not hold is named, with a code, the file to look at, and one sentence. A blocking one stops the boot; a warning is printed and the app starts. 62 codes, read off the code that raises them.
| code | what it says | raised by | |
|---|---|---|---|
aggregate-storage-reached | blocking | … asks for …, but … belongs to …. Ask for that instead: constructor(private …: …) {}. | @fougere/core |
collector-in-another-frond | warning | ….… takes … from the request, but the frond '…' has a … collector that '…' cannot see. - To use that collector: move it into '…'. - To keep the request: declare it in …/frond.config.ts: operations: { '….…': { binding: [{ | @fougere/core |
collector-unavailable | blocking | ….… takes …: …, and no collector in the frond '…' provides one. Add a class extending Collect<…> in …. | @fougere/core |
constructor-arity | blocking | …'s constructor takes … parameter(s), but only … … typed (…). Type each parameter, or the others receive undefined. | @fougere/core |
cross-frond-dependency | warning | … asks for …, which belongs to the frond '…', so '…' cannot see it. Move … into '…', or call '…' through its handler's facade. | @fougere/core |
crud-on-owned-entity | blocking | … extends Repository<…>, but … belongs to …. Drop it and ask for the owner: constructor(private …: …) {}. | @fougere/core |
dependency-cycle | blocking | … | @fougere/core |
dependency-unregistered | blocking | … asks for …, and nothing in the frond '…' provides it. Add a class named … in …, or check the spelling. | @fougere/core |
directory-unreadable | blocking | This directory could not be read, so what it declares is missing from the app. | @fougere/compiler |
door-link-unknown-op | blocking | ….… names no operation of …, which serves …. Name the method after the operation it stands around. | @fougere/core |
emit-await-with-carrier | blocking | Emit<…, …> waits for answers, but this app sends facts through a carrier (onEmit), which brings no answer back. Give the subscribers' fronds an address in fronds:, or use Emit<…> without the second type. | @fougere/core |
entity-owned-twice | blocking | … is in both … and …. Keep it in one. | @fougere/core |
facade-stale | warning | @fronds/facade is older than the handlers, so pages are checked against old operations. Run fougere build. | @fougere/cli |
fact-contract-ambiguous | blocking | ….… listens to …, and a parameter takes one fact. Write one method per fact. | @fougere/compiler |
frond-extends-chain | blocking | The frond '…' extends '…', which extends '…'. A frond can extend only one level. Move what they share into the frond they both extend. | @fougere/core |
frond-family-split | blocking | The frond '…' extends '…', which this process leaves out. Run the two in the same process, or remove extends: '…'. | @fougere/core |
frond-holds-several-domains | warning | The frond '…' has … groups of entities with no relation between them (…). A ref() is missing, or they are separate fronds — see fougere graph. | @fougere/cli |
frond-key-taken | blocking | The fronds '…' and '…' both have a … answering …, the other in …. Rename one, or leave one frond out of this process (only:). | @fougere/core |
frond-parent-entities | blocking | The frond '…' is extended by …, so it cannot have entities (…). Move them into one of them, and import them from there: import X from '…/…/X.js'. | @fougere/core |
frond-parent-remote | blocking | The frond '…' is extended by …, so it cannot have an address (…). Give the address to one of them instead. | @fougere/core |
frond-parent-serves | blocking | The frond '…' is extended by …, so it cannot have handlers (…). Move its handlers into one of them. | @fougere/core |
frond-unknown | blocking | No frond is named '…'. This project has: …. | @fougere/core |
handler-of-another-frond | blocking | … asks for …, a handler of the frond '…'. A handler is handed only inside its own frond: from another one, ask for its facade — Facade<…> — which validates, runs the middlewares and crosses a process when the frond moves | @fougere/core |
handler-parse-failed | blocking | This handler could not be parsed, so its operations are served without checking their input. | @fougere/compiler |
handler-unstated | warning | … is in the code of the frond '…' but not in fronds.ts, so the app starts without it. | @fougere/cli |
heritage-unresolved | warning | Cannot read the class … this handler extends, so its operations are missing. List them in frond.config.ts under operations:. | @fougere/compiler |
input-contract-ambiguous | blocking | Fougere cannot tell which parameter of … is its input: …. Declare it in frond.config.ts: operations: { '…': { input } }. | @fougere/compiler |
many-without-reference | blocking | ….… is many(…), but no field of … points back to …. Add one on …: ref(…). | @fougere/core |
on-delete-null-refused | blocking | ….… has onDelete: 'set null', but it cannot be null. Wrap it in optional(), or use onDelete: 'cascade'. | @fougere/core |
operation-binding-invalid | blocking | The binding of ….… must name each parameter once. …… | @fougere/core |
operation-method-unresolved | blocking | ….… points to ….…, which does not exist. | @fougere/core |
operation-output-not-data | blocking | …() returns …, which has methods, and an operation returns plain data. Return an entity, or the plain values you need. | @fougere/core |
operation-override-unaddressed | blocking | — | @fougere/core |
operation-unbound | blocking | ….… takes … parameter(s), and nothing says where each comes from. Give it a binding. | @fougere/core |
operation-unstated | warning | ….… is public but not in fronds.ts, so the app starts without it. Add it: operations: { …: { params: { … }, output: … } }, or make the method private. | @fougere/cli |
operation-without-method | blocking | ….… is listed as an operation, but … has no method …. | @fougere/core |
output-contract-ambiguous | blocking | Fougere cannot tell which view … answers through: …. Write one operation per type, or declare it in frond.config.ts: operations: { '…': { output } }. | @fougere/compiler |
parameter-binding-ambiguous | blocking | Several parameters of ….… could take the request body: …. Give it a binding that says which. | @fougere/core |
parameter-binding-unknown | blocking | Fougere cannot tell where …: … of ….… comes from. Type it as an entity or a view of one, a primitive, a Fact<…>, or a type a collector of this frond provides. | @fougere/core |
pipes-not-owned | blocking | The frond '…' gives an order for …, but … is declared in another frond. Move pipes: to the frond.config.ts of that frond. | @fougere/core |
pipes-unlisted | blocking | … … …, but pipes: for … lists only …. Add … to pipes:, or make it take Fact<…> if it only reads. | @fougere/core |
pipes-unordered | blocking | … … change …, in no set order. Give the order in frond.config.ts of the frond that owns …: pipes: { …: … }. Or, if only one of them changes it, make the others take Fact<…> instead. | @fougere/core |
port-implemented-not-extended | warning | … | @fougere/compiler |
port-implemented-twice | blocking | … both extend …. Pick one in fougere.config.ts: ports: { …: '…' }. | @fougere/core |
port-key-taken | blocking | … answers … in every frond, so no class of the frond may be called that. Rename the class. | @fougere/core |
port-not-extended | blocking | No class … extends or implements …. These do: …. | @fougere/core |
port-wrapped-twice | blocking | … both wrap …. Give the order in fougere.config.ts, outermost first: ports: { …: … }. | @fougere/core |
presenter-field-not-page | blocking | …(…) is a computed field: it receives all the rows of a page and returns one value per row. Declare …(…: …) and return an array of the same length. | @fougere/compiler |
presenter-field-twice | blocking | … and … both compute … for …. Keep it in one of them. | @fougere/core |
provider-name-taken | blocking | Two classes are named …, here and in …. Rename one. | @fougere/core |
repository-twice | blocking | … both extend the repository … answers, and one key has one answer. Keep one; the other may ask for it. | @fougere/core |
rows-as-value | blocking | … asks for … as one value, and … is held as rows. Ask for its repository, or list '…' in the values: of a source. | @fougere/core |
seam-not-wrapped | blocking | … extends … but takes no …. To wrap it, take it: constructor(private inner: …). To keep rows somewhere new, register a source type instead (Sources.register). | @fougere/core |
source-missing | blocking | … lives in no source: every entry of sources: lists its rows, so none holds the rest. Add '…' to the rows: of one, or give one source no rows: list. | @fougere/core |
state-without-async-context | warning | state: keeps what callers write, and this Worker has no nodejs_compat, so every state.set is refused. Add "nodejs_compat" to compatibility_flags. | @fougere/cli |
stated-binding-drifted | warning | frond.config.ts binds … on ….…, which has no such parameter (it has …). Fix the names in frond.config.ts. | @fougere/core |
storage-outside-repository | blocking | … asks for …. Ask for the repository instead: constructor(private …: Repository<…>) {}. | @fougere/core |
super-linear-pattern | warning | has pattern: …, a nested repetition that can take seconds to check on some inputs and block the server. Rewrite the repeated group, or limit the field with max. | @fougere/cli |
table-contradicted | blocking | The fronds '…' and '…' both declare ….…, differently. They are two views of one table, and one column has one shape: declare … the same way in both, or leave it out of one. | @fougere/core |
term-missing | blocking | ….… uses the … '…', which is not defined. Export it from …. | @fougere/core |
unknown-adapter | warning | has adapters: { … }, but no installed adapter is named … (installed: …). Check the spelling, or add the dependency. | @fougere/cli |
value-as-rows | blocking | … reaches … as rows, and … is held as one value. Ask for the value itself: constructor(private …: …) {}. | @fougere/core |