@m3rcena/eco 14.28.1-dev.0 → 14.28.1

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/host.cjs CHANGED
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_host = require("./host-3dAloQHW.cjs");
2
+ const require_host = require("./host-Bmld-WtZ.cjs");
3
3
  require("./resolver.cjs");
4
4
  exports.hostEco = require_host.hostEco;
package/dist/host.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export { t as hostEco } from "./host-DYfnpiNu.mjs";
1
+ export { t as hostEco } from "./host-qJNVzdDa.mjs";
2
2
  import "./resolver.mjs";
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_host = require("./host-3dAloQHW.cjs");
2
+ const require_host = require("./host-Bmld-WtZ.cjs");
3
3
  const require_resolver = require("./resolver.cjs");
4
4
  let discord_js = require("discord.js");
5
5
  let _m3rcena_bridge = require("@m3rcena/bridge");
package/dist/index.d.cts CHANGED
@@ -313,7 +313,7 @@ export declare class EcoBillsUI extends EcoBaseUI {
313
313
  * @copyright 2026 M3rcena Development. All rights reserved.
314
314
  * @license Apache-2.0
315
315
  */
316
- export declare const ECO_VERSION = "14.28.0";
316
+ export declare const ECO_VERSION = "14.28.1";
317
317
  /**
318
318
  * Strips ANSI color escape codes to compute visible string length.
319
319
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/storage/SqliteEcoStorage.ts","../src/storage/PrismaEcoStorage.ts","../src/storage/EcoDatabaseHandler.ts","../src/canvas/RenderBankCard.ts","../src/canvas/RenderMarketChart.ts","../src/ui/ContextAdapter.ts","../src/ui/EcoBaseUI.ts","../src/ui/EcoProfileUI.ts","../src/ui/EcoShopUI.ts","../src/ui/EcoStockMarketUI.ts","../src/ui/EcoHeistUI.ts","../src/ui/EcoBlackjackUI.ts","../src/ui/EcoCrateUI.ts","../src/ui/EcoLeaderboardUI.ts","../src/ui/EcoVaultUI.ts","../src/ui/EcoLoanUI.ts","../src/ui/EcoBillsUI.ts","../src/utils/Notifier.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/storage/SqliteEcoStorage.ts","../src/storage/PrismaEcoStorage.ts","../src/storage/EcoDatabaseHandler.ts","../src/canvas/RenderBankCard.ts","../src/canvas/RenderMarketChart.ts","../src/ui/ContextAdapter.ts","../src/ui/EcoBaseUI.ts","../src/ui/EcoProfileUI.ts","../src/ui/EcoShopUI.ts","../src/ui/EcoStockMarketUI.ts","../src/ui/EcoHeistUI.ts","../src/ui/EcoBlackjackUI.ts","../src/ui/EcoCrateUI.ts","../src/ui/EcoLeaderboardUI.ts","../src/ui/EcoVaultUI.ts","../src/ui/EcoLoanUI.ts","../src/ui/EcoBillsUI.ts","../src/utils/Notifier.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -313,7 +313,7 @@ export declare class EcoBillsUI extends EcoBaseUI {
313
313
  * @copyright 2026 M3rcena Development. All rights reserved.
314
314
  * @license Apache-2.0
315
315
  */
316
- export declare const ECO_VERSION = "14.28.0";
316
+ export declare const ECO_VERSION = "14.28.1";
317
317
  /**
318
318
  * Strips ANSI color escape codes to compute visible string length.
319
319
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/storage/SqliteEcoStorage.ts","../src/storage/PrismaEcoStorage.ts","../src/storage/EcoDatabaseHandler.ts","../src/canvas/RenderBankCard.ts","../src/canvas/RenderMarketChart.ts","../src/ui/ContextAdapter.ts","../src/ui/EcoBaseUI.ts","../src/ui/EcoProfileUI.ts","../src/ui/EcoShopUI.ts","../src/ui/EcoStockMarketUI.ts","../src/ui/EcoHeistUI.ts","../src/ui/EcoBlackjackUI.ts","../src/ui/EcoCrateUI.ts","../src/ui/EcoLeaderboardUI.ts","../src/ui/EcoVaultUI.ts","../src/ui/EcoLoanUI.ts","../src/ui/EcoBillsUI.ts","../src/utils/Notifier.ts"],"mappings":";;;;iBAeiB;;EAEf;;EAEA;;qBAGW,4BAA4B;UAC/B;WACQ;EAEhB,YAAY,mBAAkB;UAuBtB;EAqBK,WAAW,gBAAgB,mBAAmB,QAAQ;EAatD,YAAY,SAAS,cAAc;EA2BnC,eACX,mDACA,gBACA,mBACC,QAAQ;EAuCE,eAAe,mBAAmB,QAAQ;;;;EAyBhD;;;;;qBChKI;;;;;;wBAqBG,oBAAoB;iBAmBnB;;EAEf;;EAEA;;EAEA;;EAEA;;qBAGW,4BAA4B;UAC/B;UACA;UACA;UACA;UACA;EAER,YAAY,eAAe;UAeb;EA6CD,WAAW,gBAAgB,mBAAmB,QAAQ;EA0DtD,YAAY,SAAS,cAAc;EAiFnC,eACX,mDACA,gBACA,mBACC,QAAQ;EA2CE,eAAe,mBAAmB,QAAQ;;qBCrT5C;;;;SAIG,OAAO,SAAS,oBAAoB;;;;SA0CpC,kBAAkB;;;;;wBAQlB,kBAAkB;EAAW;EAAe,WAAW;IAAsB;;;;;;;;;iBCxD5E;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;qBAGW;;;;SAIS,WAAW,SAAS,wBAAwB,QAAQ;iBAuKzD;iBASA;iBA0BA;iBAcA;;;;;;;;;;iBC5OA;EACf;EACA;EACA;EACA;EACA;EACA;;qBAGW;;;;SAIG,YAAY,SAAS,oBAAoB;;YCG7C,uBAAuB,wBAAwB;iBAE1C;EACf;EACA,SAAS;EACT,aAAa;EACb,SAAS,oBAAoB;IAAW,YAAY;IAAiB;;EACrE,QAAQ;;YAGE,mBAAmB,8BAA8B,oBAAoB,cAAc;qBAElF;EACJ,KAAK;EACL,MAAM;EACN;EACA,QAAQ;EACR,OAAO;EACP,SAAS;EACT,QAAQ;EACR;EACA;EACA,aAAa;EAEpB,YAAY,SAAS;SAwCP,KAAK,SAAS,mBAAmB;UAIvC;EASK,YAAY,SAAS,qBAAqB,QAAQ;EA4ElD,KAAK,SAAS,qBAAqB;SAgC5B,eAAe,kBAAkB,kBAAkB;;iBCzMxD;EACf,SAAS;EACT,aAAa;EACb;;8BAGoB,UAAU,iBAAiB,mBAAmB;EAC3D;EACA,SAAS;EACT,KAAK;EACL;EACA;EACA;YACG,cAAc,OAAO;YACrB;EAEV,YAAY,cAAc,SAAS,UAAU;EAStC,aAAa,QAAQ,0CAA0C;EAgB/D,gBAAgB,iBAAiB;YAM9B,aAAa,uBAAuB;YAiBpC;EAOH;EAKA,OAAO,kBAAkB,MAAM;WAQtB,SAAS;;iBCzEV,4BAA4B;EAC3C,aAAa,OAAO;EACpB;;qBAGW,qBAAqB,UAAU;UAClC;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAatB,SAAS;UAkCd;UAiCA;;iBC5FO,yBAAyB;EACxC;;qBAGW,kBAAkB,UAAU;UAC/B;UACA;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAMtB,SAAS;UAad;UA2DM;;iBCvFC,gCAAgC;EAC/C;;qBAGW,yBAAyB,UAAU;UACtC;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAKtB,SAAS;UAuBd;UAOM;UAmBN;UA2EM;;iBC3IC,0BAA0B;EACzC;;qBAGW,mBAAmB,UAAU;UAChC;UACA;UACA;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAMtB,SAAS;UAyBd;UAuGA;UAKA;;iBC1JO,8BAA8B;EAC7C;;qBAGW,uBAAuB,UAAU;UACpC;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAMtB,SAAS;UAiCd;UAgDA;UAOA;;iBCpGO,0BAA0B;EACzC,cAAc;;qBAGH,mBAAmB,UAAU;UAChC;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAMtB,SAAS;UAad;UA2DA;;iBCzFO,gCAAgC;EAC/C,gBAAgB;EAChB;;qBAGW,yBAAyB,UAAU;UACtC;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAMtB,SAAS;UAad;UA0CM;;qBCvEH,mBAAmB;UACtB;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAKtB,SAAS;UAgBd;UA4DM;;qBCtFH,kBAAkB;UACrB;UACA;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAKtB,SAAS;UAad;UAyEM;;qBClGH,mBAAmB;UACtB;UACA;UACA;EAER,YAAY,cAAc,SAAS;EAKtB,SAAS;UAmBd;UAsEM;;;;;;;;;qBC3GH;;;;wBAKG,UAAU;;;;wBAOV,WAAW;;;;;wBAyBX,cAAc,YAAY;;;;wBAwBpB,sBAAsB;;;;wBAiCtB,oBAAoB,yBAAsC,qBAAqB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/storage/SqliteEcoStorage.ts","../src/storage/PrismaEcoStorage.ts","../src/storage/EcoDatabaseHandler.ts","../src/canvas/RenderBankCard.ts","../src/canvas/RenderMarketChart.ts","../src/ui/ContextAdapter.ts","../src/ui/EcoBaseUI.ts","../src/ui/EcoProfileUI.ts","../src/ui/EcoShopUI.ts","../src/ui/EcoStockMarketUI.ts","../src/ui/EcoHeistUI.ts","../src/ui/EcoBlackjackUI.ts","../src/ui/EcoCrateUI.ts","../src/ui/EcoLeaderboardUI.ts","../src/ui/EcoVaultUI.ts","../src/ui/EcoLoanUI.ts","../src/ui/EcoBillsUI.ts","../src/utils/Notifier.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as DEFAULT_SHOP_ITEMS, B as applyPrismaEcoModel, C as HeistManager, D as CasinoManager, E as LeaderboardManager, F as BankManager, H as JsonEcoStorage, I as EcoDatabaseHandler, L as resolveEcoStorage, M as CareerManager, N as DEFAULT_JOBS, O as BusinessManager, P as RewardManager, R as PRISMA_ECO_MODEL, S as DEFAULT_HEIST_TARGETS, T as StockMarketManager, U as MemoryEcoStorage, V as SqliteEcoStorage, W as createDefaultAccount, _ as VaultManager, a as checkPackageUpdates, b as DEFAULT_PETS, c as stripAnsi, d as RenderMarketChart, f as RenderBankCard, g as DEFAULT_VAULT_TIERS, h as LoanManager, i as boxConsole, j as ShopManager, k as DEFAULT_BUSINESS_CATALOG, l as EcoWekyConnector, m as LOAN_CATALOG, n as EcoManager, o as compareSemver, p as TaxManager, r as ECO_VERSION, s as fetchLatestVersion, t as hostEco, u as EcoBridgeRouter, v as CRATE_PRICES, w as DEFAULT_STOCKS, x as PetManager, y as CrateManager, z as PrismaEcoStorage } from "./host-DYfnpiNu.mjs";
1
+ import { A as DEFAULT_SHOP_ITEMS, B as applyPrismaEcoModel, C as HeistManager, D as CasinoManager, E as LeaderboardManager, F as BankManager, H as JsonEcoStorage, I as EcoDatabaseHandler, L as resolveEcoStorage, M as CareerManager, N as DEFAULT_JOBS, O as BusinessManager, P as RewardManager, R as PRISMA_ECO_MODEL, S as DEFAULT_HEIST_TARGETS, T as StockMarketManager, U as MemoryEcoStorage, V as SqliteEcoStorage, W as createDefaultAccount, _ as VaultManager, a as ECO_VERSION, b as DEFAULT_PETS, c as compareSemver, d as RenderMarketChart, f as RenderBankCard, g as DEFAULT_VAULT_TIERS, h as LoanManager, i as EcoBridgeRouter, j as ShopManager, k as DEFAULT_BUSINESS_CATALOG, l as fetchLatestVersion, m as LOAN_CATALOG, n as EcoManager, o as boxConsole, p as TaxManager, r as EcoWekyConnector, s as checkPackageUpdates, t as hostEco, u as stripAnsi, v as CRATE_PRICES, w as DEFAULT_STOCKS, x as PetManager, y as CrateManager, z as PrismaEcoStorage } from "./host-qJNVzdDa.mjs";
2
2
  import { findProjectRoot, generateTsConfigPaths, getAllPackageResolutions, isTypeScriptRuntime, loadResolverConfig, printResolutionSummary, resolvePackage } from "./resolver.mjs";
3
3
  import { ActionRowBuilder, AttachmentBuilder, ButtonBuilder, ButtonStyle, ContainerBuilder, GuildMember, Message, MessageFlags, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, User, resolveColor } from "discord.js";
4
4
  import { M3rcenaBridge } from "@m3rcena/bridge";
package/dist/resolver.cjs CHANGED
@@ -42,13 +42,13 @@ const KNOWN_PACKAGES = {
42
42
  }
43
43
  };
44
44
  const CANDIDATE_CONTAINERS = [
45
+ ".",
45
46
  "submodules",
46
47
  "submodule",
47
48
  "vendor",
48
49
  "packages",
49
50
  "libs",
50
- "modules",
51
- ""
51
+ "modules"
52
52
  ];
53
53
  function isTypeScriptRuntime() {
54
54
  if (typeof process.isBun !== "undefined") return true;
@@ -137,6 +137,19 @@ function resolvePackage(packageName, options = {}) {
137
137
  const cfg = loadResolverConfig(root);
138
138
  const pkgMeta = KNOWN_PACKAGES[packageName];
139
139
  const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();
140
+ const rootInspected = inspectSubmoduleDirectory(root, packageName);
141
+ if (rootInspected.isValid) {
142
+ const ep = resolveSubmoduleEntryPoint(root, preferSource);
143
+ return {
144
+ name: packageName,
145
+ status: "submodule",
146
+ type: ep.type,
147
+ path: ep.entryPath,
148
+ rootDirectory: root,
149
+ version: rootInspected.version,
150
+ isBuilt: ep.isBuilt
151
+ };
152
+ }
140
153
  if (options.overrides?.[packageName]) {
141
154
  const customPath = node_path.default.resolve(root, options.overrides[packageName]);
142
155
  const inspected = inspectSubmoduleDirectory(customPath, packageName);
@@ -191,7 +204,7 @@ function resolvePackage(packageName, options = {}) {
191
204
  cfg?.submodulesDir,
192
205
  process.env.M3RCENA_SUBMODULES_DIR,
193
206
  ...CANDIDATE_CONTAINERS
194
- ].filter(Boolean);
207
+ ].filter((c) => typeof c === "string" && c.trim().length > 0);
195
208
  const searchRoots = [
196
209
  root,
197
210
  node_path.default.resolve(root, ".."),
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.cjs","names":["path","fs"],"sources":["../src/resolver.ts"],"sourcesContent":["/**\n * @m3rcena/eco - Rust-Style Submodule & Path Resolver\n *\n * Inspired by Cargo's workspace and [patch.crates-io] resolver algorithm.\n * Enables zero-friction consumption of @m3rcena packages via Git submodules,\n * local vendor paths, or standard NPM registry installs without code changes.\n *\n * @copyright 2026 M3rcena Development. All rights reserved.\n * @license Apache-2.0\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport type M3rcenaPackageName = \"@m3rcena/weky\" | \"@m3rcena/eco\" | \"@m3rcena/bridge\";\n\nexport interface PackageResolution {\n name: M3rcenaPackageName;\n status: \"submodule\" | \"npm\" | \"missing\";\n type: \"source\" | \"dist\" | \"registry\";\n path: string;\n rootDirectory?: string;\n version?: string;\n isBuilt?: boolean;\n}\n\nexport interface ResolverOptions {\n cwd?: string;\n submodulesDir?: string;\n preferSource?: boolean;\n overrides?: Partial<Record<M3rcenaPackageName, string>>;\n silent?: boolean;\n}\n\nexport interface M3rcenaResolverConfig {\n submodulesDir?: string;\n preferSource?: boolean;\n packages?: Partial<Record<M3rcenaPackageName, string>>;\n}\n\nconst KNOWN_PACKAGES: Record<M3rcenaPackageName, { aliases: string[]; envVar: string }> = {\n \"@m3rcena/weky\": {\n aliases: [\"m3rcena-weky\", \"weky\", \"weky-manager\"],\n envVar: \"M3RCENA_WEKY_PATH\",\n },\n \"@m3rcena/eco\": {\n aliases: [\"m3rcena-eco\", \"eco\", \"economy\"],\n envVar: \"M3RCENA_ECO_PATH\",\n },\n \"@m3rcena/bridge\": {\n aliases: [\"m3rcena-bridge\", \"bridge\", \"m3rcena-core\"],\n envVar: \"M3RCENA_BRIDGE_PATH\",\n },\n};\n\nconst CANDIDATE_CONTAINERS = [\n \"submodules\",\n \"submodule\",\n \"vendor\",\n \"packages\",\n \"libs\",\n \"modules\",\n \"\",\n];\n\nexport function isTypeScriptRuntime(): boolean {\n if (typeof (process as any).isBun !== \"undefined\") return true;\n if (typeof (process as any).isDeno !== \"undefined\") return true;\n const execArgv = process.execArgv.join(\" \");\n if (/tsx|ts-node|@swc\\/register|ts-loader/.test(execArgv)) return true;\n if (process.argv[1]?.endsWith(\".ts\") || process.argv[1]?.endsWith(\".mts\")) return true;\n if (process.env.M3RCENA_PREFER_SOURCE === \"true\" || process.env.M3RCENA_PREFER_SOURCE === \"1\") return true;\n return false;\n}\n\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n for (let i = 0; i < 6; i++) {\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return path.resolve(startDir);\n}\n\nexport function loadResolverConfig(cwd: string = process.cwd()): M3rcenaResolverConfig | null {\n const root = findProjectRoot(cwd);\n const resolverFile = path.join(root, \"m3rcena.resolver.json\");\n if (fs.existsSync(resolverFile)) {\n try {\n return JSON.parse(fs.readFileSync(resolverFile, \"utf-8\")) as M3rcenaResolverConfig;\n } catch {\n // Ignore\n }\n }\n\n const pkgJsonPath = path.join(root, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n if (pkg.m3rcena && typeof pkg.m3rcena === \"object\") {\n return pkg.m3rcena as M3rcenaResolverConfig;\n }\n } catch {\n // Ignore\n }\n }\n\n return null;\n}\n\nfunction inspectSubmoduleDirectory(dirPath: string, expectedName: M3rcenaPackageName): { isValid: boolean; version?: string } {\n if (!fs.existsSync(dirPath)) return { isValid: false };\n try {\n const stat = fs.statSync(dirPath);\n if (!stat.isDirectory()) return { isValid: false };\n\n const pkgPath = path.join(dirPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n const data = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (data.name === expectedName) {\n return { isValid: true, version: data.version };\n }\n }\n\n if (fs.existsSync(path.join(dirPath, \"src\", \"index.ts\"))) {\n return { isValid: true };\n }\n } catch {\n return { isValid: false };\n }\n return { isValid: false };\n}\n\nfunction resolveSubmoduleEntryPoint(dirPath: string, preferSource: boolean): { entryPath: string; type: \"source\" | \"dist\"; isBuilt: boolean } {\n const srcTs = path.join(dirPath, \"src\", \"index.ts\");\n const distMjs = path.join(dirPath, \"dist\", \"index.mjs\");\n const distCjs = path.join(dirPath, \"dist\", \"index.cjs\");\n const isBuilt = fs.existsSync(distMjs) || fs.existsSync(distCjs);\n\n if (preferSource && fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt };\n }\n\n if (fs.existsSync(distMjs)) {\n return { entryPath: distMjs, type: \"dist\", isBuilt: true };\n }\n if (fs.existsSync(distCjs)) {\n return { entryPath: distCjs, type: \"dist\", isBuilt: true };\n }\n\n if (fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt: false };\n }\n\n return { entryPath: dirPath, type: \"dist\", isBuilt };\n}\n\nexport function resolvePackage(packageName: M3rcenaPackageName, options: ResolverOptions = {}): PackageResolution {\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const cfg = loadResolverConfig(root);\n const pkgMeta = KNOWN_PACKAGES[packageName];\n\n const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();\n\n if (options.overrides?.[packageName]) {\n const customPath = path.resolve(root, options.overrides[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const envVal = process.env[pkgMeta.envVar];\n if (envVal) {\n const customPath = path.resolve(root, envVal);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n if (cfg?.packages?.[packageName]) {\n const customPath = path.resolve(root, cfg.packages[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const candidateContainers = [\n options.submodulesDir,\n cfg?.submodulesDir,\n process.env.M3RCENA_SUBMODULES_DIR,\n ...CANDIDATE_CONTAINERS,\n ].filter(Boolean) as string[];\n\n const searchRoots = [root, path.resolve(root, \"..\"), path.resolve(root, \"../..\")];\n\n for (const sRoot of searchRoots) {\n for (const container of candidateContainers) {\n for (const alias of pkgMeta.aliases) {\n const candidateDir = path.resolve(sRoot, container, alias);\n const inspected = inspectSubmoduleDirectory(candidateDir, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(candidateDir, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: candidateDir,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n }\n }\n\n try {\n const resolvedNpm = require.resolve(packageName, { paths: [root, process.cwd()] });\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: resolvedNpm,\n };\n } catch {\n const nmPath = path.join(root, \"node_modules\", packageName);\n if (fs.existsSync(nmPath)) {\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: nmPath,\n };\n }\n }\n\n return {\n name: packageName,\n status: \"missing\",\n type: \"registry\",\n path: packageName,\n };\n}\n\nexport function getAllPackageResolutions(options: ResolverOptions = {}): Record<M3rcenaPackageName, PackageResolution> {\n return {\n \"@m3rcena/weky\": resolvePackage(\"@m3rcena/weky\", options),\n \"@m3rcena/eco\": resolvePackage(\"@m3rcena/eco\", options),\n \"@m3rcena/bridge\": resolvePackage(\"@m3rcena/bridge\", options),\n };\n}\n\nexport function generateTsConfigPaths(options: ResolverOptions = {}): Record<string, string[]> {\n const resolutions = getAllPackageResolutions(options);\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const paths: Record<string, string[]> = {};\n\n for (const [name, res] of Object.entries(resolutions)) {\n if (res.status === \"submodule\" && res.rootDirectory) {\n const rel = path.relative(root, res.rootDirectory).replace(/\\\\/g, \"/\");\n const cleanRel = !rel || rel === \".\" ? \".\" : (rel.startsWith(\".\") ? rel : `./${rel}`);\n paths[name] = [`${cleanRel}/src`, `${cleanRel}/dist/index.mjs`, cleanRel];\n if (name === \"@m3rcena/bridge\") {\n paths[\"@m3rcena/bridge/client\"] = [`${cleanRel}/src/client`, `${cleanRel}/dist/client.mjs`];\n }\n }\n }\n\n return paths;\n}\n\nexport function printResolutionSummary(options: ResolverOptions = {}): void {\n const resolutions = getAllPackageResolutions(options);\n const cyan = (s: string) => `\\x1b[36m${s}\\x1b[39m`;\n const green = (s: string) => `\\x1b[32m${s}\\x1b[39m`;\n const yellow = (s: string) => `\\x1b[33m${s}\\x1b[39m`;\n const gray = (s: string) => `\\x1b[90m${s}\\x1b[39m`;\n const bold = (s: string) => `\\x1b[1m${s}\\x1b[22m`;\n\n console.log(cyan(\"┌────────────────────────────────────────────────────────────────────────┐\"));\n console.log(cyan(\"│\") + bold(\" 🦀 M3RCENA RUST-STYLE SUBMODULE RESOLVER \") + cyan(\"│\"));\n console.log(cyan(\"├────────────────────────────────────────────────────────────────────────┤\"));\n\n for (const [name, res] of Object.entries(resolutions)) {\n const padName = name.padEnd(16);\n if (res.status === \"submodule\") {\n const mode = res.type === \"source\" ? yellow(\"[SOURCE]\") : green(\"[DIST]\");\n const ver = res.version ? `v${res.version}` : \"local\";\n const shortPath = res.rootDirectory ? path.basename(res.rootDirectory) : res.path;\n console.log(\n cyan(\"│\") +\n ` ${bold(padName)} -> ${green(\"submodule\")} ${mode} ${gray(ver)} ${gray(`(${shortPath})`)}`.padEnd(79) +\n cyan(\"│\")\n );\n } else if (res.status === \"npm\") {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${cyan(\"npm registry\")} ${gray(\"(node_modules)\")}`.padEnd(79) + cyan(\"│\"));\n } else {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${gray(\"not installed\")}`.padEnd(79) + cyan(\"│\"));\n }\n }\n\n console.log(cyan(\"└────────────────────────────────────────────────────────────────────────┘\"));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"resolver.cjs","names":["path","fs"],"sources":["../src/resolver.ts"],"sourcesContent":["/**\n * @m3rcena/eco - Rust-Style Submodule & Path Resolver\n *\n * Inspired by Cargo's workspace and [patch.crates-io] resolver algorithm.\n * Enables zero-friction consumption of @m3rcena packages via Git submodules,\n * local vendor paths, or standard NPM registry installs without code changes.\n *\n * @copyright 2026 M3rcena Development. All rights reserved.\n * @license Apache-2.0\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport type M3rcenaPackageName = \"@m3rcena/weky\" | \"@m3rcena/eco\" | \"@m3rcena/bridge\";\n\nexport interface PackageResolution {\n name: M3rcenaPackageName;\n status: \"submodule\" | \"npm\" | \"missing\";\n type: \"source\" | \"dist\" | \"registry\";\n path: string;\n rootDirectory?: string;\n version?: string;\n isBuilt?: boolean;\n}\n\nexport interface ResolverOptions {\n cwd?: string;\n submodulesDir?: string;\n preferSource?: boolean;\n overrides?: Partial<Record<M3rcenaPackageName, string>>;\n silent?: boolean;\n}\n\nexport interface M3rcenaResolverConfig {\n submodulesDir?: string;\n preferSource?: boolean;\n packages?: Partial<Record<M3rcenaPackageName, string>>;\n}\n\nconst KNOWN_PACKAGES: Record<M3rcenaPackageName, { aliases: string[]; envVar: string }> = {\n \"@m3rcena/weky\": {\n aliases: [\"m3rcena-weky\", \"weky\", \"weky-manager\"],\n envVar: \"M3RCENA_WEKY_PATH\",\n },\n \"@m3rcena/eco\": {\n aliases: [\"m3rcena-eco\", \"eco\", \"economy\"],\n envVar: \"M3RCENA_ECO_PATH\",\n },\n \"@m3rcena/bridge\": {\n aliases: [\"m3rcena-bridge\", \"bridge\", \"m3rcena-core\"],\n envVar: \"M3RCENA_BRIDGE_PATH\",\n },\n};\n\nconst CANDIDATE_CONTAINERS = [\n \".\",\n \"submodules\",\n \"submodule\",\n \"vendor\",\n \"packages\",\n \"libs\",\n \"modules\",\n];\n\nexport function isTypeScriptRuntime(): boolean {\n if (typeof (process as any).isBun !== \"undefined\") return true;\n if (typeof (process as any).isDeno !== \"undefined\") return true;\n const execArgv = process.execArgv.join(\" \");\n if (/tsx|ts-node|@swc\\/register|ts-loader/.test(execArgv)) return true;\n if (process.argv[1]?.endsWith(\".ts\") || process.argv[1]?.endsWith(\".mts\")) return true;\n if (process.env.M3RCENA_PREFER_SOURCE === \"true\" || process.env.M3RCENA_PREFER_SOURCE === \"1\") return true;\n return false;\n}\n\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n for (let i = 0; i < 6; i++) {\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return path.resolve(startDir);\n}\n\nexport function loadResolverConfig(cwd: string = process.cwd()): M3rcenaResolverConfig | null {\n const root = findProjectRoot(cwd);\n const resolverFile = path.join(root, \"m3rcena.resolver.json\");\n if (fs.existsSync(resolverFile)) {\n try {\n return JSON.parse(fs.readFileSync(resolverFile, \"utf-8\")) as M3rcenaResolverConfig;\n } catch {\n // Ignore\n }\n }\n\n const pkgJsonPath = path.join(root, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n if (pkg.m3rcena && typeof pkg.m3rcena === \"object\") {\n return pkg.m3rcena as M3rcenaResolverConfig;\n }\n } catch {\n // Ignore\n }\n }\n\n return null;\n}\n\nfunction inspectSubmoduleDirectory(dirPath: string, expectedName: M3rcenaPackageName): { isValid: boolean; version?: string } {\n if (!fs.existsSync(dirPath)) return { isValid: false };\n try {\n const stat = fs.statSync(dirPath);\n if (!stat.isDirectory()) return { isValid: false };\n\n const pkgPath = path.join(dirPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n const data = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (data.name === expectedName) {\n return { isValid: true, version: data.version };\n }\n }\n\n if (fs.existsSync(path.join(dirPath, \"src\", \"index.ts\"))) {\n return { isValid: true };\n }\n } catch {\n return { isValid: false };\n }\n return { isValid: false };\n}\n\nfunction resolveSubmoduleEntryPoint(dirPath: string, preferSource: boolean): { entryPath: string; type: \"source\" | \"dist\"; isBuilt: boolean } {\n const srcTs = path.join(dirPath, \"src\", \"index.ts\");\n const distMjs = path.join(dirPath, \"dist\", \"index.mjs\");\n const distCjs = path.join(dirPath, \"dist\", \"index.cjs\");\n const isBuilt = fs.existsSync(distMjs) || fs.existsSync(distCjs);\n\n if (preferSource && fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt };\n }\n\n if (fs.existsSync(distMjs)) {\n return { entryPath: distMjs, type: \"dist\", isBuilt: true };\n }\n if (fs.existsSync(distCjs)) {\n return { entryPath: distCjs, type: \"dist\", isBuilt: true };\n }\n\n if (fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt: false };\n }\n\n return { entryPath: dirPath, type: \"dist\", isBuilt };\n}\n\nexport function resolvePackage(packageName: M3rcenaPackageName, options: ResolverOptions = {}): PackageResolution {\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const cfg = loadResolverConfig(root);\n const pkgMeta = KNOWN_PACKAGES[packageName];\n\n const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();\n\n // 0. Current project check: if root itself IS the requested package\n const rootInspected = inspectSubmoduleDirectory(root, packageName);\n if (rootInspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(root, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: root,\n version: rootInspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n\n if (options.overrides?.[packageName]) {\n const customPath = path.resolve(root, options.overrides[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const envVal = process.env[pkgMeta.envVar];\n if (envVal) {\n const customPath = path.resolve(root, envVal);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n if (cfg?.packages?.[packageName]) {\n const customPath = path.resolve(root, cfg.packages[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const candidateContainers = [\n options.submodulesDir,\n cfg?.submodulesDir,\n process.env.M3RCENA_SUBMODULES_DIR,\n ...CANDIDATE_CONTAINERS,\n ].filter((c): c is string => typeof c === \"string\" && c.trim().length > 0);\n\n const searchRoots = [root, path.resolve(root, \"..\"), path.resolve(root, \"../..\")];\n\n for (const sRoot of searchRoots) {\n for (const container of candidateContainers) {\n for (const alias of pkgMeta.aliases) {\n const candidateDir = path.resolve(sRoot, container, alias);\n const inspected = inspectSubmoduleDirectory(candidateDir, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(candidateDir, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: candidateDir,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n }\n }\n\n try {\n const resolvedNpm = require.resolve(packageName, { paths: [root, process.cwd()] });\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: resolvedNpm,\n };\n } catch {\n const nmPath = path.join(root, \"node_modules\", packageName);\n if (fs.existsSync(nmPath)) {\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: nmPath,\n };\n }\n }\n\n return {\n name: packageName,\n status: \"missing\",\n type: \"registry\",\n path: packageName,\n };\n}\n\nexport function getAllPackageResolutions(options: ResolverOptions = {}): Record<M3rcenaPackageName, PackageResolution> {\n return {\n \"@m3rcena/weky\": resolvePackage(\"@m3rcena/weky\", options),\n \"@m3rcena/eco\": resolvePackage(\"@m3rcena/eco\", options),\n \"@m3rcena/bridge\": resolvePackage(\"@m3rcena/bridge\", options),\n };\n}\n\nexport function generateTsConfigPaths(options: ResolverOptions = {}): Record<string, string[]> {\n const resolutions = getAllPackageResolutions(options);\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const paths: Record<string, string[]> = {};\n\n for (const [name, res] of Object.entries(resolutions)) {\n if (res.status === \"submodule\" && res.rootDirectory) {\n const rel = path.relative(root, res.rootDirectory).replace(/\\\\/g, \"/\");\n const cleanRel = !rel || rel === \".\" ? \".\" : (rel.startsWith(\".\") ? rel : `./${rel}`);\n paths[name] = [`${cleanRel}/src`, `${cleanRel}/dist/index.mjs`, cleanRel];\n if (name === \"@m3rcena/bridge\") {\n paths[\"@m3rcena/bridge/client\"] = [`${cleanRel}/src/client`, `${cleanRel}/dist/client.mjs`];\n }\n }\n }\n\n return paths;\n}\n\nexport function printResolutionSummary(options: ResolverOptions = {}): void {\n const resolutions = getAllPackageResolutions(options);\n const cyan = (s: string) => `\\x1b[36m${s}\\x1b[39m`;\n const green = (s: string) => `\\x1b[32m${s}\\x1b[39m`;\n const yellow = (s: string) => `\\x1b[33m${s}\\x1b[39m`;\n const gray = (s: string) => `\\x1b[90m${s}\\x1b[39m`;\n const bold = (s: string) => `\\x1b[1m${s}\\x1b[22m`;\n\n console.log(cyan(\"┌────────────────────────────────────────────────────────────────────────┐\"));\n console.log(cyan(\"│\") + bold(\" 🦀 M3RCENA RUST-STYLE SUBMODULE RESOLVER \") + cyan(\"│\"));\n console.log(cyan(\"├────────────────────────────────────────────────────────────────────────┤\"));\n\n for (const [name, res] of Object.entries(resolutions)) {\n const padName = name.padEnd(16);\n if (res.status === \"submodule\") {\n const mode = res.type === \"source\" ? yellow(\"[SOURCE]\") : green(\"[DIST]\");\n const ver = res.version ? `v${res.version}` : \"local\";\n const shortPath = res.rootDirectory ? path.basename(res.rootDirectory) : res.path;\n console.log(\n cyan(\"│\") +\n ` ${bold(padName)} -> ${green(\"submodule\")} ${mode} ${gray(ver)} ${gray(`(${shortPath})`)}`.padEnd(79) +\n cyan(\"│\")\n );\n } else if (res.status === \"npm\") {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${cyan(\"npm registry\")} ${gray(\"(node_modules)\")}`.padEnd(79) + cyan(\"│\"));\n } else {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${gray(\"not installed\")}`.padEnd(79) + cyan(\"│\"));\n }\n }\n\n console.log(cyan(\"└────────────────────────────────────────────────────────────────────────┘\"));\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.cts","names":[],"sources":["../src/resolver.ts"],"mappings":";;;;;;;;;;YAcY;iBAEK;EACf,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA,YAAY,QAAQ,OAAO;EAC3B;;iBAGe;EACf;EACA;EACA,WAAW,QAAQ,OAAO;;wBA4BZ;wBAUA,gBAAgB;wBAchB,mBAAmB,eAA8B;wBAyEjD,eAAe,aAAa,oBAAoB,UAAS,kBAAuB;wBAqHhF,yBAAyB,UAAS,kBAAuB,OAAO,oBAAoB;wBAQpF,sBAAsB,UAAS,kBAAuB;wBAmBtD,uBAAuB,UAAS"}
1
+ {"version":3,"file":"resolver.d.cts","names":[],"sources":["../src/resolver.ts"],"mappings":";;;;;;;;;;YAcY;iBAEK;EACf,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA,YAAY,QAAQ,OAAO;EAC3B;;iBAGe;EACf;EACA;EACA,WAAW,QAAQ,OAAO;;wBA4BZ;wBAUA,gBAAgB;wBAchB,mBAAmB,eAA8B;wBAyEjD,eAAe,aAAa,oBAAoB,UAAS,kBAAuB;wBAoIhF,yBAAyB,UAAS,kBAAuB,OAAO,oBAAoB;wBAQpF,sBAAsB,UAAS,kBAAuB;wBAmBtD,uBAAuB,UAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.mts","names":[],"sources":["../src/resolver.ts"],"mappings":";;;;;;;;;;YAcY;iBAEK;EACf,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA,YAAY,QAAQ,OAAO;EAC3B;;iBAGe;EACf;EACA;EACA,WAAW,QAAQ,OAAO;;wBA4BZ;wBAUA,gBAAgB;wBAchB,mBAAmB,eAA8B;wBAyEjD,eAAe,aAAa,oBAAoB,UAAS,kBAAuB;wBAqHhF,yBAAyB,UAAS,kBAAuB,OAAO,oBAAoB;wBAQpF,sBAAsB,UAAS,kBAAuB;wBAmBtD,uBAAuB,UAAS"}
1
+ {"version":3,"file":"resolver.d.mts","names":[],"sources":["../src/resolver.ts"],"mappings":";;;;;;;;;;YAcY;iBAEK;EACf,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA,YAAY,QAAQ,OAAO;EAC3B;;iBAGe;EACf;EACA;EACA,WAAW,QAAQ,OAAO;;wBA4BZ;wBAUA,gBAAgB;wBAchB,mBAAmB,eAA8B;wBAyEjD,eAAe,aAAa,oBAAoB,UAAS,kBAAuB;wBAoIhF,yBAAyB,UAAS,kBAAuB,OAAO,oBAAoB;wBAQpF,sBAAsB,UAAS,kBAAuB;wBAmBtD,uBAAuB,UAAS"}
package/dist/resolver.mjs CHANGED
@@ -39,13 +39,13 @@ const KNOWN_PACKAGES = {
39
39
  }
40
40
  };
41
41
  const CANDIDATE_CONTAINERS = [
42
+ ".",
42
43
  "submodules",
43
44
  "submodule",
44
45
  "vendor",
45
46
  "packages",
46
47
  "libs",
47
- "modules",
48
- ""
48
+ "modules"
49
49
  ];
50
50
  function isTypeScriptRuntime() {
51
51
  if (typeof process.isBun !== "undefined") return true;
@@ -134,6 +134,19 @@ function resolvePackage(packageName, options = {}) {
134
134
  const cfg = loadResolverConfig(root);
135
135
  const pkgMeta = KNOWN_PACKAGES[packageName];
136
136
  const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();
137
+ const rootInspected = inspectSubmoduleDirectory(root, packageName);
138
+ if (rootInspected.isValid) {
139
+ const ep = resolveSubmoduleEntryPoint(root, preferSource);
140
+ return {
141
+ name: packageName,
142
+ status: "submodule",
143
+ type: ep.type,
144
+ path: ep.entryPath,
145
+ rootDirectory: root,
146
+ version: rootInspected.version,
147
+ isBuilt: ep.isBuilt
148
+ };
149
+ }
137
150
  if (options.overrides?.[packageName]) {
138
151
  const customPath = path.resolve(root, options.overrides[packageName]);
139
152
  const inspected = inspectSubmoduleDirectory(customPath, packageName);
@@ -188,7 +201,7 @@ function resolvePackage(packageName, options = {}) {
188
201
  cfg?.submodulesDir,
189
202
  process.env.M3RCENA_SUBMODULES_DIR,
190
203
  ...CANDIDATE_CONTAINERS
191
- ].filter(Boolean);
204
+ ].filter((c) => typeof c === "string" && c.trim().length > 0);
192
205
  const searchRoots = [
193
206
  root,
194
207
  path.resolve(root, ".."),
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.mjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["/**\n * @m3rcena/eco - Rust-Style Submodule & Path Resolver\n *\n * Inspired by Cargo's workspace and [patch.crates-io] resolver algorithm.\n * Enables zero-friction consumption of @m3rcena packages via Git submodules,\n * local vendor paths, or standard NPM registry installs without code changes.\n *\n * @copyright 2026 M3rcena Development. All rights reserved.\n * @license Apache-2.0\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport type M3rcenaPackageName = \"@m3rcena/weky\" | \"@m3rcena/eco\" | \"@m3rcena/bridge\";\n\nexport interface PackageResolution {\n name: M3rcenaPackageName;\n status: \"submodule\" | \"npm\" | \"missing\";\n type: \"source\" | \"dist\" | \"registry\";\n path: string;\n rootDirectory?: string;\n version?: string;\n isBuilt?: boolean;\n}\n\nexport interface ResolverOptions {\n cwd?: string;\n submodulesDir?: string;\n preferSource?: boolean;\n overrides?: Partial<Record<M3rcenaPackageName, string>>;\n silent?: boolean;\n}\n\nexport interface M3rcenaResolverConfig {\n submodulesDir?: string;\n preferSource?: boolean;\n packages?: Partial<Record<M3rcenaPackageName, string>>;\n}\n\nconst KNOWN_PACKAGES: Record<M3rcenaPackageName, { aliases: string[]; envVar: string }> = {\n \"@m3rcena/weky\": {\n aliases: [\"m3rcena-weky\", \"weky\", \"weky-manager\"],\n envVar: \"M3RCENA_WEKY_PATH\",\n },\n \"@m3rcena/eco\": {\n aliases: [\"m3rcena-eco\", \"eco\", \"economy\"],\n envVar: \"M3RCENA_ECO_PATH\",\n },\n \"@m3rcena/bridge\": {\n aliases: [\"m3rcena-bridge\", \"bridge\", \"m3rcena-core\"],\n envVar: \"M3RCENA_BRIDGE_PATH\",\n },\n};\n\nconst CANDIDATE_CONTAINERS = [\n \"submodules\",\n \"submodule\",\n \"vendor\",\n \"packages\",\n \"libs\",\n \"modules\",\n \"\",\n];\n\nexport function isTypeScriptRuntime(): boolean {\n if (typeof (process as any).isBun !== \"undefined\") return true;\n if (typeof (process as any).isDeno !== \"undefined\") return true;\n const execArgv = process.execArgv.join(\" \");\n if (/tsx|ts-node|@swc\\/register|ts-loader/.test(execArgv)) return true;\n if (process.argv[1]?.endsWith(\".ts\") || process.argv[1]?.endsWith(\".mts\")) return true;\n if (process.env.M3RCENA_PREFER_SOURCE === \"true\" || process.env.M3RCENA_PREFER_SOURCE === \"1\") return true;\n return false;\n}\n\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n for (let i = 0; i < 6; i++) {\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return path.resolve(startDir);\n}\n\nexport function loadResolverConfig(cwd: string = process.cwd()): M3rcenaResolverConfig | null {\n const root = findProjectRoot(cwd);\n const resolverFile = path.join(root, \"m3rcena.resolver.json\");\n if (fs.existsSync(resolverFile)) {\n try {\n return JSON.parse(fs.readFileSync(resolverFile, \"utf-8\")) as M3rcenaResolverConfig;\n } catch {\n // Ignore\n }\n }\n\n const pkgJsonPath = path.join(root, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n if (pkg.m3rcena && typeof pkg.m3rcena === \"object\") {\n return pkg.m3rcena as M3rcenaResolverConfig;\n }\n } catch {\n // Ignore\n }\n }\n\n return null;\n}\n\nfunction inspectSubmoduleDirectory(dirPath: string, expectedName: M3rcenaPackageName): { isValid: boolean; version?: string } {\n if (!fs.existsSync(dirPath)) return { isValid: false };\n try {\n const stat = fs.statSync(dirPath);\n if (!stat.isDirectory()) return { isValid: false };\n\n const pkgPath = path.join(dirPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n const data = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (data.name === expectedName) {\n return { isValid: true, version: data.version };\n }\n }\n\n if (fs.existsSync(path.join(dirPath, \"src\", \"index.ts\"))) {\n return { isValid: true };\n }\n } catch {\n return { isValid: false };\n }\n return { isValid: false };\n}\n\nfunction resolveSubmoduleEntryPoint(dirPath: string, preferSource: boolean): { entryPath: string; type: \"source\" | \"dist\"; isBuilt: boolean } {\n const srcTs = path.join(dirPath, \"src\", \"index.ts\");\n const distMjs = path.join(dirPath, \"dist\", \"index.mjs\");\n const distCjs = path.join(dirPath, \"dist\", \"index.cjs\");\n const isBuilt = fs.existsSync(distMjs) || fs.existsSync(distCjs);\n\n if (preferSource && fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt };\n }\n\n if (fs.existsSync(distMjs)) {\n return { entryPath: distMjs, type: \"dist\", isBuilt: true };\n }\n if (fs.existsSync(distCjs)) {\n return { entryPath: distCjs, type: \"dist\", isBuilt: true };\n }\n\n if (fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt: false };\n }\n\n return { entryPath: dirPath, type: \"dist\", isBuilt };\n}\n\nexport function resolvePackage(packageName: M3rcenaPackageName, options: ResolverOptions = {}): PackageResolution {\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const cfg = loadResolverConfig(root);\n const pkgMeta = KNOWN_PACKAGES[packageName];\n\n const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();\n\n if (options.overrides?.[packageName]) {\n const customPath = path.resolve(root, options.overrides[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const envVal = process.env[pkgMeta.envVar];\n if (envVal) {\n const customPath = path.resolve(root, envVal);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n if (cfg?.packages?.[packageName]) {\n const customPath = path.resolve(root, cfg.packages[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const candidateContainers = [\n options.submodulesDir,\n cfg?.submodulesDir,\n process.env.M3RCENA_SUBMODULES_DIR,\n ...CANDIDATE_CONTAINERS,\n ].filter(Boolean) as string[];\n\n const searchRoots = [root, path.resolve(root, \"..\"), path.resolve(root, \"../..\")];\n\n for (const sRoot of searchRoots) {\n for (const container of candidateContainers) {\n for (const alias of pkgMeta.aliases) {\n const candidateDir = path.resolve(sRoot, container, alias);\n const inspected = inspectSubmoduleDirectory(candidateDir, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(candidateDir, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: candidateDir,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n }\n }\n\n try {\n const resolvedNpm = require.resolve(packageName, { paths: [root, process.cwd()] });\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: resolvedNpm,\n };\n } catch {\n const nmPath = path.join(root, \"node_modules\", packageName);\n if (fs.existsSync(nmPath)) {\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: nmPath,\n };\n }\n }\n\n return {\n name: packageName,\n status: \"missing\",\n type: \"registry\",\n path: packageName,\n };\n}\n\nexport function getAllPackageResolutions(options: ResolverOptions = {}): Record<M3rcenaPackageName, PackageResolution> {\n return {\n \"@m3rcena/weky\": resolvePackage(\"@m3rcena/weky\", options),\n \"@m3rcena/eco\": resolvePackage(\"@m3rcena/eco\", options),\n \"@m3rcena/bridge\": resolvePackage(\"@m3rcena/bridge\", options),\n };\n}\n\nexport function generateTsConfigPaths(options: ResolverOptions = {}): Record<string, string[]> {\n const resolutions = getAllPackageResolutions(options);\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const paths: Record<string, string[]> = {};\n\n for (const [name, res] of Object.entries(resolutions)) {\n if (res.status === \"submodule\" && res.rootDirectory) {\n const rel = path.relative(root, res.rootDirectory).replace(/\\\\/g, \"/\");\n const cleanRel = !rel || rel === \".\" ? \".\" : (rel.startsWith(\".\") ? rel : `./${rel}`);\n paths[name] = [`${cleanRel}/src`, `${cleanRel}/dist/index.mjs`, cleanRel];\n if (name === \"@m3rcena/bridge\") {\n paths[\"@m3rcena/bridge/client\"] = [`${cleanRel}/src/client`, `${cleanRel}/dist/client.mjs`];\n }\n }\n }\n\n return paths;\n}\n\nexport function printResolutionSummary(options: ResolverOptions = {}): void {\n const resolutions = getAllPackageResolutions(options);\n const cyan = (s: string) => `\\x1b[36m${s}\\x1b[39m`;\n const green = (s: string) => `\\x1b[32m${s}\\x1b[39m`;\n const yellow = (s: string) => `\\x1b[33m${s}\\x1b[39m`;\n const gray = (s: string) => `\\x1b[90m${s}\\x1b[39m`;\n const bold = (s: string) => `\\x1b[1m${s}\\x1b[22m`;\n\n console.log(cyan(\"┌────────────────────────────────────────────────────────────────────────┐\"));\n console.log(cyan(\"│\") + bold(\" 🦀 M3RCENA RUST-STYLE SUBMODULE RESOLVER \") + cyan(\"│\"));\n console.log(cyan(\"├────────────────────────────────────────────────────────────────────────┤\"));\n\n for (const [name, res] of Object.entries(resolutions)) {\n const padName = name.padEnd(16);\n if (res.status === \"submodule\") {\n const mode = res.type === \"source\" ? yellow(\"[SOURCE]\") : green(\"[DIST]\");\n const ver = res.version ? `v${res.version}` : \"local\";\n const shortPath = res.rootDirectory ? path.basename(res.rootDirectory) : res.path;\n console.log(\n cyan(\"│\") +\n ` ${bold(padName)} -> ${green(\"submodule\")} ${mode} ${gray(ver)} ${gray(`(${shortPath})`)}`.padEnd(79) +\n cyan(\"│\")\n );\n } else if (res.status === \"npm\") {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${cyan(\"npm registry\")} ${gray(\"(node_modules)\")}`.padEnd(79) + cyan(\"│\"));\n } else {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${gray(\"not installed\")}`.padEnd(79) + cyan(\"│\"));\n }\n }\n\n console.log(cyan(\"└────────────────────────────────────────────────────────────────────────┘\"));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"resolver.mjs","names":[],"sources":["../src/resolver.ts"],"sourcesContent":["/**\n * @m3rcena/eco - Rust-Style Submodule & Path Resolver\n *\n * Inspired by Cargo's workspace and [patch.crates-io] resolver algorithm.\n * Enables zero-friction consumption of @m3rcena packages via Git submodules,\n * local vendor paths, or standard NPM registry installs without code changes.\n *\n * @copyright 2026 M3rcena Development. All rights reserved.\n * @license Apache-2.0\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport type M3rcenaPackageName = \"@m3rcena/weky\" | \"@m3rcena/eco\" | \"@m3rcena/bridge\";\n\nexport interface PackageResolution {\n name: M3rcenaPackageName;\n status: \"submodule\" | \"npm\" | \"missing\";\n type: \"source\" | \"dist\" | \"registry\";\n path: string;\n rootDirectory?: string;\n version?: string;\n isBuilt?: boolean;\n}\n\nexport interface ResolverOptions {\n cwd?: string;\n submodulesDir?: string;\n preferSource?: boolean;\n overrides?: Partial<Record<M3rcenaPackageName, string>>;\n silent?: boolean;\n}\n\nexport interface M3rcenaResolverConfig {\n submodulesDir?: string;\n preferSource?: boolean;\n packages?: Partial<Record<M3rcenaPackageName, string>>;\n}\n\nconst KNOWN_PACKAGES: Record<M3rcenaPackageName, { aliases: string[]; envVar: string }> = {\n \"@m3rcena/weky\": {\n aliases: [\"m3rcena-weky\", \"weky\", \"weky-manager\"],\n envVar: \"M3RCENA_WEKY_PATH\",\n },\n \"@m3rcena/eco\": {\n aliases: [\"m3rcena-eco\", \"eco\", \"economy\"],\n envVar: \"M3RCENA_ECO_PATH\",\n },\n \"@m3rcena/bridge\": {\n aliases: [\"m3rcena-bridge\", \"bridge\", \"m3rcena-core\"],\n envVar: \"M3RCENA_BRIDGE_PATH\",\n },\n};\n\nconst CANDIDATE_CONTAINERS = [\n \".\",\n \"submodules\",\n \"submodule\",\n \"vendor\",\n \"packages\",\n \"libs\",\n \"modules\",\n];\n\nexport function isTypeScriptRuntime(): boolean {\n if (typeof (process as any).isBun !== \"undefined\") return true;\n if (typeof (process as any).isDeno !== \"undefined\") return true;\n const execArgv = process.execArgv.join(\" \");\n if (/tsx|ts-node|@swc\\/register|ts-loader/.test(execArgv)) return true;\n if (process.argv[1]?.endsWith(\".ts\") || process.argv[1]?.endsWith(\".mts\")) return true;\n if (process.env.M3RCENA_PREFER_SOURCE === \"true\" || process.env.M3RCENA_PREFER_SOURCE === \"1\") return true;\n return false;\n}\n\nexport function findProjectRoot(startDir: string = process.cwd()): string {\n let current = path.resolve(startDir);\n for (let i = 0; i < 6; i++) {\n const pkgJson = path.join(current, \"package.json\");\n if (fs.existsSync(pkgJson)) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return path.resolve(startDir);\n}\n\nexport function loadResolverConfig(cwd: string = process.cwd()): M3rcenaResolverConfig | null {\n const root = findProjectRoot(cwd);\n const resolverFile = path.join(root, \"m3rcena.resolver.json\");\n if (fs.existsSync(resolverFile)) {\n try {\n return JSON.parse(fs.readFileSync(resolverFile, \"utf-8\")) as M3rcenaResolverConfig;\n } catch {\n // Ignore\n }\n }\n\n const pkgJsonPath = path.join(root, \"package.json\");\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf-8\"));\n if (pkg.m3rcena && typeof pkg.m3rcena === \"object\") {\n return pkg.m3rcena as M3rcenaResolverConfig;\n }\n } catch {\n // Ignore\n }\n }\n\n return null;\n}\n\nfunction inspectSubmoduleDirectory(dirPath: string, expectedName: M3rcenaPackageName): { isValid: boolean; version?: string } {\n if (!fs.existsSync(dirPath)) return { isValid: false };\n try {\n const stat = fs.statSync(dirPath);\n if (!stat.isDirectory()) return { isValid: false };\n\n const pkgPath = path.join(dirPath, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n const data = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\"));\n if (data.name === expectedName) {\n return { isValid: true, version: data.version };\n }\n }\n\n if (fs.existsSync(path.join(dirPath, \"src\", \"index.ts\"))) {\n return { isValid: true };\n }\n } catch {\n return { isValid: false };\n }\n return { isValid: false };\n}\n\nfunction resolveSubmoduleEntryPoint(dirPath: string, preferSource: boolean): { entryPath: string; type: \"source\" | \"dist\"; isBuilt: boolean } {\n const srcTs = path.join(dirPath, \"src\", \"index.ts\");\n const distMjs = path.join(dirPath, \"dist\", \"index.mjs\");\n const distCjs = path.join(dirPath, \"dist\", \"index.cjs\");\n const isBuilt = fs.existsSync(distMjs) || fs.existsSync(distCjs);\n\n if (preferSource && fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt };\n }\n\n if (fs.existsSync(distMjs)) {\n return { entryPath: distMjs, type: \"dist\", isBuilt: true };\n }\n if (fs.existsSync(distCjs)) {\n return { entryPath: distCjs, type: \"dist\", isBuilt: true };\n }\n\n if (fs.existsSync(srcTs)) {\n return { entryPath: srcTs, type: \"source\", isBuilt: false };\n }\n\n return { entryPath: dirPath, type: \"dist\", isBuilt };\n}\n\nexport function resolvePackage(packageName: M3rcenaPackageName, options: ResolverOptions = {}): PackageResolution {\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const cfg = loadResolverConfig(root);\n const pkgMeta = KNOWN_PACKAGES[packageName];\n\n const preferSource = options.preferSource ?? cfg?.preferSource ?? isTypeScriptRuntime();\n\n // 0. Current project check: if root itself IS the requested package\n const rootInspected = inspectSubmoduleDirectory(root, packageName);\n if (rootInspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(root, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: root,\n version: rootInspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n\n if (options.overrides?.[packageName]) {\n const customPath = path.resolve(root, options.overrides[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const envVal = process.env[pkgMeta.envVar];\n if (envVal) {\n const customPath = path.resolve(root, envVal);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n if (cfg?.packages?.[packageName]) {\n const customPath = path.resolve(root, cfg.packages[packageName]!);\n const inspected = inspectSubmoduleDirectory(customPath, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(customPath, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: customPath,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n\n const candidateContainers = [\n options.submodulesDir,\n cfg?.submodulesDir,\n process.env.M3RCENA_SUBMODULES_DIR,\n ...CANDIDATE_CONTAINERS,\n ].filter((c): c is string => typeof c === \"string\" && c.trim().length > 0);\n\n const searchRoots = [root, path.resolve(root, \"..\"), path.resolve(root, \"../..\")];\n\n for (const sRoot of searchRoots) {\n for (const container of candidateContainers) {\n for (const alias of pkgMeta.aliases) {\n const candidateDir = path.resolve(sRoot, container, alias);\n const inspected = inspectSubmoduleDirectory(candidateDir, packageName);\n if (inspected.isValid) {\n const ep = resolveSubmoduleEntryPoint(candidateDir, preferSource);\n return {\n name: packageName,\n status: \"submodule\",\n type: ep.type,\n path: ep.entryPath,\n rootDirectory: candidateDir,\n version: inspected.version,\n isBuilt: ep.isBuilt,\n };\n }\n }\n }\n }\n\n try {\n const resolvedNpm = require.resolve(packageName, { paths: [root, process.cwd()] });\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: resolvedNpm,\n };\n } catch {\n const nmPath = path.join(root, \"node_modules\", packageName);\n if (fs.existsSync(nmPath)) {\n return {\n name: packageName,\n status: \"npm\",\n type: \"registry\",\n path: nmPath,\n };\n }\n }\n\n return {\n name: packageName,\n status: \"missing\",\n type: \"registry\",\n path: packageName,\n };\n}\n\nexport function getAllPackageResolutions(options: ResolverOptions = {}): Record<M3rcenaPackageName, PackageResolution> {\n return {\n \"@m3rcena/weky\": resolvePackage(\"@m3rcena/weky\", options),\n \"@m3rcena/eco\": resolvePackage(\"@m3rcena/eco\", options),\n \"@m3rcena/bridge\": resolvePackage(\"@m3rcena/bridge\", options),\n };\n}\n\nexport function generateTsConfigPaths(options: ResolverOptions = {}): Record<string, string[]> {\n const resolutions = getAllPackageResolutions(options);\n const root = findProjectRoot(options.cwd ?? process.cwd());\n const paths: Record<string, string[]> = {};\n\n for (const [name, res] of Object.entries(resolutions)) {\n if (res.status === \"submodule\" && res.rootDirectory) {\n const rel = path.relative(root, res.rootDirectory).replace(/\\\\/g, \"/\");\n const cleanRel = !rel || rel === \".\" ? \".\" : (rel.startsWith(\".\") ? rel : `./${rel}`);\n paths[name] = [`${cleanRel}/src`, `${cleanRel}/dist/index.mjs`, cleanRel];\n if (name === \"@m3rcena/bridge\") {\n paths[\"@m3rcena/bridge/client\"] = [`${cleanRel}/src/client`, `${cleanRel}/dist/client.mjs`];\n }\n }\n }\n\n return paths;\n}\n\nexport function printResolutionSummary(options: ResolverOptions = {}): void {\n const resolutions = getAllPackageResolutions(options);\n const cyan = (s: string) => `\\x1b[36m${s}\\x1b[39m`;\n const green = (s: string) => `\\x1b[32m${s}\\x1b[39m`;\n const yellow = (s: string) => `\\x1b[33m${s}\\x1b[39m`;\n const gray = (s: string) => `\\x1b[90m${s}\\x1b[39m`;\n const bold = (s: string) => `\\x1b[1m${s}\\x1b[22m`;\n\n console.log(cyan(\"┌────────────────────────────────────────────────────────────────────────┐\"));\n console.log(cyan(\"│\") + bold(\" 🦀 M3RCENA RUST-STYLE SUBMODULE RESOLVER \") + cyan(\"│\"));\n console.log(cyan(\"├────────────────────────────────────────────────────────────────────────┤\"));\n\n for (const [name, res] of Object.entries(resolutions)) {\n const padName = name.padEnd(16);\n if (res.status === \"submodule\") {\n const mode = res.type === \"source\" ? yellow(\"[SOURCE]\") : green(\"[DIST]\");\n const ver = res.version ? `v${res.version}` : \"local\";\n const shortPath = res.rootDirectory ? path.basename(res.rootDirectory) : res.path;\n console.log(\n cyan(\"│\") +\n ` ${bold(padName)} -> ${green(\"submodule\")} ${mode} ${gray(ver)} ${gray(`(${shortPath})`)}`.padEnd(79) +\n cyan(\"│\")\n );\n } else if (res.status === \"npm\") {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${cyan(\"npm registry\")} ${gray(\"(node_modules)\")}`.padEnd(79) + cyan(\"│\"));\n } else {\n console.log(cyan(\"│\") + ` ${bold(padName)} -> ${gray(\"not installed\")}`.padEnd(79) + cyan(\"│\"));\n }\n }\n\n console.log(cyan(\"└────────────────────────────────────────────────────────────────────────┘\"));\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m3rcena/eco",
3
- "version": "14.28.1-dev.0",
3
+ "version": "14.28.1",
4
4
  "description": "The ultimate Discord.js v14 economy engine. Dual wallet/bank, career jobs, items & inventory, businesses, interactive casino gambling, robbery, market trading, and web dashboard bridge.",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -83,9 +83,9 @@
83
83
  "node": ">=22.0.0"
84
84
  },
85
85
  "dependencies": {
86
- "@m3rcena/bridge": "^14.28.1-dev.0",
86
+ "@m3rcena/bridge": "^14.28.1",
87
87
  "@napi-rs/canvas": "^0.1.68",
88
- "discord.js": "^14.28.0"
88
+ "discord.js": "^14.28.1"
89
89
  },
90
90
  "devDependencies": {
91
91
  "@types/node": "^26.6.6",