@legendapp/create-spark 0.0.1-next.6 → 0.0.1-next.8

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
@@ -9,9 +9,27 @@ cd MyApp
9
9
  npm run macos
10
10
  ```
11
11
 
12
+ Choose a channel explicitly with any supported package manager:
13
+
14
+ | Manager | Next preview | Latest |
15
+ | --- | --- | --- |
16
+ | npm | `npm create @legendapp/spark@next MyApp -- --next` | `npm create @legendapp/spark@latest MyApp -- --latest` |
17
+ | Bun | `bun create @legendapp/spark@next MyApp --next` | `bun create @legendapp/spark@latest MyApp --latest` |
18
+ | pnpm | `pnpm create @legendapp/spark MyApp --next` | `pnpm create @legendapp/spark MyApp --latest` |
19
+ | Yarn (including Yarn 1) | `yarn create @legendapp/spark MyApp --next` | `yarn create @legendapp/spark MyApp --latest` |
20
+
21
+ pnpm can drop the creator tag, and Yarn 1 cannot take a tag in `yarn create`.
22
+ The self-contained creator resolves explicit channel flags through npm dist-tags.
23
+ It pins the SDK to its bundled release metadata. If the selected version differs,
24
+ it prints an exact `npx @legendapp/create-spark@<version>` command to run; version
25
+ selection downloads no SDK. `--spark-version <version|tag>` selects another release;
26
+ use only one selection flag. With no flag, the creator uses its own release.
27
+ These commands require the matching creator and release assets to be published.
28
+
12
29
  The app opens in Spark Runner, downloaded from the matching GitHub release.
13
30
  Bun is optional. Select another installed package manager with
14
- `-- --package-manager bun|pnpm|yarn`. Native builds require Xcode and CocoaPods.
31
+ `-- --package-manager bun|pnpm|yarn` with npm, or
32
+ `--package-manager npm|bun|pnpm|yarn` with other managers. Native builds require Xcode and CocoaPods.
15
33
 
16
34
  Spark is experimental. Windows is a preview without a downloadable Runner.
17
35
  See the [documentation](https://legend.so/spark) and
package/dist/index.js CHANGED
@@ -89,11 +89,13 @@ var require_validation = __commonJS((exports, module) => {
89
89
  }
90
90
  function validateOwned(value) {
91
91
  if (value.macos !== undefined) {
92
- object(value.macos, "macos", ["bundleIdentifier", "buildNumber", "entitlements", "infoPlist", "lifecycle"]);
92
+ object(value.macos, "macos", ["bundleIdentifier", "buildNumber", "entitlements", "infoPlist", "testDriverInRelease", "lifecycle"]);
93
93
  if (typeof value.macos.bundleIdentifier !== "string" || !/^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+$/.test(value.macos.bundleIdentifier))
94
94
  throw new Error("macos.bundleIdentifier must be a reverse-DNS identifier");
95
95
  if (value.macos.buildNumber !== undefined && typeof value.macos.buildNumber !== "string")
96
96
  throw new Error("macos.buildNumber must be a string");
97
+ if (value.macos.testDriverInRelease !== undefined && typeof value.macos.testDriverInRelease !== "boolean")
98
+ throw new Error("macos.testDriverInRelease must be a boolean");
97
99
  for (const key of ["entitlements", "infoPlist"])
98
100
  if (value.macos[key] !== undefined)
99
101
  object(value.macos[key], `macos.${key}`);
@@ -223,7 +225,7 @@ var require_updates = __commonJS((exports, module) => {
223
225
  if (!updates || typeof updates !== "object" || Array.isArray(updates))
224
226
  throw new Error("extra.spark.updates must be an object");
225
227
  for (const key of Object.keys(updates))
226
- if (!["feedURL", "publicKey"].includes(key))
228
+ if (!["feedURL", "publicKey", "maximumDeltas"].includes(key))
227
229
  throw new Error(`Unknown updates field: ${key}`);
228
230
  let url;
229
231
  try {
@@ -235,7 +237,10 @@ var require_updates = __commonJS((exports, module) => {
235
237
  throw new Error("Update feedURL must be an HTTPS .xml URL without credentials, query or fragment");
236
238
  if (typeof updates.publicKey !== "string" || !/^[A-Za-z0-9+/]{43}=$/.test(updates.publicKey) || Buffer.from(updates.publicKey, "base64").length !== 32)
237
239
  throw new Error("Updates need a base64 Ed25519 publicKey; run spark updates init <feedURL>");
238
- return { feedURL: url.href, publicKey: updates.publicKey };
240
+ const { maximumDeltas } = updates;
241
+ if (maximumDeltas !== undefined && (!Number.isInteger(maximumDeltas) || maximumDeltas < 0 || maximumDeltas > 10))
242
+ throw new Error("Updates maximumDeltas must be an integer from 0 to 10");
243
+ return { feedURL: url.href, publicKey: updates.publicKey, ...maximumDeltas === undefined ? {} : { maximumDeltas } };
239
244
  }
240
245
  function updatePlist(expo) {
241
246
  const updates = updateConfiguration(expo);
@@ -2478,7 +2483,7 @@ var require_config = __commonJS((exports, module) => {
2478
2483
  version: value.version,
2479
2484
  platforms: [selected],
2480
2485
  newArchEnabled: true,
2481
- ...value.macos ? { macos: { ...value.macos, infoPlist: { CFBundleName: value.name, ...value.macos.infoPlist } } } : {},
2486
+ ...value.macos ? { macos: { ...value.macos, version: value.version, buildNumber: value.macos.buildNumber ?? backend.ios?.buildNumber ?? "1", infoPlist: { CFBundleName: value.name, ...value.macos.infoPlist } } } : {},
2482
2487
  ...value.scheme !== undefined ? { scheme: value.scheme } : {},
2483
2488
  extra: { ...backend.extra, spark: { ...extra, ...platforms.length > 1 ? { supportedPlatforms: platforms } : {} } },
2484
2489
  experiments: { ...backend.experiments, outOfTreePlatforms: true },
@@ -2578,8 +2583,9 @@ var require_init_template = __commonJS((exports, module) => {
2578
2583
  config.name = expo.name;
2579
2584
  config.projectId = expo.windows.projectGuid;
2580
2585
  config.expo = { ...expo, ...config.expo };
2586
+ const { version, ...macos } = expo.macos;
2581
2587
  if (config.macos)
2582
- config.macos = { ...expo.macos, ...config.macos, bundleIdentifier: expo.macos.bundleIdentifier };
2588
+ config.macos = { ...macos, ...config.macos, bundleIdentifier: macos.bundleIdentifier };
2583
2589
  toExpo(config);
2584
2590
  fs.writeFileSync(file, JSON.stringify(config, null, 2) + `
2585
2591
  `);
@@ -174418,7 +174424,7 @@ var import_spark_window_options = __toESM(require_window_options(), 1);
174418
174424
  var import_native_patches = __toESM(require_native_patches(), 1);
174419
174425
  var import_config3 = __toESM(require_config(), 1);
174420
174426
  import { createHash as createHash2 } from "node:crypto";
174421
- var VERSION2 = "0.0.1-next.6";
174427
+ var VERSION2 = "0.0.1-next.8";
174422
174428
  function digest(value) {
174423
174429
  return createHash2("sha256").update(value).digest("hex");
174424
174430
  }
@@ -174562,12 +174568,13 @@ async function configureExample(root, example) {
174562
174568
  }
174563
174569
 
174564
174570
  // packages/cli/src/create.ts
174565
- import { cpSync as cpSync2, existsSync as existsSync7, readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdtempSync as mkdtempSync2, rmSync as rmSync3 } from "node:fs";
174571
+ import { appendFileSync as appendFileSync2, cpSync as cpSync2, existsSync as existsSync7, readFileSync as readFileSync6, writeFileSync as writeFileSync5, mkdtempSync as mkdtempSync2, rmSync as rmSync3 } from "node:fs";
174566
174572
  import path12 from "node:path";
174567
174573
  import os3 from "node:os";
174568
174574
  import { createInterface } from "node:readline";
174569
174575
  import { Readable as Readable2 } from "node:stream";
174570
174576
  var template = path12.resolve(import.meta.dirname, "../templates/blank-typescript");
174577
+ var pnpWriteFile = `--import=data:text/javascript,${encodeURIComponent("import fs from 'node:fs'; const write = fs.promises.writeFile; fs.promises.writeFile = async (file, data, options) => write(file, data?.[Symbol.asyncIterator] ? Buffer.concat(await Array.fromAsync(data)) : data, options);")}`;
174571
174578
  async function create(root, archiveManifest, platform = hostPlatform(), universal = false, example, selectedManager) {
174572
174579
  if (!(universal || example) && !["macos", "windows"].includes(platform))
174573
174580
  throw new Error("Use create --universal for mobile/web targets");
@@ -174606,6 +174613,7 @@ async function create(root, archiveManifest, platform = hostPlatform(), universa
174606
174613
  verifyMaterializedReleasePackages(release, temporary);
174607
174614
  const name = path12.basename(root);
174608
174615
  const npmBin = path12.join(import.meta.dirname, "npm-bin");
174616
+ const pnp = !!process.versions.pnp;
174609
174617
  const child = spawnProcess(nodeCommand(path12.resolve(import.meta.dirname, ".."), "expo-desktop", "expo-desktop", [
174610
174618
  "create-app",
174611
174619
  root,
@@ -174616,8 +174624,9 @@ async function create(root, archiveManifest, platform = hostPlatform(), universa
174616
174624
  "--display-name",
174617
174625
  name,
174618
174626
  "--rdns",
174619
- `so.legend.spark.prototype.${name.toLowerCase()}`
174620
- ]), { cwd: process.cwd(), env: { ...process.env, PATH: `${npmBin}${path12.delimiter}${process.env.PATH ?? ""}`, npm_config_user_agent: `${manager}/spark`, CI: "1", ...manager === "yarn" ? { YARN_ENABLE_IMMUTABLE_INSTALLS: "false" } : {} }, stdout: "pipe", stderr: "inherit" });
174627
+ `so.legend.spark.prototype.${name.toLowerCase()}`,
174628
+ ...pnp ? ["--no-install"] : []
174629
+ ]), { cwd: process.cwd(), env: { ...process.env, PATH: `${npmBin}${path12.delimiter}${process.env.PATH ?? ""}`, npm_config_user_agent: `${manager}/spark`, CI: "1", ...pnp ? { NODE_OPTIONS: `${process.env.NODE_OPTIONS ?? ""} ${pnpWriteFile}` } : {}, ...manager === "yarn" ? { YARN_ENABLE_IMMUTABLE_INSTALLS: "false" } : {} }, stdout: "pipe", stderr: "inherit" });
174621
174630
  let projectReady = false;
174622
174631
  for await (const line of createInterface({ input: Readable2.from(child.stdout), crlfDelay: Infinity })) {
174623
174632
  if (line.includes("✅ Your project is created!"))
@@ -174628,6 +174637,12 @@ async function create(root, archiveManifest, platform = hostPlatform(), universa
174628
174637
  }
174629
174638
  if (await child.exited)
174630
174639
  throw new Error("Expo Desktop could not create the app. See its output above.");
174640
+ if (pnp) {
174641
+ process.env.NODE_OPTIONS = process.env.NODE_OPTIONS?.replace(/--(?:require|experimental-loader)[ =]("[^"]*\.pnp\.[^"]*"|\S*\.pnp\.\S*)/g, "") ?? "";
174642
+ if (manager === "yarn")
174643
+ appendFileSync2(path12.join(root, "yarn.lock"), "");
174644
+ await run(root, managerCommand(manager, ["install"]));
174645
+ }
174631
174646
  } finally {
174632
174647
  rmSync3(temporary, { recursive: true, force: true });
174633
174648
  }
@@ -174667,14 +174682,64 @@ async function create(root, archiveManifest, platform = hostPlatform(), universa
174667
174682
 
174668
174683
  // packages/create-spark/src/create.ts
174669
174684
  import path13 from "node:path";
174685
+
174686
+ // packages/create-spark/src/version.ts
174687
+ function creatorArguments(args) {
174688
+ const forwarded = [];
174689
+ let requested;
174690
+ for (let index = 0;index < args.length; index++) {
174691
+ const arg = args[index];
174692
+ if (arg === "--spark-version" || arg.startsWith("--spark-version=") || arg === "--next" || arg === "--latest") {
174693
+ if (requested !== undefined)
174694
+ throw new Error("Choose only one of --next, --latest, or --spark-version.");
174695
+ const value = arg === "--spark-version" ? args[++index] : arg.startsWith("--spark-version=") ? arg.slice(16) : arg.slice(2);
174696
+ if (!value || value.startsWith("-"))
174697
+ throw new Error("--spark-version requires a version or tag");
174698
+ requested = value;
174699
+ } else
174700
+ forwarded.push(arg);
174701
+ }
174702
+ return { requested, forwarded };
174703
+ }
174704
+ var exactVersion = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
174705
+ async function resolveCreatorVersion(requested, fetcher = fetch) {
174706
+ if (exactVersion.test(requested))
174707
+ return requested;
174708
+ if (!/^[a-zA-Z][\w.-]*$/.test(requested))
174709
+ throw new Error(`Invalid Spark version or tag: ${requested}`);
174710
+ const response = await fetcher("https://registry.npmjs.org/-/package/@legendapp%2fspark/dist-tags", { signal: AbortSignal.timeout(15000) });
174711
+ if (!response.ok)
174712
+ throw new Error(`Could not resolve Spark tag ${requested}: npm registry HTTP ${response.status}`);
174713
+ const tags = await response.json();
174714
+ const version = tags[requested];
174715
+ if (!version || !exactVersion.test(version))
174716
+ throw new Error(`npm has no exact Spark version for tag ${requested}`);
174717
+ return version;
174718
+ }
174719
+ async function checkCreatorVersion(requested, forwarded) {
174720
+ const resolved = await resolveCreatorVersion(requested);
174721
+ if (resolved !== VERSION2) {
174722
+ const args = forwarded.filter((arg) => arg !== "--").map((arg) => "'" + arg.replaceAll("'", "'\\''") + "'").join(" ");
174723
+ throw new Error(`Spark ${requested} resolves to ${resolved}, but this creator bundles ${VERSION2}. Run the matching self-contained creator:
174724
+ npx @legendapp/create-spark@${resolved} ${args}`);
174725
+ }
174726
+ }
174727
+
174728
+ // packages/create-spark/src/create.ts
174670
174729
  async function createSpark(args) {
174671
- const { positionals, values } = cliArguments(["create", ...args]);
174730
+ const { requested, forwarded } = creatorArguments(args);
174731
+ const { positionals, values } = cliArguments(["create", ...forwarded]);
174672
174732
  if (values.help) {
174673
- console.log("Usage: npm create @legendapp/spark@next MyApp -- [--universal] [--platform macos|windows|ios|android|web] [--example document-editor|notes-lite|music-lite|diff-lite] [--packages manifest.json] [--package-manager npm|pnpm|yarn|bun]");
174733
+ console.log("Usage: npm create @legendapp/spark@next MyApp -- [--next | --latest | --spark-version <version|tag>] [--universal] [--platform macos|windows|ios|android|web] [--example document-editor|notes-lite|music-lite|diff-lite] [--packages manifest.json] [--package-manager npm|pnpm|yarn|bun]");
174674
174734
  return;
174675
174735
  }
174676
174736
  if (values.example && !examples.includes(values.example))
174677
174737
  throw new Error(`Use --example ${examples.join(" | ")}`);
174738
+ if (requested) {
174739
+ if (values.packages)
174740
+ throw new Error("Release version flags cannot be combined with --packages.");
174741
+ await checkCreatorVersion(requested, forwarded);
174742
+ }
174678
174743
  const platform = values.platform ?? hostPlatform();
174679
174744
  process.env.SPARK_PLATFORM = platform;
174680
174745
  try {
package/dist/release.json CHANGED
@@ -1,42 +1,42 @@
1
1
  {
2
2
  "schema": 1,
3
- "version": "0.0.1-next.6",
4
- "revision": "155e88cb303e467315dbb65871422c92977665fa",
3
+ "version": "0.0.1-next.8",
4
+ "revision": "8d40fdcbb527da31394b960fdd6c4e0fe621e58a",
5
5
  "packages": {
6
6
  "@react-native-runtimes/core": {
7
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/runtimes-985164a87eb0.tgz",
8
- "size": 53886,
9
- "sha256": "138644fcfaf60b172c9f206c66c6d160515dd8803c70264687d0f503294c9c0b"
7
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/runtimes-4df45cb5ea74.tgz",
8
+ "size": 54050,
9
+ "sha256": "3a04e0455ac44b0bc11cfa315943ad84509c445111a2b3974ca85c8ed489827c"
10
10
  },
11
11
  "react-native-nitro-modules": {
12
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/react-native-nitro-modules-0.37.0-02b4dff54381.tgz",
12
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/react-native-nitro-modules-0.37.0-5df8774796c4.tgz",
13
13
  "size": 145600,
14
- "sha256": "02b4dff54381bbd4640eb4067e1dc82d7a79ff7e7f83b4357a4265177722d999"
14
+ "sha256": "5df8774796c48ed54d238f3fada01b64d710b14077983c37f639607eb805e066"
15
15
  },
16
16
  "@op-engineering/op-sqlite": {
17
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/op-engineering-op-sqlite-18.2.1-dcc9490310bc.tgz",
18
- "size": 112508535,
19
- "sha256": "dcc9490310bc74c869ba7cf5e846a8966fab7c3871c4a536482c20be237894fd"
17
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/op-engineering-op-sqlite-18.2.1-a14b99ecf491.tgz",
18
+ "size": 5847607,
19
+ "sha256": "a14b99ecf4911b55f586b2c5d1f58ac48b0a9d8fe4b84fa6edef1a167630646b"
20
20
  },
21
21
  "react-native-webview": {
22
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/react-native-webview-16.0.0-b887e540eca8.tgz",
23
- "size": 116289,
24
- "sha256": "b887e540eca87c6817de6b38c4e8f4076e3a65e0f7fa63f0c5882e1155447a59"
22
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/react-native-webview-16.0.0-333e421ad38b.tgz",
23
+ "size": 116285,
24
+ "sha256": "333e421ad38b0da2b1dc7b3306de019f257e31bfd6cdb0272d97b1bb2b129354"
25
25
  },
26
26
  "expo-audio": {
27
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/expo-audio-1.1.1-aff5604f2c4c.tgz",
27
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/expo-audio-1.1.1-aff5604f2c4c.tgz",
28
28
  "size": 381841,
29
29
  "sha256": "aff5604f2c4cab23299a71e37e802a572b2e66e2e2250b20a261e664d5346693"
30
30
  }
31
31
  },
32
32
  "runners": {
33
33
  "macos-arm64": {
34
- "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.6/spark-runner-macos-arm64.zip",
35
- "size": 20509040,
36
- "sha256": "02b2da92e3a6661e03cee55304a498d185b306f2df03d0909ac0a3553a2f7fff",
34
+ "url": "https://github.com/LegendApp/legend-spark/releases/download/v0.0.1-next.8/spark-runner-macos-arm64.zip",
35
+ "size": 20579687,
36
+ "sha256": "f1137d1d8922cdad365a7530f5f5121f57a140d5a81756c31b4f3028215c76e5",
37
37
  "app": "SparkRunner.app",
38
38
  "teamId": "56DD97VT22",
39
- "fingerprint": "83b0e267a932be31d5366ea61f40e3609f79a99c01bc7fd69bb966e683d9968b"
39
+ "fingerprint": "2b1a4b243b0032e57eb0d0255005663ba99ff74a2045e7093a197249813f59f9"
40
40
  }
41
41
  }
42
42
  }
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@legendapp/create-spark",
3
- "version": "0.0.1-next.6",
3
+ "version": "0.0.1-next.8",
4
4
  "description": "Create a Legend Spark app",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "create-spark": "dist/index.js"
9
9
  },
10
+ "preferUnplugged": true,
10
11
  "files": [
11
12
  "dist",
12
13
  "templates"
@@ -25,7 +26,7 @@
25
26
  },
26
27
  "dependencies": {
27
28
  "cross-spawn": "7.0.6",
28
- "expo-desktop": "1.0.0",
29
+ "expo-desktop": "1.0.6",
29
30
  "npm": "11.21.1",
30
31
  "yaml": "2.9.1"
31
32
  }
@@ -6,6 +6,10 @@
6
6
  "platforms": [
7
7
  "macos"
8
8
  ],
9
- "icon": "./assets/icon.png"
9
+ "icon": "./assets/icon.png",
10
+ "macos": {
11
+ "version": "0.0.1",
12
+ "buildNumber": "1"
13
+ }
10
14
  }
11
15
  }
@@ -1,6 +1,7 @@
1
1
  node_modules/
2
2
  .threaded-runtime/
3
- .spark/
3
+ .spark/*
4
+ !.spark/version
4
5
  macos/
5
6
  dist/
6
7
  app.json
@@ -13,13 +13,13 @@
13
13
  "postinstall": "node node_modules/@legendapp/spark/init-template.cjs"
14
14
  },
15
15
  "dependencies": {
16
- "@legendapp/spark": "0.0.1-next.6",
16
+ "@legendapp/spark": "0.0.1-next.8",
17
17
  "expo": "54.0.37",
18
- "expo-desktop": "1.0.0",
19
- "expo-desktop-prebuild-config": "1.1.0",
20
- "expo-desktop-config-plugins": "1.2.0",
21
- "expo-desktop-metro-config": "54.81.0",
22
- "expo-desktop-template-bare-minimum": "54.81.1",
18
+ "expo-desktop": "1.0.6",
19
+ "expo-desktop-prebuild-config": "1.1.3",
20
+ "expo-desktop-config-plugins": "1.3.2",
21
+ "expo-desktop-metro-config": "54.81.3",
22
+ "expo-desktop-template-bare-minimum": "54.81.6",
23
23
  "react": "19.1.4",
24
24
  "react-dom": "19.1.4",
25
25
  "react-native": "0.81.6",
@@ -41,7 +41,7 @@
41
41
  "expo-keep-awake": "15.0.8",
42
42
  "expo-modules-core": "3.0.30",
43
43
  "expo-desktop-modules-core": "54.0.14",
44
- "expo-desktop-stubs": "54.0.14",
44
+ "expo-desktop-stubs": "54.0.15",
45
45
  "react": "19.1.4",
46
46
  "react-native": "0.81.6",
47
47
  "react-native-macos": "0.81.7",
@@ -10,6 +10,10 @@
10
10
  "macos",
11
11
  "windows"
12
12
  ],
13
- "icon": "./assets/icon.png"
13
+ "icon": "./assets/icon.png",
14
+ "macos": {
15
+ "version": "0.0.1",
16
+ "buildNumber": "1"
17
+ }
14
18
  }
15
19
  }
@@ -1,6 +1,7 @@
1
1
  node_modules/
2
2
  .threaded-runtime/
3
- .spark/
3
+ .spark/*
4
+ !.spark/version
4
5
  macos/
5
6
  dist/
6
7
  app.json
@@ -18,11 +18,11 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "expo": "54.0.37",
21
- "expo-desktop": "1.0.0",
22
- "expo-desktop-prebuild-config": "1.1.0",
23
- "expo-desktop-config-plugins": "1.2.0",
24
- "expo-desktop-metro-config": "54.81.0",
25
- "expo-desktop-template-bare-minimum": "54.81.1",
21
+ "expo-desktop": "1.0.6",
22
+ "expo-desktop-prebuild-config": "1.1.3",
23
+ "expo-desktop-config-plugins": "1.3.2",
24
+ "expo-desktop-metro-config": "54.81.3",
25
+ "expo-desktop-template-bare-minimum": "54.81.6",
26
26
  "react": "19.1.4",
27
27
  "react-native": "0.81.6",
28
28
  "react-native-macos": "0.81.7",
@@ -31,7 +31,7 @@
31
31
  "@types/react": "19.1.10",
32
32
  "react-native-windows": "0.81.35",
33
33
  "expo-desktop-modules-core": "54.0.14",
34
- "expo-desktop-stubs": "54.0.14",
34
+ "expo-desktop-stubs": "54.0.15",
35
35
  "@expo/ui": "0.2.0-beta.9",
36
36
  "expo-dev-client": "6.0.21",
37
37
  "expo-clipboard": "8.0.8",
@@ -41,7 +41,7 @@
41
41
  "react-native-web": "0.21.0",
42
42
  "uniwind": "1.6.3",
43
43
  "tailwindcss": "4.2.4",
44
- "@legendapp/spark": "0.0.1-next.6"
44
+ "@legendapp/spark": "0.0.1-next.8"
45
45
  },
46
46
  "overrides": {
47
47
  "@expo/cli": "54.0.27",
@@ -55,7 +55,7 @@
55
55
  "expo-keep-awake": "15.0.8",
56
56
  "expo-modules-core": "3.0.30",
57
57
  "expo-desktop-modules-core": "54.0.14",
58
- "expo-desktop-stubs": "54.0.14",
58
+ "expo-desktop-stubs": "54.0.15",
59
59
  "react": "19.1.4",
60
60
  "react-native": "0.81.6",
61
61
  "react-native-macos": "0.81.7",
@@ -6,6 +6,10 @@
6
6
  "platforms": [
7
7
  "windows"
8
8
  ],
9
- "icon": "./assets/icon.png"
9
+ "icon": "./assets/icon.png",
10
+ "macos": {
11
+ "version": "0.0.1",
12
+ "buildNumber": "1"
13
+ }
10
14
  }
11
15
  }
@@ -1,6 +1,7 @@
1
1
  node_modules/
2
2
  .threaded-runtime/
3
- .spark/
3
+ .spark/*
4
+ !.spark/version
4
5
  macos/
5
6
  dist/
6
7
  app.json
@@ -14,11 +14,11 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "expo": "54.0.37",
17
- "expo-desktop": "1.0.0",
18
- "expo-desktop-prebuild-config": "1.1.0",
19
- "expo-desktop-config-plugins": "1.2.0",
20
- "expo-desktop-metro-config": "54.81.0",
21
- "expo-desktop-template-bare-minimum": "54.81.1",
17
+ "expo-desktop": "1.0.6",
18
+ "expo-desktop-prebuild-config": "1.1.3",
19
+ "expo-desktop-config-plugins": "1.3.2",
20
+ "expo-desktop-metro-config": "54.81.3",
21
+ "expo-desktop-template-bare-minimum": "54.81.6",
22
22
  "react": "19.1.4",
23
23
  "react-dom": "19.1.4",
24
24
  "react-native": "0.81.6",
@@ -27,8 +27,8 @@
27
27
  "@types/react": "19.1.10",
28
28
  "react-native-windows": "0.81.35",
29
29
  "expo-desktop-modules-core": "54.0.14",
30
- "expo-desktop-stubs": "54.0.14",
31
- "@legendapp/spark": "0.0.1-next.6"
30
+ "expo-desktop-stubs": "54.0.15",
31
+ "@legendapp/spark": "0.0.1-next.8"
32
32
  },
33
33
  "overrides": {
34
34
  "@expo/cli": "54.0.27",
@@ -42,7 +42,7 @@
42
42
  "expo-keep-awake": "15.0.8",
43
43
  "expo-modules-core": "3.0.30",
44
44
  "expo-desktop-modules-core": "54.0.14",
45
- "expo-desktop-stubs": "54.0.14",
45
+ "expo-desktop-stubs": "54.0.15",
46
46
  "react": "19.1.4",
47
47
  "react-native": "0.81.6",
48
48
  "react-native-macos": "0.81.7",