@akanjs/cli 2.1.0-rc.10 → 2.1.0-rc.11

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.
@@ -486,7 +486,18 @@ var DEFAULT_OPTIMIZE_IMPORTS = [
486
486
  var WORKSPACE_BARREL_FACETS = ["ui", "webkit", "common", "client", "server"];
487
487
  var SSR_RUNTIME_PACKAGES = ["react", "react-dom", "react-server-dom-webpack"];
488
488
  var NATIVE_RUNTIME_PACKAGES = ["sharp"];
489
- var AKAN_RUNTIME_PACKAGES = new Set([...SSR_RUNTIME_PACKAGES, ...NATIVE_RUNTIME_PACKAGES]);
489
+ var DEFAULT_BACKEND_RUNTIME_PACKAGES = ["croner"];
490
+ var DATABASE_MODE_RUNTIME_PACKAGES = {
491
+ single: [],
492
+ multiple: ["@libsql/client", "bullmq", "ioredis", "protobufjs"],
493
+ cluster: ["bullmq", "ioredis", "postgres", "protobufjs"]
494
+ };
495
+ var AKAN_RUNTIME_PACKAGES = new Set([
496
+ ...SSR_RUNTIME_PACKAGES,
497
+ ...NATIVE_RUNTIME_PACKAGES,
498
+ ...DEFAULT_BACKEND_RUNTIME_PACKAGES,
499
+ ...Object.values(DATABASE_MODE_RUNTIME_PACKAGES).flat()
500
+ ]);
490
501
  var DEFAULT_AKAN_IMAGE_CONFIG = {
491
502
  deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
492
503
  imageSizes: [32, 48, 64, 96, 128, 256, 384],
@@ -695,13 +706,22 @@ CMD [${command.map((c) => `"${c}"`).join(",")}]`;
695
706
  if (AKAN_RUNTIME_PACKAGES.has(lib))
696
707
  return akanPackageJson.dependencies?.[lib] ?? akanPackageJson.peerDependencies?.[lib];
697
708
  }
709
+ #getProductionRuntimePackages() {
710
+ return [
711
+ ...this.externalLibs,
712
+ ...SSR_RUNTIME_PACKAGES,
713
+ ...NATIVE_RUNTIME_PACKAGES,
714
+ ...DEFAULT_BACKEND_RUNTIME_PACKAGES,
715
+ ...DATABASE_MODE_RUNTIME_PACKAGES[this.defaultDatabaseMode]
716
+ ];
717
+ }
698
718
  getProductionPackageJson(data = {}) {
699
719
  return {
700
720
  name: this.app.name,
701
721
  description: this.app.name,
702
722
  version: "1.0.0",
703
723
  main: "./main.js",
704
- dependencies: Object.fromEntries([...new Set([...this.externalLibs, ...SSR_RUNTIME_PACKAGES, ...NATIVE_RUNTIME_PACKAGES])].map((lib) => {
724
+ dependencies: Object.fromEntries([...new Set(this.#getProductionRuntimePackages())].map((lib) => {
705
725
  const version = this.#resolveProductionDependencyVersion(lib);
706
726
  if (!version)
707
727
  throw new Error(`Dependency ${lib} not found in package.json`);
@@ -7173,6 +7193,14 @@ var SSR_RENDER_EXTERNALS = [
7173
7193
  "react-server-dom-webpack/client.node",
7174
7194
  "react-server-dom-webpack/client.browser"
7175
7195
  ];
7196
+ var AKAN_OPTIONAL_BACKEND_EXTERNALS = [
7197
+ "@libsql/client",
7198
+ "bullmq",
7199
+ "croner",
7200
+ "ioredis",
7201
+ "postgres",
7202
+ "protobufjs"
7203
+ ];
7176
7204
 
7177
7205
  class ApplicationBuildRunner {
7178
7206
  #app;
@@ -7241,7 +7269,9 @@ class ApplicationBuildRunner {
7241
7269
  }
7242
7270
  async#buildBackend() {
7243
7271
  const akanConfig2 = await this.#app.getConfig();
7244
- const backendExternals = [...new Set([...akanConfig2.externalLibs, ...SSR_RENDER_EXTERNALS])];
7272
+ const backendExternals = [
7273
+ ...new Set([...akanConfig2.externalLibs, ...SSR_RENDER_EXTERNALS, ...AKAN_OPTIONAL_BACKEND_EXTERNALS])
7274
+ ];
7245
7275
  const backendEntryPoints = [`${this.#app.cwdPath}/main.ts`, `${this.#app.cwdPath}/server.ts`];
7246
7276
  for (const entrypoint of backendEntryPoints) {
7247
7277
  if (!await Bun.file(entrypoint).exists())
package/index.js CHANGED
@@ -484,7 +484,18 @@ var DEFAULT_OPTIMIZE_IMPORTS = [
484
484
  var WORKSPACE_BARREL_FACETS = ["ui", "webkit", "common", "client", "server"];
485
485
  var SSR_RUNTIME_PACKAGES = ["react", "react-dom", "react-server-dom-webpack"];
486
486
  var NATIVE_RUNTIME_PACKAGES = ["sharp"];
487
- var AKAN_RUNTIME_PACKAGES = new Set([...SSR_RUNTIME_PACKAGES, ...NATIVE_RUNTIME_PACKAGES]);
487
+ var DEFAULT_BACKEND_RUNTIME_PACKAGES = ["croner"];
488
+ var DATABASE_MODE_RUNTIME_PACKAGES = {
489
+ single: [],
490
+ multiple: ["@libsql/client", "bullmq", "ioredis", "protobufjs"],
491
+ cluster: ["bullmq", "ioredis", "postgres", "protobufjs"]
492
+ };
493
+ var AKAN_RUNTIME_PACKAGES = new Set([
494
+ ...SSR_RUNTIME_PACKAGES,
495
+ ...NATIVE_RUNTIME_PACKAGES,
496
+ ...DEFAULT_BACKEND_RUNTIME_PACKAGES,
497
+ ...Object.values(DATABASE_MODE_RUNTIME_PACKAGES).flat()
498
+ ]);
488
499
  var DEFAULT_AKAN_IMAGE_CONFIG = {
489
500
  deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
490
501
  imageSizes: [32, 48, 64, 96, 128, 256, 384],
@@ -693,13 +704,22 @@ CMD [${command.map((c) => `"${c}"`).join(",")}]`;
693
704
  if (AKAN_RUNTIME_PACKAGES.has(lib))
694
705
  return akanPackageJson.dependencies?.[lib] ?? akanPackageJson.peerDependencies?.[lib];
695
706
  }
707
+ #getProductionRuntimePackages() {
708
+ return [
709
+ ...this.externalLibs,
710
+ ...SSR_RUNTIME_PACKAGES,
711
+ ...NATIVE_RUNTIME_PACKAGES,
712
+ ...DEFAULT_BACKEND_RUNTIME_PACKAGES,
713
+ ...DATABASE_MODE_RUNTIME_PACKAGES[this.defaultDatabaseMode]
714
+ ];
715
+ }
696
716
  getProductionPackageJson(data = {}) {
697
717
  return {
698
718
  name: this.app.name,
699
719
  description: this.app.name,
700
720
  version: "1.0.0",
701
721
  main: "./main.js",
702
- dependencies: Object.fromEntries([...new Set([...this.externalLibs, ...SSR_RUNTIME_PACKAGES, ...NATIVE_RUNTIME_PACKAGES])].map((lib) => {
722
+ dependencies: Object.fromEntries([...new Set(this.#getProductionRuntimePackages())].map((lib) => {
703
723
  const version = this.#resolveProductionDependencyVersion(lib);
704
724
  if (!version)
705
725
  throw new Error(`Dependency ${lib} not found in package.json`);
@@ -7171,6 +7191,14 @@ var SSR_RENDER_EXTERNALS = [
7171
7191
  "react-server-dom-webpack/client.node",
7172
7192
  "react-server-dom-webpack/client.browser"
7173
7193
  ];
7194
+ var AKAN_OPTIONAL_BACKEND_EXTERNALS = [
7195
+ "@libsql/client",
7196
+ "bullmq",
7197
+ "croner",
7198
+ "ioredis",
7199
+ "postgres",
7200
+ "protobufjs"
7201
+ ];
7174
7202
 
7175
7203
  class ApplicationBuildRunner {
7176
7204
  #app;
@@ -7239,7 +7267,9 @@ class ApplicationBuildRunner {
7239
7267
  }
7240
7268
  async#buildBackend() {
7241
7269
  const akanConfig2 = await this.#app.getConfig();
7242
- const backendExternals = [...new Set([...akanConfig2.externalLibs, ...SSR_RENDER_EXTERNALS])];
7270
+ const backendExternals = [
7271
+ ...new Set([...akanConfig2.externalLibs, ...SSR_RENDER_EXTERNALS, ...AKAN_OPTIONAL_BACKEND_EXTERNALS])
7272
+ ];
7243
7273
  const backendEntryPoints = [`${this.#app.cwdPath}/main.ts`, `${this.#app.cwdPath}/server.ts`];
7244
7274
  for (const entrypoint of backendEntryPoints) {
7245
7275
  if (!await Bun.file(entrypoint).exists())
@@ -10262,11 +10292,14 @@ import chalk7 from "chalk";
10262
10292
  import * as QRcode from "qrcode";
10263
10293
 
10264
10294
  // pkgs/@akanjs/cli/npmRegistry.ts
10265
- async function getLatestPackageVersion(packageName, tag = "latest") {
10266
- const url = `https://registry.npmjs.org/${encodeURIComponent(packageName).replace(/^%40/, "@")}`;
10295
+ var defaultNpmRegistry = "https://registry.npmjs.org";
10296
+ var getNpmRegistryUrl = (registryUrl = process.env.AKAN_NPM_REGISTRY ?? defaultNpmRegistry) => registryUrl.replace(/\/+$/, "");
10297
+ async function getLatestPackageVersion(packageName, tag = "latest", registryUrl) {
10298
+ const registry = getNpmRegistryUrl(registryUrl);
10299
+ const url = `${registry}/${encodeURIComponent(packageName).replace(/^%40/, "@")}`;
10267
10300
  const res = await fetch(url);
10268
10301
  if (!res.ok)
10269
- throw new Error(`Failed to fetch ${packageName} metadata from npm registry`);
10302
+ throw new Error(`Failed to fetch ${packageName} metadata from ${registry}`);
10270
10303
  const metadata = await res.json();
10271
10304
  const version = metadata["dist-tags"]?.[tag];
10272
10305
  if (!version)
@@ -11632,20 +11665,29 @@ var defaultWorkspacePeerDependencies = new Set([
11632
11665
  ]);
11633
11666
 
11634
11667
  class WorkspaceRunner extends runner("workspace") {
11635
- async createWorkspace(repoName, appName, { dirname: dirname3 = ".", init = true, akanVersion }) {
11668
+ async createWorkspace(repoName, appName, {
11669
+ dirname: dirname3 = ".",
11670
+ init = true,
11671
+ akanVersion,
11672
+ registryUrl
11673
+ }) {
11636
11674
  const cwdPath = process.cwd();
11637
11675
  const workspaceRoot = path38.join(cwdPath, dirname3, repoName);
11676
+ const normalizedRegistryUrl = registryUrl ? getNpmRegistryUrl(registryUrl) : undefined;
11638
11677
  const workspace = WorkspaceExecutor.fromRoot({ workspaceRoot, repoName });
11639
11678
  const templateSpinner = workspace.spinning(`Creating workspace template files in ${dirname3}/${repoName}...`);
11640
11679
  const [latestBiomeVersion, latestTypesBunVersion] = await Promise.all([
11641
- getLatestPackageVersion("@biomejs/biome"),
11642
- getLatestPackageVersion("@types/bun")
11680
+ getLatestPackageVersion("@biomejs/biome", "latest", normalizedRegistryUrl),
11681
+ getLatestPackageVersion("@types/bun", "latest", normalizedRegistryUrl)
11643
11682
  ]);
11644
11683
  await workspace.applyTemplate({
11645
11684
  basePath: ".",
11646
11685
  template: "workspaceRoot",
11647
11686
  dict: { repoName, appName, serveDomain: "localhost" }
11648
11687
  });
11688
+ if (normalizedRegistryUrl)
11689
+ await workspace.writeFile(".npmrc", `registry=${normalizedRegistryUrl}/
11690
+ `);
11649
11691
  templateSpinner.succeed(`Workspace files created in ${dirname3}/${repoName}`);
11650
11692
  const [rootPackageJson, peerDependencies] = await Promise.all([
11651
11693
  workspace.getPackageJson(),
@@ -11750,12 +11792,18 @@ class WorkspaceScript extends script("workspace", [
11750
11792
  LibraryScript,
11751
11793
  PackageScript
11752
11794
  ]) {
11753
- async createWorkspace(repoName, appName, { dirname: dirname3 = ".", installLibs = false, init = true }) {
11795
+ async createWorkspace(repoName, appName, {
11796
+ dirname: dirname3 = ".",
11797
+ installLibs = false,
11798
+ init = true,
11799
+ registryUrl
11800
+ }) {
11754
11801
  const akanVersion = await this.packageScript.version(null, { log: false });
11755
11802
  const workspace = await this.workspaceRunner.createWorkspace(repoName, appName, {
11756
11803
  dirname: dirname3,
11757
11804
  init,
11758
- akanVersion
11805
+ akanVersion,
11806
+ registryUrl
11759
11807
  });
11760
11808
  if (installLibs) {
11761
11809
  await this.libraryScript.installLibrary(workspace, "util");
@@ -11828,9 +11876,12 @@ class WorkspaceCommand extends command("workspace", [WorkspaceScript], ({ public
11828
11876
  }).option("init", Boolean, {
11829
11877
  desc: "Do you want to initialize the workspace? (Recommended)",
11830
11878
  default: true
11831
- }).exec(async function(workspaceName, app, dir, libs, init) {
11879
+ }).option("registry", String, {
11880
+ desc: "npm registry URL for installing Akan packages",
11881
+ default: process.env.AKAN_NPM_REGISTRY
11882
+ }).exec(async function(workspaceName, app, dir, libs, init, registry) {
11832
11883
  const appName = app || "app";
11833
- await this.workspaceScript.createWorkspace(workspaceName.toLowerCase().replace(/ /g, "-"), appName.toLowerCase().replace(/ /g, "-"), { dirname: dir, installLibs: libs, init });
11884
+ await this.workspaceScript.createWorkspace(workspaceName.toLowerCase().replace(/ /g, "-"), appName.toLowerCase().replace(/ /g, "-"), { dirname: dir, installLibs: libs, init, registryUrl: registry });
11834
11885
  }),
11835
11886
  lint: target({ desc: "Lint and fix code in a specific app/lib/pkg" }).with(Exec).option("fix", Boolean, { default: true }).with(Workspace).exec(async function(exec2, fix, workspace) {
11836
11887
  await this.workspaceScript.lint(exec2, workspace, { fix });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/cli",
3
- "version": "2.1.0-rc.10",
3
+ "version": "2.1.0-rc.11",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -34,7 +34,7 @@
34
34
  "@langchain/deepseek": "^1.0.26",
35
35
  "@langchain/openai": "^1.4.6",
36
36
  "@trapezedev/project": "^7.1.4",
37
- "akanjs": "2.1.0-rc.9",
37
+ "akanjs": "2.1.0-rc.10",
38
38
  "chalk": "^5.6.2",
39
39
  "commander": "^14.0.3",
40
40
  "daisyui": "^5.5.20",