@sanoma-ai/workflows 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -580,7 +580,7 @@ A sandbox run does not survive a worker restart: its fakes keep their state in t
580
580
  `@sanoma-ai/app` is one UI over a config; another (a Slack bot, an internal tool) can be built on the same pieces, which the package exports for that:
581
581
 
582
582
  - `describeConfig(config)` and its types (`ConfigDescription`, `WorkflowEntry`, `OpEntry`, `VendorEntry`, `ResourceTypeEntry`, `DeclaredResource`, `ResourceProblem`), and `readDataFiles(root, connectors)` and `readResources(config)`, from `@sanoma-ai/workflows/describe`: what to render, as plain JSON, with each workflow's outline. It is a separate entry so the worker never loads the parser the outline uses, and the lint refuses it in workflow files. `resolveConfig(config)` returns the checked config as a `ResolvedConfig`, with the operations and drivers by id, the resource types by `<vendor>.<type>` (`types`), the workflows by name (the built-ins `drift`, `apply` and `call` among them), its `root` and each vendor's `credentials` (`CredentialStatus`); `isOp(x)` tells an operation from a built-in in a workflow's `uses`.
583
- - `readSites(root, description, connectors, policies?)`, from `@sanoma-ai/workflows/describe`, which `describeConfig` returns as `sites`: what each site calls, read with oxc and never run, for a workflow's **Used by**. A site is a folder of `sites/` with a `routes/`, named as a URL segment; its `routes/**` and `components/**` (`.ts`, `.tsx`, less tests) are read for each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`, called or passed on (`queryFn: api.data.leads.list`): `api.<name>` and `api.<name>.<method>` are the workflow whose `apiNameOf` is `<name>`, `api.data.<collection>.<op>` a collection, `api.<vendor>.<resource>.<op>` the operation of that id. Each is a `SiteCall` (`kind`, `target`, `method`, what it calls of a workflow or collection as written (`start`, `latest`, `list`), `via`, `file`, `line`, `column`, and `page`, the page's path from its `createFileRoute` or `createLazyFileRoute` id, in a page's file); a `SiteEntry` holds a site's `name`, its `title` (a string `defineSite({ title })` in `site.ts`), its `calls` and its `problems`: each call to a workflow, collection or operation the config does not have (`calls workflow "<name>", which does not exist`), or to an operation a page may not call directly, and, given the policies (`describeConfig` passes them unless they have problems), on a public site each start (`api.<name>(…)`, `.start(…)`, a `RunForm`) and direct call that no company `permit` could let a visitor make, its `when` and `unless` aside (one naming `anonymous`; on a site with a `login`, `anonymous` or the group `visitors`), whose message ends with the permit to add, and, whatever the policies, its call of a built-in workflow or read of a workflow's runs but `.result` (`.latest`, `.runs`, `.approvals`, `.ledger`), which the app refuses a visitor; which `sanoma check` fails on. A name not written out (a variable, a template with holes, a computed member) is skipped, as is a call through a namespace import or a destructured `api`.
583
+ - `readSites(root, description, connectors, policies?)`, from `@sanoma-ai/workflows/describe`, which `describeConfig` returns as `sites`: what each site calls, read with oxc and never run, for a workflow's **Used by**. A site is a folder of `sites/` with a `routes/`, named as a URL segment; its `routes/**` and `components/**` (`.ts`, `.tsx`, less tests) are read for each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`, called or passed on (`queryFn: api.data.leads.list`): `api.<name>` and `api.<name>.<method>` are the workflow whose `apiNameOf` is `<name>`, `api.data.<collection>.<op>` a collection, `api.<vendor>.<resource>.<op>` the operation of that id. Each is a `SiteCall` (`kind`, `target`, `method`, what it calls of a workflow or collection as written (`start`, `latest`, `list`), `via`, `file`, `line`, `column`, and `page`, the page's path from its `createFileRoute` or `createLazyFileRoute` id, in a page's file); a `SiteEntry` holds a site's `name`, its `title` (a string `defineSite({ title })` in `site.ts`), its `pages` (each `SitePage` a `path` from a route file's id, one per path, a layout and its index being one; and on a path with one parameter, such as `/sites/www/blog/$slug`, `content`, the one kind its file reads an entry of by that parameter, `content.<kind>.get(params.slug)` (or `slug`, destructured) with `content` from `sanoma/site`, for the app's sitemap and its pages' languages, which `siteContentPages(root)` gives the app's build alone, path to kind), its `calls`, its `warnings` (on a public site, each page with one parameter whose file reads content but not by that parameter, so the sitemap lists none of its pages: a warning `sanoma check` prints and does not fail on) and its `problems`: each call to a workflow, collection or operation the config does not have (`calls workflow "<name>", which does not exist`), or to an operation a page may not call directly, and, given the policies (`describeConfig` passes them unless they have problems), on a public site each start (`api.<name>(…)`, `.start(…)`, a `RunForm`) and direct call that no company `permit` could let a visitor make, its `when` and `unless` aside (one naming `anonymous`; on a site with a `login`, `anonymous` or the group `visitors`), whose message ends with the permit to add, and, whatever the policies, its call of a built-in workflow or read of a workflow's runs but `.result` (`.latest`, `.runs`, `.approvals`, `.ledger`), which the app refuses a visitor; which `sanoma check` fails on. A name not written out (a variable, a template with holes, a computed member) is skipped, as is a call through a namespace import or a destructured `api`.
584
584
  - `generateApi(description)` and `writeApi(root, description)`, from `@sanoma-ai/workflows/describe`: a site's typed `api`, `.sanoma/api.ts` (`API_FILE`), from a `ConfigDescription`, types and JSDoc only and the same text for the same description. It holds a record type per collection and `CompanyApi`: `<apiNameOf(workflow)>: WorkflowFn<input>` per workflow, built-ins too; `<vendor>: { <resource>: { <op>: OpFn<input> } }` for the operations `direct` marks; `data: { <collection>: CollectionApi<record> }`; each member documented from its title or description. Then it augments `sanoma/site`'s `Register`. Inputs are typed from their JSON Schema for the kinds a start form draws, constants, and unions of them (`null` among them); anything else, and every output, is `unknown`. A workflow with `describeConfig`'s api-name problem is left out (`problems`). `writeApi` writes only when the text differs (`wrote`).
585
585
  - `SanomaClient`: call an operation directly (`call`, see [Direct calls](#direct-calls)), start runs, list them (`runs({ limit, status, workflow })`) or read a workflow's last result (`latest`), read a run's ledger and approvals, decide approvals, with the checks described above, and start a drift check or an apply and read its report (`drift`, `driftReport`, `apply`, `applyReport`, see [Drift](#drift) and [Apply](#apply)).
586
586
  - `APPROVALS_EVENT` and `decisionEventOf(approvalId)`: the DBOS events a run publishes its approvals and each decision on, for a UI that reads DBOS directly. `ApprovalMessage` is the zod schema of a decision as a run reads it. `RunArgs` is what a run receives: its input, `startedBy` and, for a sandbox run, its scenario as `sandbox`.
@@ -19,7 +19,7 @@ export { Reference, type DataValue } from "./datafile.ts";
19
19
  */
20
20
  export declare function readResources(config: SanomaConfig): DeclaredResource[];
21
21
  export { LOCKFILE, readLockfile, serializeLockfile, writeLockfile, diffLockfiles, type Binding, type Bindings, type Rebind, } from "./lockfile.ts";
22
- export { readSites, type SiteCall, type SiteEntry } from "./sites.ts";
22
+ export { readSites, type SiteCall, type SiteEntry, type SitePage, siteContentPages, siteLocales } from "./sites.ts";
23
23
  export { API_FILE, generateApi, writeApi, writeGenerated } from "./sdk.ts";
24
24
  export { SCHEMA_FILE, schemaOf, schemaText, type CedarSchemaJson } from "./schema.ts";
25
25
  export type { ApplyInput, ApplyPlan, ApplyReport, ApplyResult, PlanAnswer, PlanStep } from "./apply.ts";
package/dist/describe.js CHANGED
@@ -34,7 +34,7 @@ export function readResources(config) {
34
34
  }
35
35
  export { LOCKFILE, readLockfile, serializeLockfile, writeLockfile, diffLockfiles, } from "./lockfile.js";
36
36
  // What the sites call, read from their source: a workflow's Used by.
37
- export { readSites } from "./sites.js";
37
+ export { readSites, siteContentPages, siteLocales } from "./sites.js";
38
38
  // The generated SDK, `.sanoma/api.ts`: a site's `api` typed from this description.
39
39
  export { API_FILE, generateApi, writeApi, writeGenerated } from "./sdk.js";
40
40
  // The Cedar schema, `.sanoma/schema.cedarschema`: what a company's policies are validated and decided against.
@@ -1 +1 @@
1
- {"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -23,6 +23,6 @@ export { resolveRevision, SOURCE_RESOLVE, type Source } from "./source.ts";
23
23
  export type { HostCapabilities, HostLifetime, HostOutputs, HostSpec } from "./host.ts";
24
24
  export { type CallOptions, SanomaClient, type RunsFilter, type RunSummary, type StartOptions, type StoredSecret, } from "./client.ts";
25
25
  export { dbosClient } from "./db.ts";
26
- export { AGENTS, ANONYMOUS, ANONYMOUS_PRINCIPAL, approverLabel, approverOf, declaresPeople, type PeopleResource, personOf, principalOf, RUNTIME_AGENTS, credentialReady, DEFAULT_SLEEP_NAME, ENDED_STATUSES, errorMessage, isEnded, isLoopback, isVisitor, mayDecide, problemAt, problemLine, RUN_STATUSES, type RunStatus, VISITORS, visitorPrincipal, } from "./shared.ts";
26
+ export { AGENTS, ANONYMOUS, ANONYMOUS_PRINCIPAL, approverLabel, approverOf, declaresPeople, type PeopleResource, personOf, principalOf, RUNTIME_AGENTS, credentialReady, DEFAULT_SLEEP_NAME, ENDED_STATUSES, errorMessage, isEnded, isLoopback, isVisitor, mayDecide, problemAt, problemLine, RUN_STATUSES, type RunStatus, VISITORS, visitorPrincipal, warningLine, } from "./shared.ts";
27
27
  export { defineDriver, type DriverImpl, type OpIdOf } from "./op.ts";
28
28
  export { defineSteps, type Expect, type RunView, type Seed, type Steps } from "./steps.ts";
package/dist/index.js CHANGED
@@ -25,7 +25,7 @@ export { SanomaClient, } from "./client.js";
25
25
  // A raw DBOS client on the runtime's database, for tests and tools that read DBOS directly.
26
26
  export { dbosClient } from "./db.js";
27
27
  // Also at `@sanoma-ai/workflows/shared`, which a browser bundle can import.
28
- export { AGENTS, ANONYMOUS, ANONYMOUS_PRINCIPAL, approverLabel, approverOf, declaresPeople, personOf, principalOf, RUNTIME_AGENTS, credentialReady, DEFAULT_SLEEP_NAME, ENDED_STATUSES, errorMessage, isEnded, isLoopback, isVisitor, mayDecide, problemAt, problemLine, RUN_STATUSES, VISITORS, visitorPrincipal, } from "./shared.js";
28
+ export { AGENTS, ANONYMOUS, ANONYMOUS_PRINCIPAL, approverLabel, approverOf, declaresPeople, personOf, principalOf, RUNTIME_AGENTS, credentialReady, DEFAULT_SLEEP_NAME, ENDED_STATUSES, errorMessage, isEnded, isLoopback, isVisitor, mayDecide, problemAt, problemLine, RUN_STATUSES, VISITORS, visitorPrincipal, warningLine, } from "./shared.js";
29
29
  // describeConfig, with the outline and every problem lintWorkflow finds, lives at
30
30
  // `@sanoma-ai/workflows/describe`: what a UI renders from, apart from what runs. The worker reads
31
31
  // each workflow's outline too, to hold its runs to it.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAOhB,eAAe,EACf,WAAW,EAEX,IAAI,EACJ,YAAY,EAMZ,eAAe,EAEf,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,cAAc,EACd,SAAS,GAWV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EAGf,cAAc,EACd,YAAY,EAQZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAA0C,MAAM,aAAa,CAAC;AACtH,2GAA2G;AAC3G,gIAAgI;AAChI,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAyB,aAAa,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,cAAc,EACd,UAAU,GAMX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,cAAc,GAMf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EAEX,IAAI,EAIJ,UAAU,EAIV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,YAAY,EAEZ,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,SAAS,EAIT,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,GAKf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAmC,MAAM,aAAa,CAAC;AAC3E,qGAAqG;AACrG,OAAO,EACL,cAAc,EACd,QAAQ,EACR,aAAa,EAEb,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;AAE3E,OAAO,EAEL,YAAY,GAKb,MAAM,aAAa,CAAC;AACrB,4FAA4F;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,4EAA4E;AAC5E,OAAO,EACL,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,cAAc,EAEd,QAAQ,EACR,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,QAAQ,EACR,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,kFAAkF;AAClF,kGAAkG;AAClG,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAgC,MAAM,SAAS,CAAC;AACrE,6FAA6F;AAC7F,OAAO,EAAE,WAAW,EAAoD,MAAM,YAAY,CAAC;AAC3F,8EAA8E"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAOhB,eAAe,EACf,WAAW,EAEX,IAAI,EACJ,YAAY,EAMZ,eAAe,EAEf,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,cAAc,EACd,SAAS,GAWV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EAGf,cAAc,EACd,YAAY,EAQZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAA0C,MAAM,aAAa,CAAC;AACtH,2GAA2G;AAC3G,gIAAgI;AAChI,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAyB,aAAa,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,cAAc,EACd,UAAU,GAMX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,cAAc,GAMf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EAEX,IAAI,EAIJ,UAAU,EAIV,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EAEX,YAAY,EACZ,YAAY,EAEZ,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,SAAS,EAIT,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,GAKf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAmC,MAAM,aAAa,CAAC;AAC3E,qGAAqG;AACrG,OAAO,EACL,cAAc,EACd,QAAQ,EACR,aAAa,EAEb,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;AAE3E,OAAO,EAEL,YAAY,GAKb,MAAM,aAAa,CAAC;AACrB,4FAA4F;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,4EAA4E;AAC5E,OAAO,EACL,MAAM,EACN,SAAS,EACT,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,cAAc,EAEd,QAAQ,EACR,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EAEZ,QAAQ,EACR,gBAAgB,EAChB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,kFAAkF;AAClF,kGAAkG;AAClG,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAgC,MAAM,SAAS,CAAC;AACrE,6FAA6F;AAC7F,OAAO,EAAE,WAAW,EAAoD,MAAM,YAAY,CAAC;AAC3F,8EAA8E"}
package/dist/shared.d.ts CHANGED
@@ -32,6 +32,12 @@ export declare const EFFECTS: readonly ["read", "write", "publish", "send", "mon
32
32
  export declare const WORKFLOW_ACTION = "workflow:";
33
33
  /** A site's folder name under `sites/`, its URL segment: what the app mounts and `readSites` reads. */
34
34
  export declare const SITE_NAME: RegExp;
35
+ /**
36
+ * A public site's language, as `defineSite({ locales })` names it: a BCP 47 language tag of a
37
+ * language and subtags (`en`, `fr`, `pt-BR`), which is also its URL segment (`/pt-BR/…`) and a
38
+ * content file's suffix (`<slug>.pt-BR.md`).
39
+ */
40
+ export declare const LOCALE: RegExp;
35
41
  /** A public site's domain: a host name of two labels or more, lowercase (`sanoma.example`). */
36
42
  export declare const DOMAIN_NAME: RegExp;
37
43
  /**
@@ -209,6 +215,8 @@ export declare function problemLine(p: {
209
215
  column?: number;
210
216
  message: string;
211
217
  }): string;
218
+ /** A warning as one line, as `problemLine` with `warning: ` before its message: what is worth fixing but not wrong. */
219
+ export declare const warningLine: (p: Parameters<typeof problemLine>[0]) => string;
212
220
  /**
213
221
  * Whether a host is this machine: `localhost`, `127.x.x.x` or `::1` (bare, or bracketed as a URL's
214
222
  * `hostname` has it). The one rule for what the app listens on and answers to, and for where the
package/dist/shared.js CHANGED
@@ -24,6 +24,12 @@ export const EFFECTS = ["read", "write", "publish", "send", "money", "access"];
24
24
  export const WORKFLOW_ACTION = "workflow:";
25
25
  /** A site's folder name under `sites/`, its URL segment: what the app mounts and `readSites` reads. */
26
26
  export const SITE_NAME = /^[a-z][a-z0-9-]*$/;
27
+ /**
28
+ * A public site's language, as `defineSite({ locales })` names it: a BCP 47 language tag of a
29
+ * language and subtags (`en`, `fr`, `pt-BR`), which is also its URL segment (`/pt-BR/…`) and a
30
+ * content file's suffix (`<slug>.pt-BR.md`).
31
+ */
32
+ export const LOCALE = /^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/;
27
33
  /** A public site's domain: a host name of two labels or more, lowercase (`sanoma.example`). */
28
34
  export const DOMAIN_NAME = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/;
29
35
  /**
@@ -269,6 +275,8 @@ export function problemLine(p) {
269
275
  return p.message;
270
276
  return p.line === undefined ? `${p.file}: ${p.message}` : `${p.file}:${p.line}:${p.column ?? 1}: ${p.message}`;
271
277
  }
278
+ /** A warning as one line, as `problemLine` with `warning: ` before its message: what is worth fixing but not wrong. */
279
+ export const warningLine = (p) => problemLine({ ...p, message: `warning: ${p.message}` });
272
280
  /**
273
281
  * Whether a host is this machine: `localhost`, `127.x.x.x` or `::1` (bare, or bracketed as a URL's
274
282
  * `hostname` has it). The one rule for what the app listens on and answers to, and for where the
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
package/dist/sites.d.ts CHANGED
@@ -31,6 +31,17 @@ export interface SiteCall {
31
31
  */
32
32
  page?: string;
33
33
  }
34
+ /** A page of a site: a route file's path, and for a page per content entry the kind it reads. */
35
+ export interface SitePage {
36
+ /** As `SiteCall.page` has it: `/sites/www`, `/sites/www/blog/$slug`. */
37
+ path: string;
38
+ /**
39
+ * For a path with one parameter (`$slug`), the content kind whose entries are its pages: the one
40
+ * kind its file reads by that parameter, `content.<kind>.get(params.slug)` (or `slug`,
41
+ * destructured) with `content` from `sanoma/site`.
42
+ */
43
+ content?: string;
44
+ }
34
45
  /** A site, `sites/<name>/`, and what it calls. */
35
46
  export interface SiteEntry {
36
47
  /** Its folder's name, where it is mounted: `/sites/<name>`. */
@@ -41,8 +52,15 @@ export interface SiteEntry {
41
52
  public?: true;
42
53
  /** `defineSite({ login })`, the connector whose login half signs visitors in, as written: one that names none is among `problems`. */
43
54
  login?: string;
55
+ /**
56
+ * `defineSite({ locales })`, a public site's languages, the first its default: kept only when
57
+ * every one is a `LOCALE`, written once, on a public site with no login; else a problem.
58
+ */
59
+ locales?: string[];
44
60
  /** The host a public site answers on: set by `startApp` from its `domains`, never by `readSites`. */
45
61
  domain?: string;
62
+ /** Its pages, by path: one for each path its `routes/` files give (a layout and its index are one). */
63
+ pages: SitePage[];
46
64
  /** Its calls, by file and then in the file's order. */
47
65
  calls: SiteCall[];
48
66
  /**
@@ -53,12 +71,19 @@ export interface SiteEntry {
53
71
  problems: (LintProblem & {
54
72
  file: string;
55
73
  })[];
74
+ /**
75
+ * On a public site, each page with one parameter whose file reads content the sitemap cannot
76
+ * tie to it (`SitePage.content`), so the sitemap lists none of its pages: at the first read.
77
+ */
78
+ warnings: (LintProblem & {
79
+ file: string;
80
+ })[];
56
81
  }
57
82
  /**
58
83
  * The sites under `root`: each folder of `sites/` with a `routes/` whose name is a URL segment,
59
84
  * by name (as `@sanoma-ai/app/build`'s `sitesOf` mounts them). Reads `routes/**` and
60
85
  * `components/**` (`.ts` and `.tsx`, less tests and declarations) of each with oxc, never running
61
- * them: each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
86
+ * them: each page (`SitePage`, from a route's id), each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
62
87
  * called or passed on (`queryFn: api.data.leads.list`):
63
88
  * `api.<name>` and `api.<name>.<method>` are a workflow, `api.data.<collection>.<op>` a collection,
64
89
  * and `api.<vendor>.<resource>.<op>` an operation. A name that is not written out (a variable, a
@@ -73,6 +98,18 @@ export interface SiteEntry {
73
98
  * built-in workflow, and its read of a workflow's runs but `.result`, which `callApi` refuses a visitor.
74
99
  */
75
100
  export declare function readSites(root: string | undefined, description: Pick<ConfigDescription, "workflows" | "collections" | "ops">, connectors: SiteConnectors, policies?: readonly CedarPolicySource[]): SiteEntry[];
101
+ /**
102
+ * Each site's pages under `root` whose entries are a content kind's (`SitePage.content`), path to
103
+ * kind: what the app's build gives its router (`virtual:sanoma/locales`), so a page lists only the
104
+ * languages its entry is in. Read as `readSites` reads them, never run.
105
+ */
106
+ export declare function siteContentPages(root: string): Record<string, string>;
107
+ /**
108
+ * Each site's languages (`defineSite({ locales })`, the first its default) under `root`, by name,
109
+ * for the sites whose `site.ts` gives them without a problem there: what the app's build gives
110
+ * its router (`virtual:sanoma/locales`). Read as `readSites` reads them, never run.
111
+ */
112
+ export declare function siteLocales(root: string): Record<string, string[]>;
76
113
  /** The connectors a site's `login` is checked against: the config's vendors, and those with a login half. */
77
114
  type SiteConnectors = {
78
115
  vendors: ReadonlySet<string>;
package/dist/sites.js CHANGED
@@ -6,19 +6,21 @@ import { keyName } from "./datafile.js";
6
6
  import { stringValue, unwrap } from "./outline.js";
7
7
  import { filesUnder, isDirectory } from "./paths.js";
8
8
  import { START } from "./schema.js";
9
- import { ANONYMOUS, apiNameOf, BUILT_IN_WORKFLOWS, DATA_VENDOR, SITE_NAME, VISITORS, WORKFLOW_ACTION, } from "./shared.js";
9
+ import { ANONYMOUS, apiNameOf, BUILT_IN_WORKFLOWS, DATA_VENDOR, LOCALE, SITE_NAME, VISITORS, WORKFLOW_ACTION, } from "./shared.js";
10
10
  /** Where a site's code is: its pages and its components. */
11
11
  const SITE_DIRS = ["routes", "components"];
12
12
  /** Where `api`, `RunForm` and `defineSite` come from: `sanoma/site`, which re-exports the app's. */
13
13
  const SITE_SOURCES = new Set(["sanoma/site", "@sanoma-ai/app/site"]);
14
14
  const KIND_NAMES = { workflow: "workflow", collection: "collection", op: "operation" };
15
+ /** What a route's loader and head name its path's parameters by. */
16
+ const PARAMS = new Set(["params"]);
15
17
  /** What makes a route from its id, whose first argument is the id. */
16
18
  const ROUTE_MAKERS = new Set(["createFileRoute", "createLazyFileRoute"]);
17
19
  /**
18
20
  * The sites under `root`: each folder of `sites/` with a `routes/` whose name is a URL segment,
19
21
  * by name (as `@sanoma-ai/app/build`'s `sitesOf` mounts them). Reads `routes/**` and
20
22
  * `components/**` (`.ts` and `.tsx`, less tests and declarations) of each with oxc, never running
21
- * them: each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
23
+ * them: each page (`SitePage`, from a route's id), each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
22
24
  * called or passed on (`queryFn: api.data.leads.list`):
23
25
  * `api.<name>` and `api.<name>.<method>` are a workflow, `api.data.<collection>.<op>` a collection,
24
26
  * and `api.<vendor>.<resource>.<op>` an operation. A name that is not written out (a variable, a
@@ -36,8 +38,6 @@ export function readSites(root, description, connectors, policies) {
36
38
  if (root === undefined)
37
39
  return [];
38
40
  const dir = join(root, "sites");
39
- if (!isDirectory(dir))
40
- return [];
41
41
  const workflows = new Set(description.workflows.map((wf) => wf.name));
42
42
  const collections = new Set(description.collections.map((c) => c.name));
43
43
  const ops = new Map(description.ops.map((op) => [op.id, op]));
@@ -96,16 +96,10 @@ export function readSites(root, description, connectors, policies) {
96
96
  : undefined;
97
97
  return { call: { kind, target, via, ...at }, ...(problem && { problem }) };
98
98
  };
99
- return readdirSync(dir, { withFileTypes: true })
100
- .filter((d) => d.isDirectory() && SITE_NAME.test(d.name) && existsSync(join(dir, d.name, "routes")))
101
- .map((d) => d.name)
102
- .toSorted()
103
- .map((name) => {
104
- const files = SITE_DIRS.flatMap((sub) => filesUnder(join(dir, name, sub), isSource)).toSorted();
105
- const resolved = files.flatMap((path) => {
106
- const file = readSource(path);
107
- return typeof file === "string" ? [] : usesIn(file, relative(root, path).split(sep).join("/")).map(resolve);
108
- });
99
+ return siteNames(dir).map((name) => {
100
+ const read = readSiteFiles(root, name);
101
+ const resolved = read.flatMap(({ uses }) => uses.map(resolve));
102
+ const pages = pagesOf(read);
109
103
  const siteFile = `sites/${name}/site.ts`;
110
104
  const { problems: optionProblems, ...options } = siteOptionsOf(join(root, siteFile), connectors);
111
105
  const calls = resolved.map((r) => r.call);
@@ -116,16 +110,71 @@ export function readSites(root, description, connectors, policies) {
116
110
  }),
117
111
  ...optionProblems.map((p) => ({ file: siteFile, ...p })),
118
112
  ];
119
- return { name, ...options, calls, problems };
113
+ const sorted = [...pages.keys()].toSorted().map((path) => pages.get(path));
114
+ // A page's file it warns of, unless another of its files (a lazy one, its layout) gives its kind.
115
+ const warnings = options.public
116
+ ? read.flatMap(({ route, warning }) => (warning && !pages.get(route.path)?.content ? [warning] : []))
117
+ : [];
118
+ return { name, ...options, pages: sorted, calls, problems, warnings };
120
119
  });
121
120
  }
122
- /** The uses in one file, in its order. */
123
- function usesIn({ program, at }, file) {
121
+ /** A site's pages, by path, from its files: a layout's and its index's (one path) merged. */
122
+ function pagesOf(read) {
123
+ const pages = new Map();
124
+ for (const { route } of read) {
125
+ if (route)
126
+ pages.set(route.path, { ...pages.get(route.path), ...route });
127
+ }
128
+ return pages;
129
+ }
130
+ /** Each of site `name`'s files under `root`, as `readSiteFile` reads it, by path. */
131
+ const readSiteFiles = (root, name) => SITE_DIRS.flatMap((sub) => filesUnder(join(root, "sites", name, sub), isSource))
132
+ .toSorted()
133
+ .flatMap((path) => {
134
+ const file = readSource(path);
135
+ return typeof file === "string" ? [] : [readSiteFile(file, relative(root, path).split(sep).join("/"))];
136
+ });
137
+ /**
138
+ * Each site's pages under `root` whose entries are a content kind's (`SitePage.content`), path to
139
+ * kind: what the app's build gives its router (`virtual:sanoma/locales`), so a page lists only the
140
+ * languages its entry is in. Read as `readSites` reads them, never run.
141
+ */
142
+ export function siteContentPages(root) {
143
+ return Object.fromEntries(siteNames(join(root, "sites")).flatMap((name) => [...pagesOf(readSiteFiles(root, name)).values()].flatMap(({ path, content }) => content ? [[path, content]] : [])));
144
+ }
145
+ /**
146
+ * Each site's languages (`defineSite({ locales })`, the first its default) under `root`, by name,
147
+ * for the sites whose `site.ts` gives them without a problem there: what the app's build gives
148
+ * its router (`virtual:sanoma/locales`). Read as `readSites` reads them, never run.
149
+ */
150
+ export function siteLocales(root) {
151
+ const none = new Set();
152
+ return Object.fromEntries(siteNames(join(root, "sites")).flatMap((name) => {
153
+ const { locales } = siteOptionsOf(join(root, "sites", name, "site.ts"), { vendors: none, logins: none });
154
+ return locales ? [[name, locales]] : [];
155
+ }));
156
+ }
157
+ /** The sites in `dir`: each folder with a `routes/` whose name is a URL segment, sorted. */
158
+ const siteNames = (dir) => isDirectory(dir)
159
+ ? readdirSync(dir, { withFileTypes: true })
160
+ .filter((d) => d.isDirectory() && SITE_NAME.test(d.name) && existsSync(join(dir, d.name, "routes")))
161
+ .map((d) => d.name)
162
+ .toSorted()
163
+ : [];
164
+ /**
165
+ * What one file holds: its uses, in its order, and the page it is, from its route's id, with the
166
+ * content kind whose entry its one parameter names (`SitePage.content`). A file under `routes/` is
167
+ * read whole; any other only when it imports `api` or `RunForm`.
168
+ */
169
+ function readSiteFile({ program, at }, file) {
124
170
  const api = importedAs(program, SITE_SOURCES, "api");
125
171
  const runForm = importedAs(program, SITE_SOURCES, "RunForm");
126
- if (!api.size && !runForm.size)
127
- return [];
172
+ const content = importedAs(program, SITE_SOURCES, "content");
173
+ if (!api.size && !runForm.size && !file.includes("/routes/"))
174
+ return { uses: [] };
128
175
  const found = [];
176
+ /** Each `content.<kind>.get(arg)`: its kind, its argument and where it is. */
177
+ const gets = [];
129
178
  let page;
130
179
  const visit = (node) => {
131
180
  if (!node)
@@ -136,13 +185,16 @@ function usesIn({ program, at }, file) {
136
185
  if (named)
137
186
  return void found.push({ ...named, via: "api", file, ...at(node.start) });
138
187
  }
139
- else if (node.type === "CallExpression" && page === undefined) {
188
+ else if (node.type === "CallExpression") {
140
189
  const callee = unwrap(node.callee);
141
- if (callee?.type === "Identifier" && ROUTE_MAKERS.has(callee.name)) {
190
+ if (callee?.type === "Identifier" && ROUTE_MAKERS.has(callee.name) && page === undefined) {
142
191
  const id = stringValue(node.arguments[0]);
143
192
  if (id !== undefined)
144
193
  page = pageOf(id);
145
194
  }
195
+ const kind = contentKind(callee, content);
196
+ if (kind !== undefined)
197
+ gets.push({ kind, arg: unwrap(node.arguments[0]), start: node.start });
146
198
  }
147
199
  else if (node.type === "JSXOpeningElement" && node.name.type === "JSXIdentifier" && runForm.has(node.name.name)) {
148
200
  const attribute = node.attributes.find((a) => a.type === "JSXAttribute" && a.name.type === "JSXIdentifier" && a.name.name === "workflow");
@@ -155,10 +207,48 @@ function usesIn({ program, at }, file) {
155
207
  visit(child);
156
208
  };
157
209
  visit(program);
158
- return found.map((use) => (page === undefined ? use : { ...use, page }));
210
+ const uses = found.map((use) => (page === undefined ? use : { ...use, page }));
211
+ if (page === undefined)
212
+ return { uses };
213
+ // The one parameter's name (not a splat's), and the kinds whose `get` is given it (`params.slug`, or `slug` destructured).
214
+ const params = page.split("/").filter((segment) => segment.startsWith("$"));
215
+ if (params.length !== 1 || params[0] === "$")
216
+ return { uses, route: { path: page } };
217
+ const param = params[0].slice(1);
218
+ const kinds = new Set(gets
219
+ .filter(({ arg }) => arg?.type === "Identifier"
220
+ ? arg.name === param
221
+ : arg?.type === "MemberExpression" && memberPath(arg, PARAMS)?.join(".") === param)
222
+ .map(({ kind }) => kind));
223
+ if (kinds.size === 1)
224
+ return { uses, route: { path: page, content: [...kinds][0] } };
225
+ // A read by the parameter in a form the sitemap does not follow (`params.id.toLowerCase()`, two kinds).
226
+ const unfollowed = gets.find(({ arg }) => mentions(arg, param));
227
+ if (!unfollowed)
228
+ return { uses, route: { path: page } };
229
+ const message = `the sitemap lists none of this page's entries: it reads content by the page's parameter in a way it cannot follow. ` +
230
+ `Read one kind by it as written, \`content.<kind>.get(params.${param})\` (or \`${param}\` destructured)`;
231
+ return { uses, route: { path: page }, warning: { file, ...at(unfollowed.start), message } };
159
232
  }
160
- /** What a member path on `api` names; undefined for a path on anything else, a name not written out, or no name. */
161
- function apiPath(member, api) {
233
+ /** Whether `node` reads the parameter `param` anywhere in it: `params.<param>`, or `param` destructured (not another parameter, nor a property's name, `post.slug` or `{ slug: x }`). */
234
+ const mentions = (node, param) => {
235
+ if (!node)
236
+ return false;
237
+ if (node.type === "Identifier")
238
+ return node.name === param;
239
+ if (node.type === "Property" && !node.computed)
240
+ return mentions(node.value, param);
241
+ if (node.type === "MemberExpression") {
242
+ const path = memberPath(node, PARAMS);
243
+ if (path)
244
+ return path[0] === param;
245
+ if (!node.computed)
246
+ return mentions(node.object, param);
247
+ }
248
+ return childrenOf(node).some((child) => mentions(child, param));
249
+ };
250
+ /** The names of a member path on one of `roots` (`api.data.leads.list` is `data`, `leads`, `list`); undefined for a path on anything else or a name not written out. */
251
+ function memberPath(member, roots) {
162
252
  const path = [];
163
253
  let node = member;
164
254
  while (node?.type === "MemberExpression") {
@@ -168,7 +258,17 @@ function apiPath(member, api) {
168
258
  path.unshift(key);
169
259
  node = unwrap(node.object);
170
260
  }
171
- if (node?.type !== "Identifier" || !api.has(node.name))
261
+ return node?.type === "Identifier" && roots.has(node.name) ? path : undefined;
262
+ }
263
+ /** The kind of `content.<kind>.get`, a callee on `content` imported from `sanoma/site`; undefined for any other. */
264
+ function contentKind(callee, content) {
265
+ const path = callee?.type === "MemberExpression" ? memberPath(callee, content) : undefined;
266
+ return path?.length === 2 && path[1] === "get" ? path[0] : undefined;
267
+ }
268
+ /** What a member path on `api` names; undefined for a path on anything else, a name not written out, or no name. */
269
+ function apiPath(member, api) {
270
+ const path = memberPath(member, api);
271
+ if (!path?.length)
172
272
  return undefined;
173
273
  const [first, second, third] = path;
174
274
  if (first === DATA_VENDOR)
@@ -202,8 +302,9 @@ const unread = (what, as) => `${what} is read without running site.ts: write it
202
302
  /**
203
303
  * What `site.ts` says of its site, read without running it, and what is wrong there: its default
204
304
  * export must be `defineSite({ … })` written out, so it can be read at all; then `title` when it is
205
- * a string, `public` and `login`, which must be literals. `login` is kept as written; one on a
305
+ * a string, `public`, `login` and `locales`, which must be literals. `login` is kept as written; one on a
206
306
  * site that is not public, or naming no connector of the config with a login half, is a problem.
307
+ * `locales` is kept only when it has no problem.
207
308
  */
208
309
  function siteOptionsOf(path, connectors) {
209
310
  const file = readSource(path);
@@ -257,10 +358,36 @@ function siteOptionsOf(path, connectors) {
257
358
  const message = loginAt && loginProblem();
258
359
  if (message)
259
360
  problem(loginAt, message);
361
+ const localesAt = property("locales");
362
+ const list = unwrap(localesAt?.value);
363
+ // A hole or a spread is no string.
364
+ const tags = list?.type === "ArrayExpression" ? list.elements.map((e) => stringValue(e)) : undefined;
365
+ const locales = tags?.every((tag) => tag !== undefined) ? tags : undefined;
366
+ const localesProblem = () => {
367
+ if (locales === undefined)
368
+ return unread("`locales`", "an array of strings");
369
+ if (!locales.length)
370
+ return "`locales` names a site's languages, its default first: give one or more, or remove it";
371
+ const bad = locales.find((locale) => !LOCALE.test(locale));
372
+ if (bad !== undefined)
373
+ return `"${bad}" is not a language tag such as "en", "fr" or "pt-BR"`;
374
+ const twice = locales.find((locale, i) => locales.indexOf(locale) !== i);
375
+ if (twice !== undefined)
376
+ return `"${twice}" is in \`locales\` twice`;
377
+ // When `public` is what is wrong, it is said there.
378
+ if ((!isPublic && !publicUnread) || loginAt) {
379
+ return "`locales` are for a public site with no login: add `public: true`, or remove `locales`";
380
+ }
381
+ return undefined;
382
+ };
383
+ const localesMessage = localesAt && localesProblem();
384
+ if (localesMessage)
385
+ problem(localesAt, localesMessage);
260
386
  return {
261
387
  ...(title !== undefined && { title }),
262
388
  ...(isPublic && { public: true }),
263
389
  ...(login !== undefined && { login }),
390
+ ...(localesAt && !localesMessage && isPublic && !loginAt && { locales }),
264
391
  problems,
265
392
  };
266
393
  }
package/dist/sites.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sites.js","sourceRoot":"","sources":["../src/sites.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../src/sites.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanoma-ai/workflows",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Business processes as TypeScript functions, run durably on DBOS",
5
5
  "keywords": [
6
6
  "approvals",
package/src/describe.ts CHANGED
@@ -63,7 +63,7 @@ export {
63
63
  type Rebind,
64
64
  } from "./lockfile.ts";
65
65
  // What the sites call, read from their source: a workflow's Used by.
66
- export { readSites, type SiteCall, type SiteEntry } from "./sites.ts";
66
+ export { readSites, type SiteCall, type SiteEntry, type SitePage, siteContentPages, siteLocales } from "./sites.ts";
67
67
  // The generated SDK, `.sanoma/api.ts`: a site's `api` typed from this description.
68
68
  export { API_FILE, generateApi, writeApi, writeGenerated } from "./sdk.ts";
69
69
  // The Cedar schema, `.sanoma/schema.cedarschema`: what a company's policies are validated and decided against.
package/src/index.ts CHANGED
@@ -175,6 +175,7 @@ export {
175
175
  type RunStatus,
176
176
  VISITORS,
177
177
  visitorPrincipal,
178
+ warningLine,
178
179
  } from "./shared.ts";
179
180
  // describeConfig, with the outline and every problem lintWorkflow finds, lives at
180
181
  // `@sanoma-ai/workflows/describe`: what a UI renders from, apart from what runs. The worker reads
package/src/shared.ts CHANGED
@@ -55,6 +55,13 @@ export const WORKFLOW_ACTION = "workflow:";
55
55
  /** A site's folder name under `sites/`, its URL segment: what the app mounts and `readSites` reads. */
56
56
  export const SITE_NAME = /^[a-z][a-z0-9-]*$/;
57
57
 
58
+ /**
59
+ * A public site's language, as `defineSite({ locales })` names it: a BCP 47 language tag of a
60
+ * language and subtags (`en`, `fr`, `pt-BR`), which is also its URL segment (`/pt-BR/…`) and a
61
+ * content file's suffix (`<slug>.pt-BR.md`).
62
+ */
63
+ export const LOCALE = /^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/;
64
+
58
65
  /** A public site's domain: a host name of two labels or more, lowercase (`sanoma.example`). */
59
66
  export const DOMAIN_NAME = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/;
60
67
 
@@ -395,6 +402,10 @@ export function problemLine(p: { file?: string; line?: number; column?: number;
395
402
  return p.line === undefined ? `${p.file}: ${p.message}` : `${p.file}:${p.line}:${p.column ?? 1}: ${p.message}`;
396
403
  }
397
404
 
405
+ /** A warning as one line, as `problemLine` with `warning: ` before its message: what is worth fixing but not wrong. */
406
+ export const warningLine = (p: Parameters<typeof problemLine>[0]): string =>
407
+ problemLine({ ...p, message: `warning: ${p.message}` });
408
+
398
409
  /**
399
410
  * Whether a host is this machine: `localhost`, `127.x.x.x` or `::1` (bare, or bracketed as a URL's
400
411
  * `hostname` has it). The one rule for what the app listens on and answers to, and for where the
package/src/sites.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  apiNameOf,
13
13
  BUILT_IN_WORKFLOWS,
14
14
  DATA_VENDOR,
15
+ LOCALE,
15
16
  SITE_NAME,
16
17
  VISITORS,
17
18
  WORKFLOW_ACTION,
@@ -51,6 +52,18 @@ export interface SiteCall {
51
52
  page?: string;
52
53
  }
53
54
 
55
+ /** A page of a site: a route file's path, and for a page per content entry the kind it reads. */
56
+ export interface SitePage {
57
+ /** As `SiteCall.page` has it: `/sites/www`, `/sites/www/blog/$slug`. */
58
+ path: string;
59
+ /**
60
+ * For a path with one parameter (`$slug`), the content kind whose entries are its pages: the one
61
+ * kind its file reads by that parameter, `content.<kind>.get(params.slug)` (or `slug`,
62
+ * destructured) with `content` from `sanoma/site`.
63
+ */
64
+ content?: string;
65
+ }
66
+
54
67
  /** A site, `sites/<name>/`, and what it calls. */
55
68
  export interface SiteEntry {
56
69
  /** Its folder's name, where it is mounted: `/sites/<name>`. */
@@ -61,8 +74,15 @@ export interface SiteEntry {
61
74
  public?: true;
62
75
  /** `defineSite({ login })`, the connector whose login half signs visitors in, as written: one that names none is among `problems`. */
63
76
  login?: string;
77
+ /**
78
+ * `defineSite({ locales })`, a public site's languages, the first its default: kept only when
79
+ * every one is a `LOCALE`, written once, on a public site with no login; else a problem.
80
+ */
81
+ locales?: string[];
64
82
  /** The host a public site answers on: set by `startApp` from its `domains`, never by `readSites`. */
65
83
  domain?: string;
84
+ /** Its pages, by path: one for each path its `routes/` files give (a layout and its index are one). */
85
+ pages: SitePage[];
66
86
  /** Its calls, by file and then in the file's order. */
67
87
  calls: SiteCall[];
68
88
  /**
@@ -71,6 +91,11 @@ export interface SiteEntry {
71
91
  * make, at its file; then what is wrong in its `site.ts`.
72
92
  */
73
93
  problems: (LintProblem & { file: string })[];
94
+ /**
95
+ * On a public site, each page with one parameter whose file reads content the sitemap cannot
96
+ * tie to it (`SitePage.content`), so the sitemap lists none of its pages: at the first read.
97
+ */
98
+ warnings: (LintProblem & { file: string })[];
74
99
  }
75
100
 
76
101
  /** Where a site's code is: its pages and its components. */
@@ -78,6 +103,8 @@ const SITE_DIRS = ["routes", "components"];
78
103
  /** Where `api`, `RunForm` and `defineSite` come from: `sanoma/site`, which re-exports the app's. */
79
104
  const SITE_SOURCES: ReadonlySet<string> = new Set(["sanoma/site", "@sanoma-ai/app/site"]);
80
105
  const KIND_NAMES = { workflow: "workflow", collection: "collection", op: "operation" } as const;
106
+ /** What a route's loader and head name its path's parameters by. */
107
+ const PARAMS: ReadonlySet<string> = new Set(["params"]);
81
108
  /** What makes a route from its id, whose first argument is the id. */
82
109
  const ROUTE_MAKERS: ReadonlySet<string> = new Set(["createFileRoute", "createLazyFileRoute"]);
83
110
 
@@ -85,7 +112,7 @@ const ROUTE_MAKERS: ReadonlySet<string> = new Set(["createFileRoute", "createLaz
85
112
  * The sites under `root`: each folder of `sites/` with a `routes/` whose name is a URL segment,
86
113
  * by name (as `@sanoma-ai/app/build`'s `sitesOf` mounts them). Reads `routes/**` and
87
114
  * `components/**` (`.ts` and `.tsx`, less tests and declarations) of each with oxc, never running
88
- * them: each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
115
+ * them: each page (`SitePage`, from a route's id), each `<RunForm workflow="…" />` and each use of `api`, both imported from `sanoma/site`,
89
116
  * called or passed on (`queryFn: api.data.leads.list`):
90
117
  * `api.<name>` and `api.<name>.<method>` are a workflow, `api.data.<collection>.<op>` a collection,
91
118
  * and `api.<vendor>.<resource>.<op>` an operation. A name that is not written out (a variable, a
@@ -107,7 +134,6 @@ export function readSites(
107
134
  ): SiteEntry[] {
108
135
  if (root === undefined) return [];
109
136
  const dir = join(root, "sites");
110
- if (!isDirectory(dir)) return [];
111
137
  const workflows = new Set(description.workflows.map((wf) => wf.name));
112
138
  const collections = new Set(description.collections.map((c) => c.name));
113
139
  const ops = new Map(description.ops.map((op) => [op.id, op]));
@@ -167,39 +193,105 @@ export function readSites(
167
193
  return { call: { kind, target, via, ...at }, ...(problem && { problem }) };
168
194
  };
169
195
 
170
- return readdirSync(dir, { withFileTypes: true })
171
- .filter((d) => d.isDirectory() && SITE_NAME.test(d.name) && existsSync(join(dir, d.name, "routes")))
172
- .map((d) => d.name)
196
+ return siteNames(dir).map((name) => {
197
+ const read = readSiteFiles(root, name);
198
+ const resolved = read.flatMap(({ uses }) => uses.map(resolve));
199
+ const pages = pagesOf(read);
200
+ const siteFile = `sites/${name}/site.ts`;
201
+ const { problems: optionProblems, ...options } = siteOptionsOf(join(root, siteFile), connectors);
202
+ const calls = resolved.map((r) => r.call);
203
+ const problems = [
204
+ ...resolved.flatMap(({ call, problem }) => {
205
+ const message = problem ?? (options.public ? refused(call, options.login) : undefined);
206
+ return message === undefined ? [] : [{ file: call.file, line: call.line, column: call.column, message }];
207
+ }),
208
+ ...optionProblems.map((p) => ({ file: siteFile, ...p })),
209
+ ];
210
+ const sorted = [...pages.keys()].toSorted().map((path) => pages.get(path)!);
211
+ // A page's file it warns of, unless another of its files (a lazy one, its layout) gives its kind.
212
+ const warnings = options.public
213
+ ? read.flatMap(({ route, warning }) => (warning && !pages.get(route!.path)?.content ? [warning] : []))
214
+ : [];
215
+ return { name, ...options, pages: sorted, calls, problems, warnings };
216
+ });
217
+ }
218
+
219
+ /** A site's pages, by path, from its files: a layout's and its index's (one path) merged. */
220
+ function pagesOf(read: readonly { route?: SitePage }[]): Map<string, SitePage> {
221
+ const pages = new Map<string, SitePage>();
222
+ for (const { route } of read) {
223
+ if (route) pages.set(route.path, { ...pages.get(route.path), ...route });
224
+ }
225
+ return pages;
226
+ }
227
+
228
+ /** Each of site `name`'s files under `root`, as `readSiteFile` reads it, by path. */
229
+ const readSiteFiles = (root: string, name: string) =>
230
+ SITE_DIRS.flatMap((sub) => filesUnder(join(root, "sites", name, sub), isSource))
173
231
  .toSorted()
174
- .map((name) => {
175
- const files = SITE_DIRS.flatMap((sub) => filesUnder(join(dir, name, sub), isSource)).toSorted();
176
- const resolved = files.flatMap((path) => {
177
- const file = readSource(path);
178
- return typeof file === "string" ? [] : usesIn(file, relative(root, path).split(sep).join("/")).map(resolve);
179
- });
180
- const siteFile = `sites/${name}/site.ts`;
181
- const { problems: optionProblems, ...options } = siteOptionsOf(join(root, siteFile), connectors);
182
- const calls = resolved.map((r) => r.call);
183
- const problems = [
184
- ...resolved.flatMap(({ call, problem }) => {
185
- const message = problem ?? (options.public ? refused(call, options.login) : undefined);
186
- return message === undefined ? [] : [{ file: call.file, line: call.line, column: call.column, message }];
187
- }),
188
- ...optionProblems.map((p) => ({ file: siteFile, ...p })),
189
- ];
190
- return { name, ...options, calls, problems };
232
+ .flatMap((path) => {
233
+ const file = readSource(path);
234
+ return typeof file === "string" ? [] : [readSiteFile(file, relative(root, path).split(sep).join("/"))];
191
235
  });
236
+
237
+ /**
238
+ * Each site's pages under `root` whose entries are a content kind's (`SitePage.content`), path to
239
+ * kind: what the app's build gives its router (`virtual:sanoma/locales`), so a page lists only the
240
+ * languages its entry is in. Read as `readSites` reads them, never run.
241
+ */
242
+ export function siteContentPages(root: string): Record<string, string> {
243
+ return Object.fromEntries(
244
+ siteNames(join(root, "sites")).flatMap((name) =>
245
+ [...pagesOf(readSiteFiles(root, name)).values()].flatMap(({ path, content }) =>
246
+ content ? [[path, content]] : [],
247
+ ),
248
+ ),
249
+ );
250
+ }
251
+
252
+ /**
253
+ * Each site's languages (`defineSite({ locales })`, the first its default) under `root`, by name,
254
+ * for the sites whose `site.ts` gives them without a problem there: what the app's build gives
255
+ * its router (`virtual:sanoma/locales`). Read as `readSites` reads them, never run.
256
+ */
257
+ export function siteLocales(root: string): Record<string, string[]> {
258
+ const none = new Set<string>();
259
+ return Object.fromEntries(
260
+ siteNames(join(root, "sites")).flatMap((name) => {
261
+ const { locales } = siteOptionsOf(join(root, "sites", name, "site.ts"), { vendors: none, logins: none });
262
+ return locales ? [[name, locales]] : [];
263
+ }),
264
+ );
192
265
  }
193
266
 
267
+ /** The sites in `dir`: each folder with a `routes/` whose name is a URL segment, sorted. */
268
+ const siteNames = (dir: string): string[] =>
269
+ isDirectory(dir)
270
+ ? readdirSync(dir, { withFileTypes: true })
271
+ .filter((d) => d.isDirectory() && SITE_NAME.test(d.name) && existsSync(join(dir, d.name, "routes")))
272
+ .map((d) => d.name)
273
+ .toSorted()
274
+ : [];
275
+
194
276
  /** A use of `api` or a `RunForm`, as written: the name it gives, before it is resolved. */
195
277
  type Written = Omit<SiteCall, "target"> & { name: string };
196
278
 
197
- /** The uses in one file, in its order. */
198
- function usesIn({ program, at }: SourceFile, file: string): Written[] {
279
+ /**
280
+ * What one file holds: its uses, in its order, and the page it is, from its route's id, with the
281
+ * content kind whose entry its one parameter names (`SitePage.content`). A file under `routes/` is
282
+ * read whole; any other only when it imports `api` or `RunForm`.
283
+ */
284
+ function readSiteFile(
285
+ { program, at }: SourceFile,
286
+ file: string,
287
+ ): { uses: Written[]; route?: SitePage; warning?: LintProblem & { file: string } } {
199
288
  const api = importedAs(program, SITE_SOURCES, "api");
200
289
  const runForm = importedAs(program, SITE_SOURCES, "RunForm");
201
- if (!api.size && !runForm.size) return [];
290
+ const content = importedAs(program, SITE_SOURCES, "content");
291
+ if (!api.size && !runForm.size && !file.includes("/routes/")) return { uses: [] };
202
292
  const found: Omit<Written, "page">[] = [];
293
+ /** Each `content.<kind>.get(arg)`: its kind, its argument and where it is. */
294
+ const gets: { kind: string; arg: Node; start: number }[] = [];
203
295
  let page: string | undefined;
204
296
  const visit = (node: Node) => {
205
297
  if (!node) return;
@@ -207,12 +299,14 @@ function usesIn({ program, at }: SourceFile, file: string): Written[] {
207
299
  const named = apiPath(node, api);
208
300
  // The outermost member of a path on `api`: what it names, called or not; its inner members are not visited.
209
301
  if (named) return void found.push({ ...named, via: "api", file, ...at(node.start) });
210
- } else if (node.type === "CallExpression" && page === undefined) {
302
+ } else if (node.type === "CallExpression") {
211
303
  const callee = unwrap(node.callee);
212
- if (callee?.type === "Identifier" && ROUTE_MAKERS.has(callee.name)) {
304
+ if (callee?.type === "Identifier" && ROUTE_MAKERS.has(callee.name) && page === undefined) {
213
305
  const id = stringValue(node.arguments[0]);
214
306
  if (id !== undefined) page = pageOf(id);
215
307
  }
308
+ const kind = contentKind(callee, content);
309
+ if (kind !== undefined) gets.push({ kind, arg: unwrap(node.arguments[0]), start: node.start });
216
310
  } else if (node.type === "JSXOpeningElement" && node.name.type === "JSXIdentifier" && runForm.has(node.name.name)) {
217
311
  const attribute = node.attributes.find(
218
312
  (a: Node) => a.type === "JSXAttribute" && a.name.type === "JSXIdentifier" && a.name.name === "workflow",
@@ -224,11 +318,46 @@ function usesIn({ program, at }: SourceFile, file: string): Written[] {
224
318
  for (const child of childrenOf(node)) visit(child);
225
319
  };
226
320
  visit(program);
227
- return found.map((use) => (page === undefined ? use : { ...use, page }));
321
+ const uses = found.map((use) => (page === undefined ? use : { ...use, page }));
322
+ if (page === undefined) return { uses };
323
+ // The one parameter's name (not a splat's), and the kinds whose `get` is given it (`params.slug`, or `slug` destructured).
324
+ const params = page.split("/").filter((segment) => segment.startsWith("$"));
325
+ if (params.length !== 1 || params[0] === "$") return { uses, route: { path: page } };
326
+ const param = params[0]!.slice(1);
327
+ const kinds = new Set(
328
+ gets
329
+ .filter(({ arg }) =>
330
+ arg?.type === "Identifier"
331
+ ? arg.name === param
332
+ : arg?.type === "MemberExpression" && memberPath(arg, PARAMS)?.join(".") === param,
333
+ )
334
+ .map(({ kind }) => kind),
335
+ );
336
+ if (kinds.size === 1) return { uses, route: { path: page, content: [...kinds][0]! } };
337
+ // A read by the parameter in a form the sitemap does not follow (`params.id.toLowerCase()`, two kinds).
338
+ const unfollowed = gets.find(({ arg }) => mentions(arg, param));
339
+ if (!unfollowed) return { uses, route: { path: page } };
340
+ const message =
341
+ `the sitemap lists none of this page's entries: it reads content by the page's parameter in a way it cannot follow. ` +
342
+ `Read one kind by it as written, \`content.<kind>.get(params.${param})\` (or \`${param}\` destructured)`;
343
+ return { uses, route: { path: page }, warning: { file, ...at(unfollowed.start), message } };
228
344
  }
229
345
 
230
- /** What a member path on `api` names; undefined for a path on anything else, a name not written out, or no name. */
231
- function apiPath(member: Node, api: ReadonlySet<string>): Pick<Written, "kind" | "name" | "method"> | undefined {
346
+ /** Whether `node` reads the parameter `param` anywhere in it: `params.<param>`, or `param` destructured (not another parameter, nor a property's name, `post.slug` or `{ slug: x }`). */
347
+ const mentions = (node: Node, param: string): boolean => {
348
+ if (!node) return false;
349
+ if (node.type === "Identifier") return node.name === param;
350
+ if (node.type === "Property" && !node.computed) return mentions(node.value, param);
351
+ if (node.type === "MemberExpression") {
352
+ const path = memberPath(node, PARAMS);
353
+ if (path) return path[0] === param;
354
+ if (!node.computed) return mentions(node.object, param);
355
+ }
356
+ return childrenOf(node).some((child) => mentions(child, param));
357
+ };
358
+
359
+ /** The names of a member path on one of `roots` (`api.data.leads.list` is `data`, `leads`, `list`); undefined for a path on anything else or a name not written out. */
360
+ function memberPath(member: Node, roots: ReadonlySet<string>): string[] | undefined {
232
361
  const path: string[] = [];
233
362
  let node = member;
234
363
  while (node?.type === "MemberExpression") {
@@ -237,7 +366,19 @@ function apiPath(member: Node, api: ReadonlySet<string>): Pick<Written, "kind" |
237
366
  path.unshift(key);
238
367
  node = unwrap(node.object);
239
368
  }
240
- if (node?.type !== "Identifier" || !api.has(node.name)) return undefined;
369
+ return node?.type === "Identifier" && roots.has(node.name) ? path : undefined;
370
+ }
371
+
372
+ /** The kind of `content.<kind>.get`, a callee on `content` imported from `sanoma/site`; undefined for any other. */
373
+ function contentKind(callee: Node, content: ReadonlySet<string>): string | undefined {
374
+ const path = callee?.type === "MemberExpression" ? memberPath(callee, content) : undefined;
375
+ return path?.length === 2 && path[1] === "get" ? path[0] : undefined;
376
+ }
377
+
378
+ /** What a member path on `api` names; undefined for a path on anything else, a name not written out, or no name. */
379
+ function apiPath(member: Node, api: ReadonlySet<string>): Pick<Written, "kind" | "name" | "method"> | undefined {
380
+ const path = memberPath(member, api);
381
+ if (!path?.length) return undefined;
241
382
  const [first, second, third] = path as [string, ...string[]];
242
383
  if (first === DATA_VENDOR)
243
384
  return path.length === 3 ? { kind: "collection", name: second!, method: third } : undefined;
@@ -273,13 +414,14 @@ const unread = (what: string, as: string) => `${what} is read without running si
273
414
  /**
274
415
  * What `site.ts` says of its site, read without running it, and what is wrong there: its default
275
416
  * export must be `defineSite({ … })` written out, so it can be read at all; then `title` when it is
276
- * a string, `public` and `login`, which must be literals. `login` is kept as written; one on a
417
+ * a string, `public`, `login` and `locales`, which must be literals. `login` is kept as written; one on a
277
418
  * site that is not public, or naming no connector of the config with a login half, is a problem.
419
+ * `locales` is kept only when it has no problem.
278
420
  */
279
421
  function siteOptionsOf(
280
422
  path: string,
281
423
  connectors: SiteConnectors,
282
- ): Pick<SiteEntry, "title" | "public" | "login"> & { problems: LintProblem[] } {
424
+ ): Pick<SiteEntry, "title" | "public" | "login" | "locales"> & { problems: LintProblem[] } {
283
425
  const file = readSource(path);
284
426
  if (typeof file === "string") return { problems: [] };
285
427
  const problems: LintProblem[] = [...file.problems];
@@ -329,10 +471,33 @@ function siteOptionsOf(
329
471
  };
330
472
  const message = loginAt && loginProblem();
331
473
  if (message) problem(loginAt, message);
474
+
475
+ const localesAt = property("locales");
476
+ const list = unwrap(localesAt?.value);
477
+ // A hole or a spread is no string.
478
+ const tags: (string | undefined)[] | undefined =
479
+ list?.type === "ArrayExpression" ? list.elements.map((e: Node) => stringValue(e)) : undefined;
480
+ const locales = tags?.every((tag): tag is string => tag !== undefined) ? tags : undefined;
481
+ const localesProblem = (): string | undefined => {
482
+ if (locales === undefined) return unread("`locales`", "an array of strings");
483
+ if (!locales.length) return "`locales` names a site's languages, its default first: give one or more, or remove it";
484
+ const bad = locales.find((locale) => !LOCALE.test(locale));
485
+ if (bad !== undefined) return `"${bad}" is not a language tag such as "en", "fr" or "pt-BR"`;
486
+ const twice = locales.find((locale, i) => locales.indexOf(locale) !== i);
487
+ if (twice !== undefined) return `"${twice}" is in \`locales\` twice`;
488
+ // When `public` is what is wrong, it is said there.
489
+ if ((!isPublic && !publicUnread) || loginAt) {
490
+ return "`locales` are for a public site with no login: add `public: true`, or remove `locales`";
491
+ }
492
+ return undefined;
493
+ };
494
+ const localesMessage = localesAt && localesProblem();
495
+ if (localesMessage) problem(localesAt, localesMessage);
332
496
  return {
333
497
  ...(title !== undefined && { title }),
334
498
  ...(isPublic && { public: true as const }),
335
499
  ...(login !== undefined && { login }),
500
+ ...(localesAt && !localesMessage && isPublic && !loginAt && { locales }),
336
501
  problems,
337
502
  };
338
503
  }