@lynxship/cli 0.1.15 → 0.1.16

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
@@ -14,13 +14,13 @@ expiring download URL with a compact terminal QR code.
14
14
  ## Install
15
15
 
16
16
  ```bash
17
- npm install --global @lynxship/cli
17
+ npm install --global @lynxship/cli@latest
18
18
  ```
19
19
 
20
20
  Or run it without a global install:
21
21
 
22
22
  ```bash
23
- npx @lynxship/cli doctor --project-dir ./my-lynx-app
23
+ npx @lynxship/cli@latest doctor --project-dir ./my-lynx-app
24
24
  ```
25
25
 
26
26
  The package exposes the `lynxship` executable.
@@ -52,6 +52,34 @@ The CLI generator itself creates ReactLynx templates by default. Use the
52
52
  official `create-vue-lynx` scaffold when Vue is required, then add LynxShip to
53
53
  that existing project with `init`.
54
54
 
55
+ ## Octane and Miso
56
+
57
+ LynxShip detects Octane and Miso projects without replacing their
58
+ project-owned configuration.
59
+
60
+ Octane uses the official `@octanejs/rspeedy-plugin`. The Lynx integration is
61
+ still early access and its Lynx packages are not currently published on npm,
62
+ so development validation must use the official Octane repository and its
63
+ pnpm workspace:
64
+
65
+ ```bash
66
+ git clone https://github.com/octanejs/octane.git
67
+ cd octane
68
+ pnpm install --filter @octanejs/rspeedy-plugin... --frozen-lockfile
69
+ pnpm --filter @octanejs/rspeedy-plugin exec rspeedy dev \
70
+ --root examples/gallery --environment lynx
71
+ ```
72
+
73
+ Miso uses the official Haskell/Nix flake rather than an npm build script.
74
+ Install Nix and the project's Haskell toolchain, then let LynxShip use the
75
+ flake's `default`/`bundle` output or configure a project-specific output in
76
+ `lynxship.json`. Miso remains experimental; a successful bundle does not
77
+ prove a signed Android or iOS production build.
78
+
79
+ See the source-verified fixture notes in the repository's
80
+ `examples/lynx-octane-fixture` and `examples/miso-lynx-fixture` directories,
81
+ plus `docs/compatibility.md`.
82
+
55
83
  ## Requirements
56
84
 
57
85
  - Node.js 22 or 24 LTS, or Node.js 26 Current; Node.js 24 LTS is the
@@ -486,9 +514,10 @@ actual recording and analysis.
486
514
 
487
515
  ## Package layout
488
516
 
489
- The CLI is backed by the public `@lynxship/*` runtime packages in this
490
- workspace. They are published with the same version and must be available in
491
- the configured npm scope before installing the CLI package.
517
+ The CLI is backed by public `@lynxship/*` runtime packages in this workspace.
518
+ Their published versions may differ from the CLI version; workspace ranges are
519
+ rewritten to released versions when the package is packed. Publish a changed
520
+ runtime package before publishing the CLI when its source or version changed.
492
521
 
493
522
  ## License
494
523
 
@@ -1 +1 @@
1
- {"version":3,"file":"android-build.d.ts","sourceRoot":"","sources":["../src/android-build.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AA8KD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa7D;AAED,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsCpE;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CA+JnB"}
1
+ {"version":3,"file":"android-build.d.ts","sourceRoot":"","sources":["../src/android-build.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWhD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AA8KD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa7D;AAED,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAsCpE;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAgKnB"}
@@ -218,6 +218,7 @@ export async function runRealAndroidBuild(job, options) {
218
218
  await buildLynxBundle(options.root, {
219
219
  env: environment,
220
220
  ...processOptions,
221
+ miso: options.profile.miso,
221
222
  });
222
223
  }
223
224
  step("Rspeedy bundle ready", 20);
@@ -4,6 +4,11 @@ export interface BundleBuildOptions {
4
4
  onOutput?: (line: string) => void;
5
5
  script?: string;
6
6
  rspeedyArgs?: string[];
7
+ miso?: {
8
+ attribute?: string;
9
+ artifact?: string;
10
+ };
7
11
  }
12
+ export declare function resolveMisoBuildTarget(flake: string, configuredAttribute?: string): string | undefined;
8
13
  export declare function buildLynxBundle(root: string, options?: BundleBuildOptions): Promise<void>;
9
14
  //# sourceMappingURL=bundle-build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bundle-build.d.ts","sourceRoot":"","sources":["../src/bundle-build.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAcD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAqBf"}
1
+ {"version":3,"file":"bundle-build.d.ts","sourceRoot":"","sources":["../src/bundle-build.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,GAC3B,MAAM,GAAG,SAAS,CAWpB;AAcD,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA8Df"}
@@ -1,6 +1,23 @@
1
- import { readFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { packageManagerScriptCommand, runProcess, runRspeedy, } from "./process-runner.js";
1
+ import { copyFile, mkdir, readFile } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ import { basename, join, resolve } from "node:path";
4
+ import { assert } from "@lynxship/contracts";
5
+ import { commandExists, packageManagerScriptCommand, runProcess, runRspeedy, } from "./process-runner.js";
6
+ import { detectLynxFramework } from "./frameworks.js";
7
+ export function resolveMisoBuildTarget(flake, configuredAttribute) {
8
+ const explicitAttribute = configuredAttribute?.trim();
9
+ if (explicitAttribute)
10
+ return ".#" + explicitAttribute;
11
+ if (flake.includes("counter-bundle"))
12
+ return ".#counter-bundle";
13
+ if (/\binherit\s+bundle\b|\bdefault\s*=\s*bundle\b/.test(flake)) {
14
+ return ".#bundle";
15
+ }
16
+ if (/\bdefault\s*=/.test(flake) && flake.includes("mkLynxBundle")) {
17
+ return ".";
18
+ }
19
+ return undefined;
20
+ }
4
21
  async function resolveBundleScript(root) {
5
22
  try {
6
23
  const manifest = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
@@ -13,6 +30,28 @@ async function resolveBundleScript(root) {
13
30
  return "build";
14
31
  }
15
32
  export async function buildLynxBundle(root, options = {}) {
33
+ const framework = await detectLynxFramework(root);
34
+ if (framework.buildSystem === "miso-nix" &&
35
+ !options.script &&
36
+ !options.rspeedyArgs) {
37
+ assert(commandExists("nix"), "BUILD_MISO_NIX_REQUIRED", "Miso requires Nix. Install Nix, then rerun lynxship doctor or provide a project build script.");
38
+ const flake = await readFile(join(root, "flake.nix"), "utf8").catch(() => "");
39
+ const target = resolveMisoBuildTarget(flake, options.miso?.attribute);
40
+ assert(target, "BUILD_MISO_ATTRIBUTE_REQUIRED", "Miso bundle output is not discoverable. Set build.<profile>.miso.attribute in lynxship.json, or expose a default/mkLynxBundle output in flake.nix.");
41
+ await runProcess("nix", ["build", target], {
42
+ cwd: root,
43
+ env: options.env,
44
+ quiet: options.quiet,
45
+ onOutput: options.onOutput,
46
+ });
47
+ const artifact = resolve(root, options.miso?.artifact ?? "result/main.lynx.bundle");
48
+ assert(existsSync(artifact), "BUILD_MISO_BUNDLE_MISSING", "Miso did not produce the configured Lynx bundle: " + artifact);
49
+ const output = join(root, "dist", basename(artifact));
50
+ await mkdir(join(root, "dist"), { recursive: true });
51
+ await copyFile(artifact, output);
52
+ options.onOutput?.("Miso bundle ready: " + output);
53
+ return;
54
+ }
16
55
  if (!options.script && options.rspeedyArgs) {
17
56
  await runRspeedy(root, "build", options.rspeedyArgs, {
18
57
  env: options.env,
package/dist/config.d.ts CHANGED
@@ -3,6 +3,10 @@ export interface BuildProfile {
3
3
  distribution?: string;
4
4
  channel?: string;
5
5
  environment?: string;
6
+ miso?: {
7
+ attribute?: string;
8
+ artifact?: string;
9
+ };
6
10
  android?: {
7
11
  artifact?: string;
8
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,GAAG,CAAC,EAAE;QACJ,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,aAAa,GAAG,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE;QACP,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE;YAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,cAsB5B,CAAC;AAaF,wBAAgB,cAAc,CAC5B,MAAM,EAAE,OAAO,EACf,OAAO,GAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B,cAAc,CAyChB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7B,OAAO,CAAC,cAAc,CAAC,CAazB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,IAAI,SAAe,GAClB,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAejC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAOrD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"desktop-build.d.ts","sourceRoot":"","sources":["../src/desktop-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,GAAG,SAAS,CAMpB;AAYD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AA+DD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CA0GnB"}
1
+ {"version":3,"file":"desktop-build.d.ts","sourceRoot":"","sources":["../src/desktop-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED,UAAU,WAAW;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,MAAM,GAAG,SAAS,CAMpB;AAYD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AA+DD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CA2GnB"}
@@ -99,6 +99,7 @@ export async function runRealDesktopBuild(job, options) {
99
99
  await buildLynxBundle(options.root, {
100
100
  quiet: options.quiet,
101
101
  onOutput: options.onEvent,
102
+ miso: options.profile.miso,
102
103
  });
103
104
  }
104
105
  transitionBuild(job, "queued", "Desktop build queued locally");
@@ -0,0 +1,10 @@
1
+ export type LynxFramework = "react" | "vue" | "octane" | "miso" | "vanilla" | "unknown";
2
+ export interface FrameworkDetection {
3
+ framework: LynxFramework;
4
+ label: string;
5
+ evidence: string;
6
+ buildSystem: "rspeedy" | "miso-nix" | "unknown";
7
+ experimental: boolean;
8
+ }
9
+ export declare function detectLynxFramework(root: string): Promise<FrameworkDetection>;
10
+ //# sourceMappingURL=frameworks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frameworks.d.ts","sourceRoot":"","sources":["../src/frameworks.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,MAAM,GACN,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAChD,YAAY,EAAE,OAAO,CAAC;CACvB;AAiCD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,kBAAkB,CAAC,CA+F7B"}
@@ -0,0 +1,104 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ async function readText(file) {
5
+ return readFile(file, "utf8").catch(() => "");
6
+ }
7
+ async function readManifest(root) {
8
+ try {
9
+ return JSON.parse(await readText(join(root, "package.json")));
10
+ }
11
+ catch {
12
+ return {};
13
+ }
14
+ }
15
+ function dependencyNames(manifest) {
16
+ return new Set([
17
+ ...Object.keys(manifest.dependencies ?? {}),
18
+ ...Object.keys(manifest.devDependencies ?? {}),
19
+ ]);
20
+ }
21
+ function hasAny(names, candidates) {
22
+ return candidates.find((name) => names.has(name));
23
+ }
24
+ export async function detectLynxFramework(root) {
25
+ const manifest = await readManifest(root);
26
+ const names = dependencyNames(manifest);
27
+ const scripts = Object.values(manifest.scripts ?? {}).join(" ");
28
+ const configFiles = [
29
+ "lynx.config.ts",
30
+ "lynx.config.js",
31
+ "lynx.config.mjs",
32
+ "lynx.config.cjs",
33
+ "octane.config.ts",
34
+ "octane.config.js",
35
+ ];
36
+ const config = (await Promise.all(configFiles
37
+ .filter((file) => existsSync(join(root, file)))
38
+ .map((file) => readText(join(root, file))))).join("\n");
39
+ const flake = await readText(join(root, "flake.nix"));
40
+ const cabal = await readText(join(root, "cabal.project"));
41
+ const hasCabalFile = existsSync(join(root, "cabal.project"));
42
+ const hasMiso = hasAny(names, ["miso", "miso-lynx"]) ||
43
+ (existsSync(join(root, "flake.nix")) &&
44
+ /miso|mkLynxBundle|Miso\\.Native|lynx/i.test(flake + "\n" + cabal)) ||
45
+ (hasCabalFile && /miso|lynx/i.test(cabal));
46
+ if (hasMiso) {
47
+ return {
48
+ framework: "miso",
49
+ label: "Miso (Haskell)",
50
+ evidence: "Miso.Native/Haskell project detected",
51
+ buildSystem: "miso-nix",
52
+ experimental: true,
53
+ };
54
+ }
55
+ const hasOctane = hasAny(names, ["octane", "@octanejs/lynx", "@octanejs/rspeedy-plugin"]) ||
56
+ existsSync(join(root, "octane.config.ts")) ||
57
+ existsSync(join(root, "octane.config.js")) ||
58
+ /pluginOctane|@jsxImportSource\\s+octane|\\.tsrx\\b/.test(config + scripts);
59
+ if (hasOctane) {
60
+ return {
61
+ framework: "octane",
62
+ label: "Octane",
63
+ evidence: "Octane compiler/Rspeedy integration detected",
64
+ buildSystem: "rspeedy",
65
+ experimental: true,
66
+ };
67
+ }
68
+ const vueDependency = hasAny(names, ["vue-lynx", "@lynx-js/vue"]);
69
+ if (vueDependency || /pluginVueLynx|vue-lynx/i.test(config)) {
70
+ return {
71
+ framework: "vue",
72
+ label: "Vue Lynx",
73
+ evidence: "Vue Lynx integration detected",
74
+ buildSystem: "rspeedy",
75
+ experimental: false,
76
+ };
77
+ }
78
+ if (hasAny(names, ["@lynx-js/react", "@lynx-js/react-rsbuild-plugin"])) {
79
+ return {
80
+ framework: "react",
81
+ label: "ReactLynx",
82
+ evidence: "official ReactLynx package detected",
83
+ buildSystem: "rspeedy",
84
+ experimental: false,
85
+ };
86
+ }
87
+ if (names.has("@lynx-js/rspeedy") ||
88
+ /rspeedy|environments\\s*:/i.test(config + scripts)) {
89
+ return {
90
+ framework: "vanilla",
91
+ label: "Vanilla Lynx",
92
+ evidence: "Rspeedy/Lynx project detected",
93
+ buildSystem: "rspeedy",
94
+ experimental: false,
95
+ };
96
+ }
97
+ return {
98
+ framework: "unknown",
99
+ label: "Unknown",
100
+ evidence: "No supported Lynx framework marker found",
101
+ buildSystem: "unknown",
102
+ experimental: false,
103
+ };
104
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAChC;AA6mBD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,eAAoB,GAC5B,WAAW,CAEb"}
1
+ {"version":3,"file":"guidance.d.ts","sourceRoot":"","sources":["../src/guidance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAChC;AAmoBD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,eAAoB,GAC5B,WAAW,CAEb"}
package/dist/guidance.js CHANGED
@@ -105,6 +105,28 @@ const guidance = {
105
105
  ],
106
106
  note: "Configure environments.web in lynx.config.* or provide the project's build:web script.",
107
107
  },
108
+ BUILD_MISO_NIX_REQUIRED: {
109
+ commands: [
110
+ "lynxship doctor --platform android",
111
+ "nix --version",
112
+ "lynxship build --platform android --profile production",
113
+ ],
114
+ note: "Install Nix and use the project's flake to build the Miso Lynx bundle.",
115
+ },
116
+ BUILD_MISO_ATTRIBUTE_REQUIRED: {
117
+ commands: [
118
+ "lynxship init",
119
+ "lynxship build --platform android --profile production",
120
+ ],
121
+ note: "Expose a default/mkLynxBundle output or set build.production.miso.attribute to the Nix flake output that creates main.lynx.bundle.",
122
+ },
123
+ BUILD_MISO_BUNDLE_MISSING: {
124
+ commands: [
125
+ "nix build",
126
+ "lynxship build --platform android --profile production",
127
+ ],
128
+ note: "Check build.production.miso.artifact and the output produced by the Miso flake.",
129
+ },
108
130
  WEB_BUNDLE_MISSING: {
109
131
  commands: [
110
132
  "lynxship doctor --platform web",
@@ -1 +1 @@
1
- {"version":3,"file":"harmony-build.d.ts","sourceRoot":"","sources":["../src/harmony-build.ts"],"names":[],"mappings":"AAIA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAeD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAcA;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AA2GD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAoGnB"}
1
+ {"version":3,"file":"harmony-build.d.ts","sourceRoot":"","sources":["../src/harmony-build.ts"],"names":[],"mappings":"AAIA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAeD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAcA;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BnB;AA2GD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAqGnB"}
@@ -141,6 +141,7 @@ export async function runRealHarmonyBuild(job, options) {
141
141
  await buildLynxBundle(options.root, {
142
142
  quiet: options.quiet,
143
143
  onOutput: options.onEvent,
144
+ miso: options.profile.miso,
144
145
  });
145
146
  }
146
147
  step("Syncing bundle into the HarmonyOS HAP resources…", 20);
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
3
3
  import { existsSync } from "node:fs";
4
4
  import { createHash, randomBytes, randomUUID } from "node:crypto";
5
5
  import { basename, dirname, join, resolve } from "node:path";
6
+ import { detectLynxFramework } from "./frameworks.js";
6
7
  import { BuildOrchestrator } from "@lynxship/build-orchestrator";
7
8
  import { JsonRepository } from "@lynxship/db";
8
9
  import { assert, createId, sha256, } from "@lynxship/contracts";
@@ -364,13 +365,14 @@ async function executeBuild(options, showResult = true) {
364
365
  }
365
366
  return result;
366
367
  }
367
- async function buildSharedLynxBundle() {
368
+ async function buildSharedLynxBundle(miso) {
368
369
  const progress = ui.progress("Shared Lynx bundle");
369
370
  try {
370
371
  progress.update(undefined, "Building the shared Lynx bundle once for native targets…");
371
372
  await buildLynxBundle(root, {
372
373
  quiet: json,
373
374
  onOutput: (message) => progress.event(message),
375
+ miso,
374
376
  });
375
377
  progress.update(100, "Shared native Lynx bundle ready");
376
378
  }
@@ -515,6 +517,9 @@ Global options:
515
517
  Node support: Node 22/24 LTS or Node 26 Current. Use Node 24 LTS for production.`;
516
518
  }
517
519
  async function looksLikeLynxProject() {
520
+ const framework = await detectLynxFramework(root);
521
+ if (framework.framework !== "unknown")
522
+ return true;
518
523
  const configFiles = [
519
524
  "lynx.config.ts",
520
525
  "lynx.config.js",
@@ -940,7 +945,37 @@ async function main() {
940
945
  const nodeMajor = Number(process.versions.node.split(".")[0]);
941
946
  const nodeSupported = nodeMajor >= 22;
942
947
  const nodeRecommended = nodeMajor % 2 === 0;
948
+ const framework = await detectLynxFramework(root);
943
949
  const checks = [
950
+ {
951
+ name: "lynx-framework",
952
+ ok: framework.framework !== "unknown",
953
+ status: framework.framework === "unknown"
954
+ ? "warn"
955
+ : framework.experimental
956
+ ? "warn"
957
+ : "pass",
958
+ value: framework.framework === "unknown"
959
+ ? "unknown · verify the official Lynx/Rspeedy integration"
960
+ : framework.label +
961
+ " · " +
962
+ framework.evidence +
963
+ (framework.experimental ? " · early access" : ""),
964
+ },
965
+ ...(framework.framework === "miso"
966
+ ? [
967
+ {
968
+ name: "miso-nix",
969
+ ok: commandExists("nix"),
970
+ status: commandExists("nix")
971
+ ? "pass"
972
+ : "fail",
973
+ value: commandExists("nix")
974
+ ? "Nix detected"
975
+ : "missing · fix: install Nix and rerun doctor",
976
+ },
977
+ ]
978
+ : []),
944
979
  {
945
980
  name: "node",
946
981
  ok: nodeSupported,
@@ -1719,7 +1754,7 @@ async function main() {
1719
1754
  return;
1720
1755
  }
1721
1756
  if (buildAll && wait && !local)
1722
- await buildSharedLynxBundle();
1757
+ await buildSharedLynxBundle(resolveProfile(config, profile).miso);
1723
1758
  const progress = ui.progress("All Lynx targets build");
1724
1759
  const progressValues = {};
1725
1760
  const progressLabels = {};
@@ -1 +1 @@
1
- {"version":3,"file":"ios-build.d.ts","sourceRoot":"","sources":["../src/ios-build.ts"],"names":[],"mappings":"AAYA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAyHD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAoED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuD7B;AAgCD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GACL,OAAO,CAAC,IAAI,CAAC,CAcf;AAkND,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAcxE;AA+DD,wBAAsB,eAAe,CACnC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,QAAQ,CAAC,CAqNnB"}
1
+ {"version":3,"file":"ios-build.d.ts","sourceRoot":"","sources":["../src/ios-build.ts"],"names":[],"mappings":"AAYA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAMhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAyHD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAoED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuD7B;AAgCD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GACL,OAAO,CAAC,IAAI,CAAC,CAcf;AAmND,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAcxE;AA+DD,wBAAsB,eAAe,CACnC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,QAAQ,CAAC,CAsNnB"}
package/dist/ios-build.js CHANGED
@@ -264,6 +264,7 @@ async function runRealIosSimulatorBuild(job, options) {
264
264
  await buildLynxBundle(options.root, {
265
265
  quiet: options.quiet,
266
266
  onOutput: options.onEvent,
267
+ miso: options.profile.miso,
267
268
  });
268
269
  }
269
270
  if (ios.bundleScript) {
@@ -454,6 +455,7 @@ export async function runRealIosBuild(job, options) {
454
455
  await buildLynxBundle(options.root, {
455
456
  quiet: options.quiet,
456
457
  onOutput: options.onEvent,
458
+ miso: options.profile.miso,
457
459
  });
458
460
  }
459
461
  if (ios.bundleScript) {
@@ -1 +1 @@
1
- {"version":3,"file":"web-build.d.ts","sourceRoot":"","sources":["../src/web-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAgBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAczD;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,QAAQ,CAAC,CAsDnB"}
1
+ {"version":3,"file":"web-build.d.ts","sourceRoot":"","sources":["../src/web-build.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAgBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOrE;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAczD;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,QAAQ,CAAC,CAuDnB"}
package/dist/web-build.js CHANGED
@@ -76,6 +76,7 @@ export async function runRealWebBuild(job, options) {
76
76
  quiet: options.quiet,
77
77
  onOutput: options.onEvent,
78
78
  script,
79
+ miso: options.profile.miso,
79
80
  rspeedyArgs: script
80
81
  ? undefined
81
82
  : ["--environment", options.profile.web?.environment ?? "web"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynxship/cli",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Build, sign, store, submit and update LynxJS applications from the terminal.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -54,6 +54,10 @@
54
54
  "types": "./dist/autolink.d.ts",
55
55
  "import": "./dist/autolink.js"
56
56
  },
57
+ "./frameworks": {
58
+ "types": "./dist/frameworks.d.ts",
59
+ "import": "./dist/frameworks.js"
60
+ },
57
61
  "./ui/*": {
58
62
  "types": "./dist/ui/*.d.ts",
59
63
  "import": "./dist/ui/*.js"
@@ -72,11 +76,11 @@
72
76
  "@resvg/resvg-js": "2.6.2",
73
77
  "jsdom": "29.1.1",
74
78
  "pngjs": "7.0.0",
75
- "@lynxship/build-orchestrator": "0.1.0",
76
- "@lynxship/db": "0.1.0",
77
79
  "@lynxship/contracts": "0.1.0",
80
+ "@lynxship/build-orchestrator": "0.1.0",
81
+ "@lynxship/submit": "0.1.0",
78
82
  "@lynxship/signing": "0.1.0",
79
- "@lynxship/submit": "0.1.0"
83
+ "@lynxship/db": "0.1.0"
80
84
  },
81
85
  "devDependencies": {
82
86
  "@types/cli-progress": "3.11.6",