@akanjs/cli 3.0.0-alpha.66 → 3.0.0-alpha.68

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.
Files changed (51) hide show
  1. package/.build-stamp +1 -1
  2. package/{agent.command-7vr15vkn.js → agent.command-0cmqr1jg.js} +5 -5
  3. package/{application.command-nrq6qvkh.js → application.command-rb1dtwdd.js} +4 -4
  4. package/{applicationBuildRunner-jnjag4ay.js → applicationBuildRunner-af0wtspv.js} +5 -2
  5. package/buildBatch.proc.js +2 -2
  6. package/{capacitorApp-w1ryppdw.js → capacitorApp-eep7xz8f.js} +2 -2
  7. package/{cloud.command-crwf7emx.js → cloud.command-8v0kdhsk.js} +7 -7
  8. package/{context.command-xbsgta4f.js → context.command-rbfvzdr5.js} +12 -12
  9. package/{guideline.command-mm19n009.js → guideline.command-92fb2x3p.js} +2 -2
  10. package/guidelines/conventions/conventions.instruction.md +34 -0
  11. package/incrementalBuilder.proc.js +1 -1
  12. package/{index-7kxz2z5t.js → index-0c7xjgq8.js} +1 -1
  13. package/{index-hpbf1b1e.js → index-1ngstd4e.js} +3 -3
  14. package/{index-jbhecvr9.js → index-1rdjjbh3.js} +1 -1
  15. package/{index-639mgtfm.js → index-4z07epxz.js} +2 -2
  16. package/{index-1f34snpd.js → index-54kzhhbz.js} +1 -1
  17. package/{index-xda7qe2j.js → index-64yeb8sh.js} +2 -2
  18. package/{index-w008bx1p.js → index-8ve7n6yj.js} +20 -4
  19. package/{index-9ppq2sx0.js → index-9rhhv7kt.js} +4 -4
  20. package/{index-xesyg6bc.js → index-abyjt72y.js} +191 -27
  21. package/{index-6s8snbb8.js → index-c60r0ch7.js} +2 -2
  22. package/{index-cnyeq88g.js → index-dnaz1wgm.js} +3 -3
  23. package/{index-gkg6e6cx.js → index-gzvqqkv0.js} +10 -10
  24. package/{index-a6k0b1b5.js → index-h0mh2q0g.js} +5 -5
  25. package/{index-k8k45qfk.js → index-mj0gjph9.js} +2 -2
  26. package/{index-8xeg8ehr.js → index-n6sd13k2.js} +3 -3
  27. package/{index-8vv6xtm5.js → index-vgntcq1j.js} +1 -1
  28. package/{index-bzthvy50.js → index-wda1nmq9.js} +5 -5
  29. package/{index-d5ef8n21.js → index-xgd380f4.js} +4 -4
  30. package/{index-0jn016vv.js → index-zsey7djg.js} +3 -3
  31. package/index.js +18 -18
  32. package/{library.command-afjd6ex4.js → library.command-6q9vgf8d.js} +3 -3
  33. package/{localRegistry.command-6zadvx6z.js → localRegistry.command-qt958fj0.js} +6 -6
  34. package/{module.command-rh01pbz3.js → module.command-t6ex0rqw.js} +5 -5
  35. package/{package.command-g4s1y1wn.js → package.command-mkkpq9yy.js} +3 -3
  36. package/package.json +2 -2
  37. package/{page.command-9bw6sz1r.js → page.command-tkqmvxx6.js} +3 -3
  38. package/{primitive.command-pg1j3gm3.js → primitive.command-pb07v3w4.js} +6 -6
  39. package/{quality.command-rt1z7je9.js → quality.command-10bbw5qf.js} +2 -2
  40. package/{repair.command-pg54yhgc.js → repair.command-rx25p4yr.js} +5 -5
  41. package/{scalar.command-t0akqh1r.js → scalar.command-hf0pg397.js} +4 -4
  42. package/templates/app/env/env.client.debug.ts.template +1 -5
  43. package/templates/app/env/env.client.develop.ts.template +1 -5
  44. package/templates/app/env/env.client.local.ts.template +1 -5
  45. package/templates/app/env/env.client.main.ts.template +1 -5
  46. package/templates/app/env/env.client.testing.ts.template +1 -5
  47. package/templates/app/env/env.client.type.ts +2 -6
  48. package/{workflow.command-se886yew.js → workflow.command-b2twqrg9.js} +9 -9
  49. package/{workspace.command-q17atzha.js → workspace.command-8ggh81wd.js} +18 -18
  50. package/README.ko.md +0 -72
  51. package/README.md +0 -85
package/.build-stamp CHANGED
@@ -1 +1 @@
1
- 9aa6bbc9a3c9ef9ff25aa95015f54834f3a9f39d7f76d5b9cc7704a55a0f57b8
1
+ 45913df1b25861ac83c5cec54131c1edd97946b5e28ceb2297776a553e68d432
@@ -1,15 +1,15 @@
1
1
  // @bun
2
2
  import {
3
3
  AgentScript
4
- } from "./index-0jn016vv.js";
5
- import"./index-xda7qe2j.js";
6
- import"./index-8vv6xtm5.js";
4
+ } from "./index-zsey7djg.js";
5
+ import"./index-64yeb8sh.js";
6
+ import"./index-vgntcq1j.js";
7
7
  import"./index-j37qq1f2.js";
8
8
  import {
9
9
  Workspace,
10
10
  command
11
- } from "./index-1f34snpd.js";
12
- import"./index-w008bx1p.js";
11
+ } from "./index-54kzhhbz.js";
12
+ import"./index-8ve7n6yj.js";
13
13
  import"./index-f39512t6.js";
14
14
  import"./index-mxvakhsm.js";
15
15
  import"./index-xys926f2.js";
@@ -4,8 +4,8 @@ import {
4
4
  } from "./index-0wae5ebk.js";
5
5
  import {
6
6
  ApplicationScript
7
- } from "./index-a6k0b1b5.js";
8
- import"./index-k8k45qfk.js";
7
+ } from "./index-h0mh2q0g.js";
8
+ import"./index-mj0gjph9.js";
9
9
  import {
10
10
  getMobileTargetChoices
11
11
  } from "./index-76rn3g2c.js";
@@ -15,10 +15,10 @@ import {
15
15
  Sys,
16
16
  Workspace,
17
17
  command
18
- } from "./index-1f34snpd.js";
18
+ } from "./index-54kzhhbz.js";
19
19
  import"./index-fgc8r6dj.js";
20
20
  import"./index-5vy2jzar.js";
21
- import"./index-w008bx1p.js";
21
+ import"./index-8ve7n6yj.js";
22
22
  import"./index-f39512t6.js";
23
23
  import"./index-mxvakhsm.js";
24
24
  import"./index-1577bej2.js";
@@ -2,9 +2,10 @@
2
2
  import {
3
3
  AllRoutesBuilder,
4
4
  CsrArtifactBuilder,
5
+ FontPruner,
5
6
  SsrBaseArtifactBuilder,
6
7
  precompressArtifacts
7
- } from "./index-xesyg6bc.js";
8
+ } from "./index-abyjt72y.js";
8
9
  import"./index-xjd3rqzj.js";
9
10
  import"./index-qnv0aqmm.js";
10
11
  import"./index-5vy2jzar.js";
@@ -23,6 +24,7 @@ var BUILD_PHASE_EMOJIS = {
23
24
  backend: "\uD83D\uDCE6",
24
25
  ssr: "\uD83E\uDDED",
25
26
  csr: "\uD83C\uDFA8",
27
+ assets: "\u2702\uFE0F",
26
28
  compress: "\uD83D\uDDDC\uFE0F",
27
29
  metadata: "\uD83D\uDCDD"
28
30
  };
@@ -58,7 +60,7 @@ class ApplicationBuildRunner {
58
60
  }
59
61
  async build({ spinner = false } = {}) {
60
62
  const phaseOptions = { spinner };
61
- const { web } = await this.#app.getConfig();
63
+ const { web, assets } = await this.#app.getConfig();
62
64
  await this.#runPhase("prepare", "Preparing output directory", () => this.#app.prepareCommand("build"), undefined, {
63
65
  spinner
64
66
  });
@@ -67,6 +69,7 @@ class ApplicationBuildRunner {
67
69
  await this.#runPhase("backend", "Compiling backend", () => this.#buildBackend(), (result) => `${result.entrypoints} entrypoints, ${result.outputs} outputs`, phaseOptions);
68
70
  await this.#runPhase("ssr", "Building SSR route artifacts", async () => web.ssr ? await this.#buildSsr() : null, (result) => result ? `${result.allRoutes.manifest.routeIds.length} routes, ${result.allRoutes.manifest.knownEntries.length} entries` : web.ssr ? "skipped" : "disabled by akan.config.ts web.ssr", phaseOptions);
69
71
  await this.#runPhase("csr", "Building CSR assets", async () => web.csr ? await this.#buildCsr() : null, (result) => result?.outputDir ?? (web.csr ? "skipped" : "disabled by akan.config.ts web.csr"), phaseOptions);
72
+ await this.#runPhase("assets", "Trimming unread static assets", async () => assets.pruneFonts ? await new FontPruner(this.#app, assets).prune() : null, (result) => result ? `${result.removed.length} font file(s) dropped, ${ApplicationBuildRunner.formatBytes(result.freedBytes)} freed; ${result.kept.length} kept` : "disabled by akan.config.ts assets.pruneFonts", phaseOptions);
70
73
  await this.#runPhase("compress", "Compressing static assets", () => precompressArtifacts(this.#app), (result) => result.files > 0 ? `${result.files} files, ${ApplicationBuildRunner.formatBytes(result.inputBytes)} -> gzip ${ApplicationBuildRunner.formatBytes(result.outputBytes)} / br ${ApplicationBuildRunner.formatBytes(result.brotliBytes)}` : "no files", phaseOptions);
71
74
  await this.#runPhase("metadata", "Writing production metadata", () => this.#buildAppMeta(), undefined, {
72
75
  spinner
@@ -5,14 +5,14 @@ import {
5
5
  FontOptimizer,
6
6
  PagesBundleBuilder,
7
7
  SsrBaseArtifactBuilder
8
- } from "./index-xesyg6bc.js";
8
+ } from "./index-abyjt72y.js";
9
9
  import"./index-xjd3rqzj.js";
10
10
  import"./index-qnv0aqmm.js";
11
11
  import"./index-5vy2jzar.js";
12
12
  import {
13
13
  AppExecutor,
14
14
  WorkspaceExecutor
15
- } from "./index-w008bx1p.js";
15
+ } from "./index-8ve7n6yj.js";
16
16
  import"./index-f39512t6.js";
17
17
  import"./index-mxvakhsm.js";
18
18
  import"./index-1577bej2.js";
@@ -25,9 +25,9 @@ import {
25
25
  selectLocalDevHost,
26
26
  sortIosRunTargets,
27
27
  writeRootCapacitorConfig
28
- } from "./index-jbhecvr9.js";
28
+ } from "./index-1rdjjbh3.js";
29
29
  import"./index-76rn3g2c.js";
30
- import"./index-w008bx1p.js";
30
+ import"./index-8ve7n6yj.js";
31
31
  import"./index-f39512t6.js";
32
32
  import"./index-mxvakhsm.js";
33
33
  import"./index-1577bej2.js";
@@ -1,22 +1,22 @@
1
1
  // @bun
2
2
  import {
3
3
  CloudScript
4
- } from "./index-bzthvy50.js";
5
- import"./index-cnyeq88g.js";
6
- import"./index-6s8snbb8.js";
4
+ } from "./index-wda1nmq9.js";
5
+ import"./index-dnaz1wgm.js";
6
+ import"./index-c60r0ch7.js";
7
7
  import {
8
8
  GlobalConfig
9
9
  } from "./index-sh01r3pm.js";
10
- import"./index-a6k0b1b5.js";
11
- import"./index-k8k45qfk.js";
10
+ import"./index-h0mh2q0g.js";
11
+ import"./index-mj0gjph9.js";
12
12
  import"./index-76rn3g2c.js";
13
13
  import {
14
14
  Workspace,
15
15
  command
16
- } from "./index-1f34snpd.js";
16
+ } from "./index-54kzhhbz.js";
17
17
  import"./index-fgc8r6dj.js";
18
18
  import"./index-5vy2jzar.js";
19
- import"./index-w008bx1p.js";
19
+ import"./index-8ve7n6yj.js";
20
20
  import"./index-f39512t6.js";
21
21
  import"./index-mxvakhsm.js";
22
22
  import"./index-1577bej2.js";
@@ -1,25 +1,25 @@
1
1
  // @bun
2
2
  import {
3
3
  ContextScript
4
- } from "./index-gkg6e6cx.js";
5
- import"./index-hpbf1b1e.js";
6
- import"./index-8xeg8ehr.js";
7
- import"./index-639mgtfm.js";
8
- import"./index-9ppq2sx0.js";
9
- import"./index-d5ef8n21.js";
4
+ } from "./index-gzvqqkv0.js";
5
+ import"./index-1ngstd4e.js";
6
+ import"./index-n6sd13k2.js";
7
+ import"./index-4z07epxz.js";
8
+ import"./index-9rhhv7kt.js";
9
+ import"./index-xgd380f4.js";
10
10
  import"./index-ss469dec.js";
11
- import"./index-7kxz2z5t.js";
12
- import"./index-jbhecvr9.js";
11
+ import"./index-0c7xjgq8.js";
12
+ import"./index-1rdjjbh3.js";
13
13
  import"./index-sh01r3pm.js";
14
- import"./index-xda7qe2j.js";
15
- import"./index-8vv6xtm5.js";
14
+ import"./index-64yeb8sh.js";
15
+ import"./index-vgntcq1j.js";
16
16
  import"./index-j37qq1f2.js";
17
17
  import"./index-76rn3g2c.js";
18
18
  import {
19
19
  Workspace,
20
20
  command
21
- } from "./index-1f34snpd.js";
22
- import"./index-w008bx1p.js";
21
+ } from "./index-54kzhhbz.js";
22
+ import"./index-8ve7n6yj.js";
23
23
  import"./index-f39512t6.js";
24
24
  import"./index-mxvakhsm.js";
25
25
  import"./index-xys926f2.js";
@@ -10,8 +10,8 @@ import {
10
10
  command,
11
11
  runner,
12
12
  script
13
- } from "./index-1f34snpd.js";
14
- import"./index-w008bx1p.js";
13
+ } from "./index-54kzhhbz.js";
14
+ import"./index-8ve7n6yj.js";
15
15
  import"./index-f39512t6.js";
16
16
  import"./index-mxvakhsm.js";
17
17
  import {
@@ -366,6 +366,40 @@ const config: AppConfig = { docker: "FROM oven/bun:1-slim\n…" }; // verbatim,
366
366
  - `AkanAppConfig.docker` is the resolved declaration; `AkanAppConfig.dockerfile` is the text `akan build` writes
367
367
  to `dist/apps/<app>/Dockerfile`.
368
368
 
369
+ ## Shipped Assets — `assets` In `akan.config.ts`
370
+
371
+ `akan build` copies the whole `public/` tree into `dist`, lib assets dereferenced, and that copy is the image.
372
+ **`assets: { pruneFonts, keepFonts }`** trims the fonts out of it that nothing reads. **Source trees are never
373
+ touched** — an app's and a lib's own `public/` keep every file, because one shared font folder is picked over
374
+ differently by every app that mounts it and by other repos.
375
+
376
+ ```ts
377
+ const config: LibConfig = { assets: { keepFonts: ["fonts/Assistant-*.woff2"] } }; // libs/<lib>/akan.config.ts
378
+ const config: AppConfig = { assets: { pruneFonts: false } }; // emergency valve, not the normal escape hatch
379
+ ```
380
+
381
+ - **A font with `optimize` on is a build input, not a runtime asset.** `FontOptimizer` subsets it into
382
+ `.akan/artifact/fonts` and the emitted CSS points at `/_akan/fonts/*`, which `WebRouter` serves from the
383
+ artifact — so the source in `public/` is never opened again. That is the bulk of what this drops, and it
384
+ applies to the fonts the app *does* use, not only the ones it does not.
385
+ - **The keep-set is derived per app, per build; there is no list of fonts to drop.** An exclude list would rot
386
+ the moment another app or repo started using one of them, and nobody would know to update it. A font survives
387
+ because ① its font declares `optimize: false`, so `FontCss.getRuntimeCss` emits the raw src; ② something
388
+ references its filename — anything under `public/`, the compiled stylesheet, a client/server bundle, the CSR
389
+ shell; or ③ a `keepFonts` glob names it.
390
+ - **`keepFonts` belongs to the `akan.config.ts` that owns the font**, written against that lib's or app's own
391
+ `public/` (`"fonts/X.woff2"`, resolved to `libs/<lib>/fonts/X.woff2`). A lib shared across repos carries the
392
+ reason its own CSS needs a font, instead of every mounting app rediscovering it in production.
393
+ - **A reference from a build bundle is ignored for an already-subset font.** Every route file's `fonts`
394
+ declaration is inlined into the pages bundle, the client chunks and the CSR shell, so a declared source is in
395
+ all three whether or not anything loads it. `public/` and the compiled CSS are read as authoritative.
396
+ - **A generated manifest that lists every public asset keeps every font it names** — a service-worker precache
397
+ file is the usual one. That is a real reference, not a false positive, so the build reports it at `info`:
398
+ read the `[font-prune] kept …` line before concluding the prune does nothing.
399
+ - Matching is by filename, including the percent-encoded spelling, so a `url()` survives however it is written.
400
+ - The phase is `assets`, between `csr` and `compress`. An api-only build (`web: false`) copies no `public/` and
401
+ the phase finds nothing to do.
402
+
369
403
  ## React Components And Styling (`**/*.tsx`)
370
404
 
371
405
  - Components are `export const X = ({ … }: XProps) => { return (…); };` — arrow const with a block body. `export default` is reserved for pages, layouts, and `lazy()` targets.
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  AppExecutor,
18
18
  WorkspaceExecutor
19
- } from "./index-w008bx1p.js";
19
+ } from "./index-8ve7n6yj.js";
20
20
  import"./index-f39512t6.js";
21
21
  import"./index-mxvakhsm.js";
22
22
  import"./index-1577bej2.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  runner,
4
4
  script
5
- } from "./index-1f34snpd.js";
5
+ } from "./index-54kzhhbz.js";
6
6
 
7
7
  // pkgs/@akanjs/cli/page/page.runner.ts
8
8
  class PageRunner extends runner("page") {
@@ -1,17 +1,17 @@
1
1
  // @bun
2
2
  import {
3
3
  AkanContextAnalyzer
4
- } from "./index-xda7qe2j.js";
4
+ } from "./index-64yeb8sh.js";
5
5
  import {
6
6
  createRepairReport,
7
7
  generatedFilePathsForTarget,
8
8
  renderRepairReport,
9
9
  writeGeneratedSyncState,
10
10
  writeWorkflowRunArtifact
11
- } from "./index-8vv6xtm5.js";
11
+ } from "./index-vgntcq1j.js";
12
12
  import {
13
13
  runner
14
- } from "./index-1f34snpd.js";
14
+ } from "./index-54kzhhbz.js";
15
15
 
16
16
  // pkgs/@akanjs/cli/repair/repair.runner.ts
17
17
  var commandForShell = (command) => command.startsWith("akan ") ? `bun run ${command}` : command;
@@ -5,7 +5,7 @@ import {
5
5
  } from "./index-76rn3g2c.js";
6
6
  import {
7
7
  CommandExecutionError
8
- } from "./index-w008bx1p.js";
8
+ } from "./index-8ve7n6yj.js";
9
9
 
10
10
  // pkgs/@akanjs/devkit/capacitorApp.ts
11
11
  import { cp, mkdir, readFile, rm, writeFile } from "fs/promises";
@@ -9,14 +9,14 @@ import {
9
9
  createPassedPrimitiveReport,
10
10
  generatedFilesForSync,
11
11
  scalarChangedFiles
12
- } from "./index-8vv6xtm5.js";
12
+ } from "./index-vgntcq1j.js";
13
13
  import {
14
14
  Prompter
15
15
  } from "./index-j37qq1f2.js";
16
16
  import {
17
17
  runner,
18
18
  script
19
- } from "./index-1f34snpd.js";
19
+ } from "./index-54kzhhbz.js";
20
20
 
21
21
  // pkgs/@akanjs/cli/scalar/scalar.prompt.ts
22
22
  import { input } from "@inquirer/prompts";
@@ -6,7 +6,7 @@ import {
6
6
  ModuleExecutor,
7
7
  PkgExecutor,
8
8
  WorkspaceExecutor
9
- } from "./index-w008bx1p.js";
9
+ } from "./index-8ve7n6yj.js";
10
10
  import {
11
11
  getDirname
12
12
  } from "./index-1577bej2.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  workflowRunArtifactPath,
4
4
  workflowSyncDir
5
- } from "./index-8vv6xtm5.js";
5
+ } from "./index-vgntcq1j.js";
6
6
  import {
7
7
  AppExecutor,
8
8
  LibExecutor,
@@ -11,7 +11,7 @@ import {
11
11
  readDevkitVersion,
12
12
  rootAllowedDirs,
13
13
  rootAllowedFiles
14
- } from "./index-w008bx1p.js";
14
+ } from "./index-8ve7n6yj.js";
15
15
  import {
16
16
  collectRecipeSources,
17
17
  findInlineRecipeDuplicates,
@@ -268,7 +268,8 @@ var DEFAULT_AKAN_IMAGE_CONFIG = {
268
268
  dangerouslyAllowSVG: false,
269
269
  maximumRedirects: 3,
270
270
  fetchTimeoutMs: 7000,
271
- maxRemoteBytes: 25 * 1024 * 1024
271
+ maxRemoteBytes: 25 * 1024 * 1024,
272
+ maxConcurrency: 0
272
273
  };
273
274
  var normalizeIndexPath = (indexPath) => {
274
275
  const normalized = indexPath?.trim();
@@ -317,8 +318,12 @@ var normalizeDeepLinks = (deepLinks) => {
317
318
  };
318
319
  var emptyLibContributions = () => ({
319
320
  externalLibs: [],
320
- docker: { preRuns: [], postRuns: [] }
321
+ docker: { preRuns: [], postRuns: [] },
322
+ keepFonts: []
321
323
  });
324
+ var normalizeKeepFonts = (keepFonts) => [
325
+ ...new Set((keepFonts ?? []).map((glob) => glob.trim().replace(/^\/+/, "")).filter(Boolean))
326
+ ];
322
327
  var dedupeDockerRuns = (runs) => {
323
328
  const byKey = new Map;
324
329
  for (const run of runs)
@@ -342,6 +347,7 @@ class AkanAppConfig {
342
347
  mobile;
343
348
  hasMobileConfig;
344
349
  secrets;
350
+ assets;
345
351
  syncPageLibs;
346
352
  baseDevEnv;
347
353
  libs;
@@ -372,6 +378,13 @@ class AkanAppConfig {
372
378
  process.env.AKAN_PUBLIC_LOCALES = this.i18n.locales.join(",");
373
379
  this.publicEnv = config?.publicEnv ?? [];
374
380
  this.secrets = config?.secrets ?? [];
381
+ this.assets = {
382
+ pruneFonts: config?.assets?.pruneFonts ?? true,
383
+ keepFonts: [
384
+ ...normalizeKeepFonts(config?.assets?.keepFonts),
385
+ ...libContributions.keepFonts ?? []
386
+ ]
387
+ };
375
388
  this.syncPageLibs = config?.syncPageLibs ?? false;
376
389
  this.hasMobileConfig = Boolean(config.mobile);
377
390
  this.mobile = this.#resolveMobileConfig(config.mobile);
@@ -569,7 +582,8 @@ CMD [${command.map((c) => `"${c}"`).join(",")}]`;
569
582
  docker: {
570
583
  preRuns: libConfigs.flatMap((libConfig) => libConfig?.docker.preRuns ?? []),
571
584
  postRuns: libConfigs.flatMap((libConfig) => libConfig?.docker.postRuns ?? [])
572
- }
585
+ },
586
+ keepFonts: libConfigs.flatMap((libConfig) => (libConfig?.assets.keepFonts ?? []).map((glob) => `libs/${libConfig?.lib.name}/${glob}`))
573
587
  };
574
588
  }
575
589
  #resolveProductionDependencyVersion(lib) {
@@ -669,11 +683,13 @@ class AkanLibConfig {
669
683
  lib;
670
684
  externalLibs;
671
685
  docker;
686
+ assets;
672
687
  plugins;
673
688
  constructor(lib, config, plugins = []) {
674
689
  this.lib = lib;
675
690
  this.externalLibs = config?.externalLibs ?? [];
676
691
  this.docker = { preRuns: config?.docker?.preRuns ?? [], postRuns: config?.docker?.postRuns ?? [] };
692
+ this.assets = { keepFonts: normalizeKeepFonts(config?.assets?.keepFonts) };
677
693
  this.plugins = plugins;
678
694
  }
679
695
  static async from(lib, { bustImportCache = false } = {}) {
@@ -2691,7 +2707,7 @@ class AppExecutor extends SysExecutor {
2691
2707
  } else {
2692
2708
  await this.removeDir(".akan");
2693
2709
  if (!akanConfig2.web.ssr || !akanConfig2.web.csr)
2694
- this.logger.warn(`akan.config.ts disables web.${!akanConfig2.web.ssr ? "ssr" : "csr"}; \`akan start\` still serves it, \`akan build\` will not`);
2710
+ this.logger.verbose(`akan.config.ts disables web.${!akanConfig2.web.ssr ? "ssr" : "csr"}; \`akan start\` still serves it, \`akan build\` will not`);
2695
2711
  }
2696
2712
  if (type === "start")
2697
2713
  process.env.NODE_ENV = "development";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  ModuleScript
4
- } from "./index-d5ef8n21.js";
4
+ } from "./index-xgd380f4.js";
5
5
  import {
6
6
  addFieldUiPolicyForType,
7
7
  coerceFieldDefault,
@@ -34,15 +34,15 @@ import {
34
34
  sourceFile,
35
35
  validationCommandsForTarget,
36
36
  viaBuilderParameterName
37
- } from "./index-8vv6xtm5.js";
37
+ } from "./index-vgntcq1j.js";
38
38
  import {
39
39
  script
40
- } from "./index-1f34snpd.js";
40
+ } from "./index-54kzhhbz.js";
41
41
  import {
42
42
  AppExecutor,
43
43
  LibExecutor,
44
44
  ModuleExecutor
45
- } from "./index-w008bx1p.js";
45
+ } from "./index-8ve7n6yj.js";
46
46
 
47
47
  // pkgs/@akanjs/cli/primitive/primitive.script.ts
48
48
  import { capitalize } from "akanjs/common";