create-kumiko-app 0.4.195 → 0.4.197

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
@@ -40,5 +40,5 @@ bun run boot
40
40
 
41
41
  The picker reads a vendored copy of `feature-manifest.json` from the
42
42
  framework's `samples/apps/use-all-bundled` workspace. A CI drift-test
43
- fails if the vendored copy goes stale — run `bun run vendor:manifest`
44
- inside this package to refresh.
43
+ fails if the vendored copy goes stale — run `bun run gen:manifest`
44
+ inside `samples/apps/use-all-bundled` to refresh both copies.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
3
- "featureCount": 65,
3
+ "featureCount": 66,
4
4
  "features": [
5
5
  {
6
6
  "name": "admin-shell",
@@ -502,6 +502,32 @@
502
502
  "recommended": true
503
503
  }
504
504
  },
505
+ {
506
+ "name": "derivatives-sharp",
507
+ "description": "Registers an `image/*` renderer against the `derivativeRenderer` extension point declared by `file-derivatives`, backed by sharp. Supports resize/fit (cover, inside, contain), format conversion with quality (webp, avif, jpeg), whole-image blur, and blurring individual regions burned in before resize (see BlurRegion). EXIF orientation is applied and then normalized away, and all other EXIF (including GPS) is dropped. Server-only: sharp is a native binding — never import this from client code.",
508
+ "toggleableDefault": null,
509
+ "requires": [
510
+ "file-derivatives"
511
+ ],
512
+ "optionalRequires": [],
513
+ "configReads": [],
514
+ "exposesApis": [],
515
+ "usesApis": [],
516
+ "extensionsUsed": [
517
+ {
518
+ "extensionName": "derivativeRenderer",
519
+ "entityName": "image/*"
520
+ }
521
+ ],
522
+ "configKeys": [],
523
+ "secrets": [],
524
+ "writeHandlers": [],
525
+ "uiHints": {
526
+ "displayLabel": "File Derivatives · Sharp",
527
+ "category": "storage",
528
+ "recommended": false
529
+ }
530
+ },
505
531
  {
506
532
  "name": "document-ingest-foundation",
507
533
  "description": "Shared PDF/Scan/Image → normalized-text ingest primitive. Owns the `documentExtract` entity (fileRefId, storageKey, per-page text + metadata) as an implicit entity-projection, the per-tenant `ocrLanguage`/`maxPagesPerFile` config keys, and a fileRef.created trigger that validates mime/size and requests ingest via `documentIngest.requested`. LiteParse provider wiring lands in follow-up features.",
@@ -600,7 +626,7 @@
600
626
  },
601
627
  {
602
628
  "name": "file-derivatives",
603
- "description": "Declares the `derivativeRenderer` extension point. `ctx.derivatives.variant(fileRefId, spec, name)` derives a variant of a tracked FileRef the first time it's requested and reuses the stored result afterwards (derive-on-first-use, keyed by a hash of the spec). Mount at least one `derivatives-*` renderer feature alongside this one — without a registered renderer for the FileRef's MIME type, every `variant(...)` call throws.",
629
+ "description": "Declares the `derivativeRenderer` extension point. `ctx.derivatives.variant(fileRefId, spec, name)` derives a variant of a tracked FileRef the first time it's requested and reuses the stored result afterwards (derive-on-first-use, keyed by a hash of the spec). Mount at least one `derivatives-*` renderer feature alongside this one — without a registered renderer for the FileRef's MIME type, every `variant(...)` call throws. Also declares the `derivativePublicPredicate` extension point (`r.useExtension(EXT_DERIVATIVE_PUBLIC_PREDICATE, '<entityType>', { isPublic })`) and, when `createFileDerivativesFeature({resolveApexTenant})` is passed a host-resolver, mounts an anonymous `GET {basePath}/:fileRefId/:variant` route that serves ONE of the 4 fixed presets (thumb/card/hero/full) for a FileRef whose entityType has a registered predicate returning true — default-deny (404) otherwise, same as an unknown FileRef.",
604
630
  "toggleableDefault": null,
605
631
  "requires": [
606
632
  "file-foundation"
@@ -924,10 +950,10 @@
924
950
  "name": "form-draft",
925
951
  "description": "Per-user, per-tenant working copy of an in-progress form, saved BEFORE the real domain entity exists. Owns one event-sourced entity, `form-draft` (`read_form_drafts`), keyed by a caller-assigned draftKey (typically screenId + optional hostEntityId), unique per (tenant, owner, draftKey). `save` upserts the draft blob ({ values, stepIndex, savedAt } — savedAt stamped server-side), `discard` deletes it (called once the real submit succeeds), `get` resumes it, `list` finds a user's open drafts for a given screenId (draftKey prefix match) — the fallback when a client-generated draftId is lost. Ownership is enforced by a per-row owner filter in every handler, not by roles — a foreign user's save/discard/get/list for someone else's draftKey never sees or touches that row. Never holds anything that already lives in a domain stream; the consuming app is responsible for discarding once the domain write succeeds. A daily cron job hard-deletes drafts past a configurable retention window (`form-draft:config:retention-days`, SystemAdmin-writable, default 30 days).",
926
952
  "toggleableDefault": null,
927
- "requires": [
953
+ "requires": [],
954
+ "optionalRequires": [
928
955
  "config"
929
956
  ],
930
- "optionalRequires": [],
931
957
  "configReads": [],
932
958
  "exposesApis": [],
933
959
  "usesApis": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-kumiko-app",
3
- "version": "0.4.195",
3
+ "version": "0.4.197",
4
4
  "description": "`bun create kumiko-app <name>` — scaffold a new Kumiko app with an interactive feature picker.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -26,13 +26,10 @@
26
26
  "default": "./src/index.ts"
27
27
  }
28
28
  },
29
- "scripts": {
30
- "vendor:manifest": "bun run scripts/vendor-manifest.ts"
31
- },
32
29
  "dependencies": {
33
- "@cosmicdrift/kumiko-dev-server": "0.191.0",
34
- "@cosmicdrift/kumiko-framework": "0.191.0",
35
- "@cosmicdrift/kumiko-server-runtime": "0.191.0",
30
+ "@cosmicdrift/kumiko-dev-server": "0.193.0",
31
+ "@cosmicdrift/kumiko-framework": "0.193.0",
32
+ "@cosmicdrift/kumiko-server-runtime": "0.193.0",
36
33
  "@inquirer/core": "^10.0.0",
37
34
  "@inquirer/prompts": "^7.4.0"
38
35
  },
@@ -1,7 +1,8 @@
1
1
  // Vendored manifest.json must match the source-of-truth in
2
2
  // samples/apps/use-all-bundled/feature-manifest.json. The picker reads
3
3
  // the vendored copy at runtime; a stale copy lets the picker show old
4
- // features or miss new ones. Refresh with `bun run vendor:manifest`.
4
+ // features or miss new ones. Refresh by running `bun run gen:manifest`
5
+ // inside samples/apps/use-all-bundled (writes both copies at once).
5
6
 
6
7
  import { describe, expect, test } from "bun:test";
7
8
  import { readFileSync } from "node:fs";
package/src/manifest.ts CHANGED
@@ -1,8 +1,9 @@
1
- // Loads the vendored feature-manifest.json (copied from
2
- // samples/apps/use-all-bundled by scripts/vendor-manifest.ts) at runtime.
3
- // The published package ships the JSON next to package.json so the picker
4
- // works without network access the source-of-truth at build time is the
5
- // sample-app's manifest, kept in sync via a CI drift-test.
1
+ // Loads the vendored feature-manifest.json (written alongside
2
+ // samples/apps/use-all-bundled/feature-manifest.json by that package's
3
+ // scripts/gen-feature-manifest.ts) at runtime. The published package
4
+ // ships the JSON next to package.json so the picker works without
5
+ // network access the source-of-truth at build time is the sample-app's
6
+ // manifest, kept in sync via a CI drift-test.
6
7
 
7
8
  import { readFileSync } from "node:fs";
8
9
  import { dirname, resolve } from "node:path";