lecodes-cli 2.0.3 → 2.0.4

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/dist/index.js CHANGED
@@ -52,7 +52,7 @@ var package_default;
52
52
  var init_package = __esm(() => {
53
53
  package_default = {
54
54
  name: "lecodes-cli",
55
- version: "2.0.3",
55
+ version: "2.0.4",
56
56
  dependencies: {
57
57
  "@letary/chisel": "^0.13.0",
58
58
  jimp: "^1.6.1",
@@ -73,7 +73,7 @@ var init_package = __esm(() => {
73
73
  },
74
74
  peerDependencies: {
75
75
  "lecodes-design": "^0.11.0",
76
- "lecodes-headless": "^2.0.3",
76
+ "lecodes-headless": "^2.0.4",
77
77
  "lecodes-3d-editor": "^0.9.0",
78
78
  "lecodes-assets": "^0.2.1"
79
79
  },
@@ -127,7 +127,7 @@ var init_package = __esm(() => {
127
127
  });
128
128
 
129
129
  // ../../sdk/src/version.ts
130
- var SDK_VERSION = "2.0.3", sdkMajor = (version) => {
130
+ var SDK_VERSION = "2.0.4", sdkMajor = (version) => {
131
131
  const m = version?.match(/^(\d+)\.\d+\.\d+/);
132
132
  return m ? Number(m[1]) : null;
133
133
  }, bundleSdkVersion = (head) => head.slice(0, 2000).match(/^\/\/ sdk: (\d+\.\d+\.\d+\S*)/m)?.[1] ?? null, bundleRunsOn = (bundleVersion, hostVersion) => sdkMajor(bundleVersion) !== null && sdkMajor(bundleVersion) === sdkMajor(hostVersion);
@@ -212719,21 +212719,50 @@ var init_peers = __esm(() => {
212719
212719
  });
212720
212720
 
212721
212721
  // src/hosts/archives.ts
212722
- var ARCHIVED_PEERS, BASE = "https://storage.yandexcloud.net/le-codes/releases/packages", packagesBase = () => (process.env.LECODES_PACKAGES_URL || BASE).replace(/\/$/, ""), archiveUrl = (name, version) => `${packagesBase()}/${name}/${name}-${version}.tgz`, archivedVersion = (name) => {
212722
+ var ARCHIVED_PEERS, BASE = "https://storage.yandexcloud.net/le-codes/releases/packages", packagesBase = () => (process.env.LECODES_PACKAGES_URL || BASE).replace(/\/$/, ""), archiveUrl = (name, version) => `${packagesBase()}/${name}/${name}-${version}.tgz`, numbers = (version) => version.split(/[.-]/).slice(0, 3).map(Number), byVersion = (a2, b) => {
212723
+ const pa = numbers(a2), pb = numbers(b);
212724
+ for (let i2 = 0;i2 < 3; i2++) {
212725
+ const d = (pa[i2] ?? 0) - (pb[i2] ?? 0);
212726
+ if (d)
212727
+ return d;
212728
+ }
212729
+ return 0;
212730
+ }, caretTakes = (floor, version) => {
212731
+ if (!/^\d+\.\d+\.\d+$/.test(version) || byVersion(version, floor) < 0)
212732
+ return false;
212733
+ const f5 = numbers(floor), v = numbers(version);
212734
+ const held = f5[0] ? 1 : f5[1] ? 2 : 3;
212735
+ for (let i2 = 0;i2 < held; i2++)
212736
+ if (f5[i2] !== v[i2])
212737
+ return false;
212738
+ return true;
212739
+ }, asked, versionsOut = (name) => {
212740
+ const url = `${packagesBase()}/${name}/index.json`;
212741
+ let answer = asked.get(url);
212742
+ if (!answer) {
212743
+ answer = fetch(`${url}?t=${Date.now()}`, { signal: AbortSignal.timeout(4000) }).then(async (res) => res.ok ? (await res.json()).versions ?? [] : []).catch(() => []);
212744
+ asked.set(url, answer);
212745
+ }
212746
+ return answer;
212747
+ }, archivedVersion = async (name) => {
212723
212748
  if (!ARCHIVED_PEERS.has(name))
212724
212749
  return null;
212725
212750
  if (name === "lecodes-headless")
212726
212751
  return package_default.version;
212727
212752
  const range = package_default.peerDependencies?.[name];
212728
- const version = range?.replace(/^[\^~>=\s]+/, "");
212729
- return version && /^\d+\.\d+\.\d+/.test(version) ? version : null;
212730
- }, archiveSpec = (name) => {
212731
- const version = archivedVersion(name);
212753
+ const floor = range?.replace(/^[\^~>=\s]+/, "");
212754
+ if (!floor || !/^\d+\.\d+\.\d+/.test(floor))
212755
+ return null;
212756
+ const newest = (await versionsOut(name)).filter((version) => caretTakes(floor, version)).sort(byVersion).pop();
212757
+ return newest ?? floor;
212758
+ }, archiveSpec = async (name) => {
212759
+ const version = await archivedVersion(name);
212732
212760
  return version ? archiveUrl(name, version) : null;
212733
212761
  };
212734
212762
  var init_archives = __esm(() => {
212735
212763
  init_package();
212736
212764
  ARCHIVED_PEERS = new Set(["lecodes-headless", "lecodes-design", "lecodes-3d-editor"]);
212765
+ asked = new Map;
212737
212766
  });
212738
212767
 
212739
212768
  // src/hosts/peerInstall.ts
@@ -212754,7 +212783,7 @@ async function loadPeer(name, subpath, opts) {
212754
212783
  if (opts.install === false)
212755
212784
  return null;
212756
212785
  if (peerVersionGlobal(name, spec) !== null)
212757
- throw new CliError(`${name} is installed but "${spec}" can't be loaded from it — reinstall it: npm install -g ${peerSpec(name)}`);
212786
+ throw new CliError(`${name} is installed but "${spec}" can't be loaded from it — reinstall it: npm install -g ${await peerSpec(name)}`);
212758
212787
  await installPeers(companions(name), opts.for);
212759
212788
  }
212760
212789
  return await import(pathToFileURL(resolveEntry(dir, subpath)).href);
@@ -212765,8 +212794,8 @@ var CANVAS_RANGE_FALLBACK = "^0.1.65", readJson2 = (path2) => {
212765
212794
  } catch {
212766
212795
  return null;
212767
212796
  }
212768
- }, peerSpec = (name) => {
212769
- const archive = archiveSpec(name);
212797
+ }, peerSpec = async (name) => {
212798
+ const archive = await archiveSpec(name);
212770
212799
  if (archive)
212771
212800
  return archive;
212772
212801
  if (name === "@napi-rs/canvas") {
@@ -212795,7 +212824,7 @@ var CANVAS_RANGE_FALLBACK = "^0.1.65", readJson2 = (path2) => {
212795
212824
  `);
212796
212825
  }
212797
212826
  const ordered = [...names3].sort((a2, b) => a2 === "lecodes-headless" ? -1 : b === "lecodes-headless" ? 1 : 0);
212798
- const specsNow = ordered.map(peerSpec);
212827
+ const specsNow = await Promise.all(ordered.map(peerSpec));
212799
212828
  const yes = opts.yes === true || !!process.env.LECODES_YES;
212800
212829
  if (!yes) {
212801
212830
  const interactive = process.stdin.isTTY && process.stdout.isTTY;
@@ -212812,7 +212841,7 @@ var CANVAS_RANGE_FALLBACK = "^0.1.65", readJson2 = (path2) => {
212812
212841
  if (!tool)
212813
212842
  throw new CliError(`Neither npm nor bun is on PATH, so ${names3.join(" + ")} can't be installed automatically. Install one, or run on a machine with Node: ${manualCommand(dir, specsNow)}`);
212814
212843
  for (const name of ordered) {
212815
- const spec = peerSpec(name);
212844
+ const spec = await peerSpec(name);
212816
212845
  const argv = tool === "npm" ? ["install", "--prefix", dir, "--no-audit", "--no-fund", "--loglevel=error", spec] : ["add", "--cwd", dir, spec];
212817
212846
  note(`$ ${tool} ${argv.join(" ")}`);
212818
212847
  const r2 = spawnSync6(tool, argv, { stdio: "inherit", shell: process.platform === "win32", timeout: 10 * 60000 });
@@ -230640,15 +230669,15 @@ var parsePlatforms = (raw) => {
230640
230669
  if (raw === undefined)
230641
230670
  return;
230642
230671
  const known = allShaderPlatforms();
230643
- const asked = raw.split(",").map((p2) => p2.trim()).filter(Boolean);
230644
- if (asked.length === 0)
230672
+ const asked2 = raw.split(",").map((p2) => p2.trim()).filter(Boolean);
230673
+ if (asked2.length === 0)
230645
230674
  throw new CliError(`--platform needs at least one target. Known: ${known.join(", ")}`);
230646
- const bad = asked.filter((p2) => !known.includes(p2));
230675
+ const bad = asked2.filter((p2) => !known.includes(p2));
230647
230676
  if (bad.length > 0) {
230648
230677
  throw new CliError(`Unknown shader platform${bad.length > 1 ? "s" : ""}: ${bad.join(", ")}
230649
230678
  Known: ${known.join(", ")}`);
230650
230679
  }
230651
- return asked;
230680
+ return asked2;
230652
230681
  };
230653
230682
  var compileShaders = async (platforms) => {
230654
230683
  const { root, shaders } = collectShaders();
@@ -231886,7 +231915,7 @@ ${c.bold(name)} ${c.dim(what)}`);
231886
231915
  for (const [name, probe] of OPTIONAL_PEERS) {
231887
231916
  const where = peerSource(name, probe);
231888
231917
  const installed = peerVersion(name, probe);
231889
- const latest = !installed ? null : archivedVersion(name) ?? await npmLatest(name);
231918
+ const latest = !installed ? null : await archivedVersion(name) ?? await npmLatest(name);
231890
231919
  rows.push({ name, installed, latest, where });
231891
231920
  }
231892
231921
  rows.push({ name: "lecodes-cli", installed: package_default.version, latest: await npmLatest("lecodes-cli"), where: "global" });
@@ -231900,7 +231929,7 @@ ${c.bold(name)} ${c.dim(what)}`);
231900
231929
  if (behind.length === 0)
231901
231930
  return "ok";
231902
231931
  const prefixBehind = behind.filter((r2) => r2.where === "prefix");
231903
- const globalSpecs = behind.filter((r2) => r2.where !== "prefix").map((r2) => archiveSpec(r2.name) ?? r2.name + "@latest");
231932
+ const globalSpecs = await Promise.all(behind.filter((r2) => r2.where !== "prefix").map(async (r2) => await archiveSpec(r2.name) ?? r2.name + "@latest"));
231904
231933
  if (flags.check) {
231905
231934
  return ["updated", behind.length + " behind — run: lecodes update" + (globalSpecs.length ? " (global: npm install -g " + globalSpecs.join(" ") + ")" : "")];
231906
231935
  }
@@ -232022,6 +232051,20 @@ var buildWeb = async (options) => {
232022
232051
  rmSync14(out, { recursive: true, force: true });
232023
232052
  mkdirSync33(out, { recursive: true });
232024
232053
  cpSync6(lite, out, { recursive: true });
232054
+ const table2 = join51(out, "features.json");
232055
+ if (existsSync51(table2)) {
232056
+ const { features, fonts } = JSON.parse(readFileSync41(table2, "utf8"));
232057
+ if (config.font === "system")
232058
+ for (const file of fonts ?? [])
232059
+ rmSync14(join51(out, file), { force: true });
232060
+ for (const feature of features) {
232061
+ if (feature.uses.some((name2) => js.includes(name2)))
232062
+ continue;
232063
+ for (const file of feature.files)
232064
+ rmSync14(join51(out, file), { force: true });
232065
+ }
232066
+ rmSync14(table2);
232067
+ }
232025
232068
  const bundle = `app.${createHash9("sha256").update(js).digest("hex").slice(0, 10)}.js`;
232026
232069
  writeFileSync35(join51(out, bundle), js);
232027
232070
  for (const entry of entries) {
@@ -232053,7 +232096,11 @@ var buildWeb = async (options) => {
232053
232096
  }
232054
232097
  if (mode === "path")
232055
232098
  head.unshift(`<base href="${escapeHtml(base)}" />`);
232056
- const attrs = [`data-src="${bundle}"`, ...mode === "path" ? [`data-urls="path"`, `data-base="${escapeHtml(base)}"`] : []].join(" ");
232099
+ const attrs = [
232100
+ `data-src="${bundle}"`,
232101
+ ...mode === "path" ? [`data-urls="path"`, `data-base="${escapeHtml(base)}"`] : [],
232102
+ ...config.font === "system" ? [`data-font="system"`] : []
232103
+ ].join(" ");
232057
232104
  const replace = (from, to2) => {
232058
232105
  const next = html.replace(from, to2);
232059
232106
  if (next === html)
package/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "lecodes-cli",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "dependencies": {
5
5
  "@letary/chisel": "^0.13.0",
6
6
  "jimp": "^1.6.1",
7
- "lecodes-sdk": "2.0.3"
7
+ "lecodes-sdk": "2.0.4"
8
8
  },
9
9
  "devDependencies": {
10
10
  "lecodes-design": "https://storage.yandexcloud.net/le-codes/releases/packages/lecodes-design/lecodes-design-0.11.0.tgz",
11
- "lecodes-headless": "2.0.3",
11
+ "lecodes-headless": "2.0.4",
12
12
  "qrcode-terminal": "^0.12.0",
13
13
  "lecodes-3d-editor": "https://storage.yandexcloud.net/le-codes/releases/packages/lecodes-3d-editor/lecodes-3d-editor-0.9.0.tgz",
14
14
  "lecodes-assets": "0.2.1",
15
15
  "lecodes-creator-nav": "0.19.0",
16
- "lecodes-gl-lite": "2.0.3",
17
- "lecodes-web-frame": "2.0.3",
18
- "lecodes-web-player": "2.0.3",
19
- "lecodes-web-shared": "2.0.3",
16
+ "lecodes-gl-lite": "2.0.4",
17
+ "lecodes-web-frame": "2.0.4",
18
+ "lecodes-web-player": "2.0.4",
19
+ "lecodes-web-shared": "2.0.4",
20
20
  "lecodes-web-lite": "2.0.2"
21
21
  },
22
22
  "peerDependencies": {
23
23
  "lecodes-design": "^0.11.0",
24
- "lecodes-headless": "^2.0.3",
24
+ "lecodes-headless": "^2.0.4",
25
25
  "lecodes-3d-editor": "^0.9.0",
26
26
  "lecodes-assets": "^0.2.1"
27
27
  },