everything-dev 1.33.6 → 1.35.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.
Files changed (70) hide show
  1. package/dist/api-contract.cjs +48 -68
  2. package/dist/api-contract.cjs.map +1 -1
  3. package/dist/api-contract.mjs +48 -68
  4. package/dist/api-contract.mjs.map +1 -1
  5. package/dist/cli/init.cjs +64 -41
  6. package/dist/cli/init.cjs.map +1 -1
  7. package/dist/cli/init.d.cts.map +1 -1
  8. package/dist/cli/init.d.mts.map +1 -1
  9. package/dist/cli/init.mjs +65 -42
  10. package/dist/cli/init.mjs.map +1 -1
  11. package/dist/cli/sync.cjs +5 -0
  12. package/dist/cli/sync.cjs.map +1 -1
  13. package/dist/cli/sync.mjs +5 -0
  14. package/dist/cli/sync.mjs.map +1 -1
  15. package/dist/cli/upgrade.cjs +6 -3
  16. package/dist/cli/upgrade.cjs.map +1 -1
  17. package/dist/cli/upgrade.mjs +6 -3
  18. package/dist/cli/upgrade.mjs.map +1 -1
  19. package/dist/config.cjs +12 -4
  20. package/dist/config.cjs.map +1 -1
  21. package/dist/config.d.cts.map +1 -1
  22. package/dist/config.d.mts.map +1 -1
  23. package/dist/config.mjs +12 -4
  24. package/dist/config.mjs.map +1 -1
  25. package/dist/contract.d.cts +62 -46
  26. package/dist/contract.d.cts.map +1 -1
  27. package/dist/contract.d.mts +62 -46
  28. package/dist/contract.d.mts.map +1 -1
  29. package/dist/index.cjs +1 -0
  30. package/dist/index.d.cts +2 -2
  31. package/dist/index.d.mts +2 -2
  32. package/dist/index.mjs +2 -2
  33. package/dist/merge.cjs +1 -2
  34. package/dist/merge.cjs.map +1 -1
  35. package/dist/merge.d.cts +1 -1
  36. package/dist/merge.d.cts.map +1 -1
  37. package/dist/merge.d.mts +1 -1
  38. package/dist/merge.d.mts.map +1 -1
  39. package/dist/merge.mjs +1 -2
  40. package/dist/merge.mjs.map +1 -1
  41. package/dist/near-cli.cjs +0 -23
  42. package/dist/near-cli.cjs.map +1 -1
  43. package/dist/near-cli.mjs +0 -23
  44. package/dist/near-cli.mjs.map +1 -1
  45. package/dist/plugin.cjs +9 -3
  46. package/dist/plugin.cjs.map +1 -1
  47. package/dist/plugin.d.cts +72 -50
  48. package/dist/plugin.d.mts +72 -50
  49. package/dist/plugin.mjs +9 -3
  50. package/dist/plugin.mjs.map +1 -1
  51. package/dist/shared-deps.cjs +201 -0
  52. package/dist/shared-deps.cjs.map +1 -0
  53. package/dist/shared-deps.mjs +200 -0
  54. package/dist/shared-deps.mjs.map +1 -0
  55. package/dist/types.cjs +14 -12
  56. package/dist/types.cjs.map +1 -1
  57. package/dist/types.d.cts +88 -40
  58. package/dist/types.d.cts.map +1 -1
  59. package/dist/types.d.mts +88 -40
  60. package/dist/types.d.mts.map +1 -1
  61. package/dist/types.mjs +14 -13
  62. package/dist/types.mjs.map +1 -1
  63. package/package.json +4 -4
  64. package/skills/extends-config/SKILL.md +7 -8
  65. package/skills/init-upgrade/SKILL.md +5 -2
  66. package/skills/publish-sync/SKILL.md +1 -1
  67. package/dist/shared.cjs +0 -155
  68. package/dist/shared.cjs.map +0 -1
  69. package/dist/shared.mjs +0 -154
  70. package/dist/shared.mjs.map +0 -1
package/dist/shared.cjs DELETED
@@ -1,155 +0,0 @@
1
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
- const require_merge = require('./merge.cjs');
3
- const require_types = require('./types.cjs');
4
- let node_fs = require("node:fs");
5
- let node_path = require("node:path");
6
- let node_crypto = require("node:crypto");
7
-
8
- //#region src/shared.ts
9
- function sha256(input) {
10
- return (0, node_crypto.createHash)("sha256").update(input).digest("hex");
11
- }
12
- function extractSemverExact(input) {
13
- if (typeof input !== "string") return null;
14
- const match = input.match(/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/);
15
- return match ? match[0] : null;
16
- }
17
- function caretRange(version) {
18
- return `^${version}`;
19
- }
20
- function stableDepsObject(deps) {
21
- const keys = Object.keys(deps).sort((a, b) => a.localeCompare(b));
22
- const out = {};
23
- for (const k of keys) out[k] = deps[k];
24
- return out;
25
- }
26
- function writeFileIfChanged(filePath, nextContent) {
27
- try {
28
- if ((0, node_fs.readFileSync)(filePath, "utf-8") === nextContent) return false;
29
- } catch {}
30
- (0, node_fs.writeFileSync)(filePath, nextContent);
31
- return true;
32
- }
33
- function fingerprintResolved(deps) {
34
- const stable = stableDepsObject(deps);
35
- return sha256(JSON.stringify(stable));
36
- }
37
- function getSharedUiDeps(bosConfig) {
38
- return (bosConfig.shared ?? {}).ui ?? {};
39
- }
40
- async function syncAndGenerateSharedUi(opts) {
41
- const bosConfigPath = (0, node_path.join)(opts.configDir, "bos.config.json");
42
- const resolvedConfigPath = (0, node_path.join)(opts.configDir, ".bos", "bos.resolved-config.json");
43
- const packageJsonPath = (0, node_path.join)(opts.configDir, "package.json");
44
- const generatedPath = (0, node_path.join)(opts.configDir, ".bos", "generated", "shared-ui.json");
45
- let bosConfig;
46
- if (opts.bosConfig) bosConfig = opts.bosConfig;
47
- else {
48
- const raw = JSON.parse((0, node_fs.readFileSync)(bosConfigPath, "utf-8"));
49
- bosConfig = require_types.BosConfigSchema.parse(raw);
50
- }
51
- let pkgJson = {};
52
- try {
53
- pkgJson = JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8"));
54
- } catch {}
55
- const originalBos = JSON.stringify(bosConfig);
56
- const originalPkg = JSON.stringify(pkgJson);
57
- const catalog = pkgJson?.workspaces?.catalog ?? {};
58
- const sharedUi = getSharedUiDeps(bosConfig);
59
- const mode = opts.hostMode === "local" ? "catalog->bos" : "bos->catalog";
60
- if (mode === "catalog->bos") for (const [name, cfg] of Object.entries(sharedUi)) {
61
- const dep = cfg;
62
- const version = catalog[name] ?? extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);
63
- if (!version) continue;
64
- dep.version = version;
65
- dep.requiredVersion = caretRange(version);
66
- dep.shareScope = dep.shareScope ?? "default";
67
- }
68
- else {
69
- for (const [name, cfg] of Object.entries(sharedUi)) {
70
- const dep = cfg;
71
- const version = extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);
72
- if (!version) continue;
73
- dep.version = version;
74
- dep.requiredVersion = caretRange(version);
75
- dep.shareScope = dep.shareScope ?? "default";
76
- if (catalog[name] !== version) catalog[name] = version;
77
- }
78
- if (!pkgJson.workspaces) pkgJson.workspaces = {
79
- packages: [],
80
- catalog: {}
81
- };
82
- pkgJson.workspaces.catalog = catalog;
83
- }
84
- const nextBos = JSON.stringify(bosConfig);
85
- const nextPkg = JSON.stringify(pkgJson);
86
- const bosConfigChanged = nextBos !== originalBos;
87
- const catalogChanged = nextPkg !== originalPkg;
88
- if (bosConfigChanged) if (mode === "catalog->bos") {
89
- const resolvedDir = (0, node_path.dirname)(resolvedConfigPath);
90
- if (!(0, node_fs.existsSync)(resolvedDir)) (0, node_fs.mkdirSync)(resolvedDir, { recursive: true });
91
- const ordered = require_merge.rebuildOrderedConfig(bosConfig);
92
- const resolvedOutput = {
93
- _resolved: {
94
- env: opts.env ?? "development",
95
- resolvedAt: (/* @__PURE__ */ new Date()).toISOString(),
96
- extendsChain: opts.extendsChain ?? [],
97
- source: "shared-sync"
98
- },
99
- ...ordered
100
- };
101
- writeFileIfChanged(resolvedConfigPath, `${JSON.stringify(resolvedOutput, null, 2)}\n`);
102
- } else writeFileIfChanged(bosConfigPath, `${JSON.stringify(bosConfig, null, 2)}\n`);
103
- if (catalogChanged) writeFileIfChanged(packageJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`);
104
- const resolvedDeps = {};
105
- for (const [name, cfg] of Object.entries(getSharedUiDeps(bosConfig))) {
106
- const version = catalog[name] ?? extractSemverExact(cfg.version) ?? extractSemverExact(cfg.requiredVersion);
107
- if (!version) continue;
108
- resolvedDeps[name] = {
109
- name,
110
- version,
111
- requiredVersion: caretRange(version),
112
- shareScope: cfg.shareScope ?? "default",
113
- singleton: cfg.singleton ?? false,
114
- eager: cfg.eager ?? false,
115
- strictVersion: cfg.strictVersion ?? false
116
- };
117
- }
118
- const stableResolvedDeps = stableDepsObject(resolvedDeps);
119
- const resolved = {
120
- deps: stableResolvedDeps,
121
- fingerprintSha256: fingerprintResolved(stableResolvedDeps)
122
- };
123
- const nextGenerated = {
124
- schemaVersion: 1,
125
- kind: "everything-dev/shared-ui",
126
- generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
127
- ui: {
128
- deps: stableResolvedDeps,
129
- fingerprintSha256: resolved.fingerprintSha256
130
- },
131
- inputs: {
132
- mode,
133
- hostMode: opts.hostMode
134
- }
135
- };
136
- let prevFingerprint = null;
137
- try {
138
- prevFingerprint = JSON.parse((0, node_fs.readFileSync)(generatedPath, "utf-8"))?.ui?.fingerprintSha256 ?? null;
139
- } catch {}
140
- (0, node_fs.mkdirSync)((0, node_path.dirname)(generatedPath), { recursive: true });
141
- writeFileIfChanged(generatedPath, `${JSON.stringify(nextGenerated, null, 2)}\n`);
142
- const generatedChanged = prevFingerprint !== nextGenerated.ui.fingerprintSha256;
143
- return {
144
- mode,
145
- hostMode: opts.hostMode,
146
- bosConfigChanged,
147
- catalogChanged,
148
- generatedChanged,
149
- resolved
150
- };
151
- }
152
-
153
- //#endregion
154
- exports.syncAndGenerateSharedUi = syncAndGenerateSharedUi;
155
- //# sourceMappingURL=shared.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.cjs","names":["BosConfigSchema","rebuildOrderedConfig"],"sources":["../src/shared.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { type BosEnv, type ResolvedConfigMeta, rebuildOrderedConfig } from \"./merge\";\nimport type { BosConfig, SharedDepConfig } from \"./types\";\nimport { BosConfigSchema } from \"./types\";\n\ninterface PackageJson {\n name?: string;\n private?: boolean;\n version?: string;\n workspaces?: {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n}\n\nexport interface SharedUiResolvedDep {\n name: string;\n version: string;\n requiredVersion: string;\n shareScope: string;\n singleton: boolean;\n eager: boolean;\n strictVersion: boolean;\n}\n\nexport interface SharedUiResolved {\n deps: Record<string, SharedUiResolvedDep>;\n fingerprintSha256: string;\n}\n\nexport interface SharedSyncResult {\n mode: \"catalog->bos\" | \"bos->catalog\";\n hostMode: \"local\" | \"remote\";\n bosConfigChanged: boolean;\n catalogChanged: boolean;\n generatedChanged: boolean;\n resolved: SharedUiResolved;\n}\n\nfunction sha256(input: string): string {\n return createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nfunction extractSemverExact(input: unknown): string | null {\n if (typeof input !== \"string\") return null;\n const match = input.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n return match ? match[0] : null;\n}\n\nfunction caretRange(version: string): string {\n return `^${version}`;\n}\n\nfunction stableDepsObject(\n deps: Record<string, SharedUiResolvedDep>,\n): Record<string, SharedUiResolvedDep> {\n const keys = Object.keys(deps).sort((a, b) => a.localeCompare(b));\n const out: Record<string, SharedUiResolvedDep> = {};\n for (const k of keys) out[k] = deps[k]!;\n return out;\n}\n\nfunction writeFileIfChanged(filePath: string, nextContent: string): boolean {\n try {\n const current = readFileSync(filePath, \"utf-8\");\n if (current === nextContent) return false;\n } catch {\n // ignore\n }\n\n writeFileSync(filePath, nextContent);\n return true;\n}\n\nfunction fingerprintResolved(deps: Record<string, SharedUiResolvedDep>): string {\n const stable = stableDepsObject(deps);\n return sha256(JSON.stringify(stable));\n}\n\nfunction getSharedUiDeps(bosConfig: BosConfig): Record<string, SharedDepConfig> {\n const shared = bosConfig.shared ?? {};\n const ui = shared.ui ?? {};\n return ui;\n}\n\nexport async function syncAndGenerateSharedUi(opts: {\n configDir: string;\n hostMode: \"local\" | \"remote\";\n bosConfig?: BosConfig;\n env?: BosEnv;\n extendsChain?: string[];\n}): Promise<SharedSyncResult> {\n const bosConfigPath = join(opts.configDir, \"bos.config.json\");\n const resolvedConfigPath = join(opts.configDir, \".bos\", \"bos.resolved-config.json\");\n const packageJsonPath = join(opts.configDir, \"package.json\");\n const generatedPath = join(opts.configDir, \".bos\", \"generated\", \"shared-ui.json\");\n\n let bosConfig: BosConfig;\n if (opts.bosConfig) {\n bosConfig = opts.bosConfig;\n } else {\n const raw = JSON.parse(readFileSync(bosConfigPath, \"utf-8\")) as Record<string, unknown>;\n bosConfig = BosConfigSchema.parse(raw);\n }\n let pkgJson: PackageJson = {};\n try {\n pkgJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as PackageJson;\n } catch {\n // package.json might not exist\n }\n\n const originalBos = JSON.stringify(bosConfig);\n const originalPkg = JSON.stringify(pkgJson);\n\n const catalog = pkgJson?.workspaces?.catalog ?? {};\n const sharedUi = getSharedUiDeps(bosConfig);\n\n const mode = opts.hostMode === \"local\" ? \"catalog->bos\" : \"bos->catalog\";\n\n if (mode === \"catalog->bos\") {\n for (const [name, cfg] of Object.entries(sharedUi)) {\n const dep = cfg as SharedDepConfig;\n const version =\n catalog[name] ?? extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);\n if (!version) continue;\n dep.version = version;\n dep.requiredVersion = caretRange(version);\n dep.shareScope = dep.shareScope ?? \"default\";\n }\n } else {\n for (const [name, cfg] of Object.entries(sharedUi)) {\n const dep = cfg as SharedDepConfig;\n const version = extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);\n if (!version) continue;\n dep.version = version;\n dep.requiredVersion = caretRange(version);\n dep.shareScope = dep.shareScope ?? \"default\";\n if (catalog[name] !== version) {\n catalog[name] = version;\n }\n }\n if (!pkgJson.workspaces) pkgJson.workspaces = { packages: [], catalog: {} };\n pkgJson.workspaces.catalog = catalog;\n }\n\n const nextBos = JSON.stringify(bosConfig);\n const nextPkg = JSON.stringify(pkgJson);\n const bosConfigChanged = nextBos !== originalBos;\n const catalogChanged = nextPkg !== originalPkg;\n\n if (bosConfigChanged) {\n if (mode === \"catalog->bos\") {\n const resolvedDir = dirname(resolvedConfigPath);\n if (!existsSync(resolvedDir)) {\n mkdirSync(resolvedDir, { recursive: true });\n }\n const ordered = rebuildOrderedConfig(bosConfig);\n const meta: ResolvedConfigMeta = {\n env: opts.env ?? \"development\",\n resolvedAt: new Date().toISOString(),\n extendsChain: opts.extendsChain ?? [],\n source: \"shared-sync\",\n };\n const resolvedOutput = {\n _resolved: meta,\n ...ordered,\n };\n writeFileIfChanged(resolvedConfigPath, `${JSON.stringify(resolvedOutput, null, 2)}\\n`);\n } else {\n writeFileIfChanged(bosConfigPath, `${JSON.stringify(bosConfig, null, 2)}\\n`);\n }\n }\n if (catalogChanged) {\n writeFileIfChanged(packageJsonPath, `${JSON.stringify(pkgJson, null, 2)}\\n`);\n }\n\n const resolvedDeps: Record<string, SharedUiResolvedDep> = {};\n for (const [name, cfg] of Object.entries(getSharedUiDeps(bosConfig))) {\n const version =\n catalog[name] ?? extractSemverExact(cfg.version) ?? extractSemverExact(cfg.requiredVersion);\n if (!version) continue;\n resolvedDeps[name] = {\n name,\n version,\n requiredVersion: caretRange(version),\n shareScope: cfg.shareScope ?? \"default\",\n singleton: cfg.singleton ?? false,\n eager: cfg.eager ?? false,\n strictVersion: cfg.strictVersion ?? false,\n };\n }\n\n const stableResolvedDeps = stableDepsObject(resolvedDeps);\n const resolved: SharedUiResolved = {\n deps: stableResolvedDeps,\n fingerprintSha256: fingerprintResolved(stableResolvedDeps),\n };\n\n const nextGenerated = {\n schemaVersion: 1,\n kind: \"everything-dev/shared-ui\",\n generatedAt: new Date().toISOString(),\n ui: {\n deps: stableResolvedDeps,\n fingerprintSha256: resolved.fingerprintSha256,\n },\n inputs: {\n mode,\n hostMode: opts.hostMode,\n },\n };\n\n let prevFingerprint: string | null = null;\n try {\n const prev = JSON.parse(readFileSync(generatedPath, \"utf-8\"));\n prevFingerprint = prev?.ui?.fingerprintSha256 ?? null;\n } catch {\n // ignore\n }\n\n mkdirSync(dirname(generatedPath), { recursive: true });\n writeFileIfChanged(generatedPath, `${JSON.stringify(nextGenerated, null, 2)}\\n`);\n\n const generatedChanged = prevFingerprint !== nextGenerated.ui.fingerprintSha256;\n\n return {\n mode,\n hostMode: opts.hostMode,\n bosConfigChanged,\n catalogChanged,\n generatedChanged,\n resolved,\n };\n}\n\nexport function loadGeneratedSharedUi(configDir: string): SharedUiResolved | null {\n const generatedPath = join(configDir, \".bos\", \"generated\", \"shared-ui.json\");\n try {\n const content = JSON.parse(readFileSync(generatedPath, \"utf-8\"));\n return content?.ui ?? null;\n } catch {\n return null;\n }\n}\n"],"mappings":"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"}
package/dist/shared.mjs DELETED
@@ -1,154 +0,0 @@
1
- import { rebuildOrderedConfig } from "./merge.mjs";
2
- import { BosConfigSchema } from "./types.mjs";
3
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
- import { dirname, join } from "node:path";
5
- import { createHash } from "node:crypto";
6
-
7
- //#region src/shared.ts
8
- function sha256(input) {
9
- return createHash("sha256").update(input).digest("hex");
10
- }
11
- function extractSemverExact(input) {
12
- if (typeof input !== "string") return null;
13
- const match = input.match(/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/);
14
- return match ? match[0] : null;
15
- }
16
- function caretRange(version) {
17
- return `^${version}`;
18
- }
19
- function stableDepsObject(deps) {
20
- const keys = Object.keys(deps).sort((a, b) => a.localeCompare(b));
21
- const out = {};
22
- for (const k of keys) out[k] = deps[k];
23
- return out;
24
- }
25
- function writeFileIfChanged(filePath, nextContent) {
26
- try {
27
- if (readFileSync(filePath, "utf-8") === nextContent) return false;
28
- } catch {}
29
- writeFileSync(filePath, nextContent);
30
- return true;
31
- }
32
- function fingerprintResolved(deps) {
33
- const stable = stableDepsObject(deps);
34
- return sha256(JSON.stringify(stable));
35
- }
36
- function getSharedUiDeps(bosConfig) {
37
- return (bosConfig.shared ?? {}).ui ?? {};
38
- }
39
- async function syncAndGenerateSharedUi(opts) {
40
- const bosConfigPath = join(opts.configDir, "bos.config.json");
41
- const resolvedConfigPath = join(opts.configDir, ".bos", "bos.resolved-config.json");
42
- const packageJsonPath = join(opts.configDir, "package.json");
43
- const generatedPath = join(opts.configDir, ".bos", "generated", "shared-ui.json");
44
- let bosConfig;
45
- if (opts.bosConfig) bosConfig = opts.bosConfig;
46
- else {
47
- const raw = JSON.parse(readFileSync(bosConfigPath, "utf-8"));
48
- bosConfig = BosConfigSchema.parse(raw);
49
- }
50
- let pkgJson = {};
51
- try {
52
- pkgJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
53
- } catch {}
54
- const originalBos = JSON.stringify(bosConfig);
55
- const originalPkg = JSON.stringify(pkgJson);
56
- const catalog = pkgJson?.workspaces?.catalog ?? {};
57
- const sharedUi = getSharedUiDeps(bosConfig);
58
- const mode = opts.hostMode === "local" ? "catalog->bos" : "bos->catalog";
59
- if (mode === "catalog->bos") for (const [name, cfg] of Object.entries(sharedUi)) {
60
- const dep = cfg;
61
- const version = catalog[name] ?? extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);
62
- if (!version) continue;
63
- dep.version = version;
64
- dep.requiredVersion = caretRange(version);
65
- dep.shareScope = dep.shareScope ?? "default";
66
- }
67
- else {
68
- for (const [name, cfg] of Object.entries(sharedUi)) {
69
- const dep = cfg;
70
- const version = extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);
71
- if (!version) continue;
72
- dep.version = version;
73
- dep.requiredVersion = caretRange(version);
74
- dep.shareScope = dep.shareScope ?? "default";
75
- if (catalog[name] !== version) catalog[name] = version;
76
- }
77
- if (!pkgJson.workspaces) pkgJson.workspaces = {
78
- packages: [],
79
- catalog: {}
80
- };
81
- pkgJson.workspaces.catalog = catalog;
82
- }
83
- const nextBos = JSON.stringify(bosConfig);
84
- const nextPkg = JSON.stringify(pkgJson);
85
- const bosConfigChanged = nextBos !== originalBos;
86
- const catalogChanged = nextPkg !== originalPkg;
87
- if (bosConfigChanged) if (mode === "catalog->bos") {
88
- const resolvedDir = dirname(resolvedConfigPath);
89
- if (!existsSync(resolvedDir)) mkdirSync(resolvedDir, { recursive: true });
90
- const ordered = rebuildOrderedConfig(bosConfig);
91
- const resolvedOutput = {
92
- _resolved: {
93
- env: opts.env ?? "development",
94
- resolvedAt: (/* @__PURE__ */ new Date()).toISOString(),
95
- extendsChain: opts.extendsChain ?? [],
96
- source: "shared-sync"
97
- },
98
- ...ordered
99
- };
100
- writeFileIfChanged(resolvedConfigPath, `${JSON.stringify(resolvedOutput, null, 2)}\n`);
101
- } else writeFileIfChanged(bosConfigPath, `${JSON.stringify(bosConfig, null, 2)}\n`);
102
- if (catalogChanged) writeFileIfChanged(packageJsonPath, `${JSON.stringify(pkgJson, null, 2)}\n`);
103
- const resolvedDeps = {};
104
- for (const [name, cfg] of Object.entries(getSharedUiDeps(bosConfig))) {
105
- const version = catalog[name] ?? extractSemverExact(cfg.version) ?? extractSemverExact(cfg.requiredVersion);
106
- if (!version) continue;
107
- resolvedDeps[name] = {
108
- name,
109
- version,
110
- requiredVersion: caretRange(version),
111
- shareScope: cfg.shareScope ?? "default",
112
- singleton: cfg.singleton ?? false,
113
- eager: cfg.eager ?? false,
114
- strictVersion: cfg.strictVersion ?? false
115
- };
116
- }
117
- const stableResolvedDeps = stableDepsObject(resolvedDeps);
118
- const resolved = {
119
- deps: stableResolvedDeps,
120
- fingerprintSha256: fingerprintResolved(stableResolvedDeps)
121
- };
122
- const nextGenerated = {
123
- schemaVersion: 1,
124
- kind: "everything-dev/shared-ui",
125
- generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
126
- ui: {
127
- deps: stableResolvedDeps,
128
- fingerprintSha256: resolved.fingerprintSha256
129
- },
130
- inputs: {
131
- mode,
132
- hostMode: opts.hostMode
133
- }
134
- };
135
- let prevFingerprint = null;
136
- try {
137
- prevFingerprint = JSON.parse(readFileSync(generatedPath, "utf-8"))?.ui?.fingerprintSha256 ?? null;
138
- } catch {}
139
- mkdirSync(dirname(generatedPath), { recursive: true });
140
- writeFileIfChanged(generatedPath, `${JSON.stringify(nextGenerated, null, 2)}\n`);
141
- const generatedChanged = prevFingerprint !== nextGenerated.ui.fingerprintSha256;
142
- return {
143
- mode,
144
- hostMode: opts.hostMode,
145
- bosConfigChanged,
146
- catalogChanged,
147
- generatedChanged,
148
- resolved
149
- };
150
- }
151
-
152
- //#endregion
153
- export { syncAndGenerateSharedUi };
154
- //# sourceMappingURL=shared.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.mjs","names":[],"sources":["../src/shared.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { type BosEnv, type ResolvedConfigMeta, rebuildOrderedConfig } from \"./merge\";\nimport type { BosConfig, SharedDepConfig } from \"./types\";\nimport { BosConfigSchema } from \"./types\";\n\ninterface PackageJson {\n name?: string;\n private?: boolean;\n version?: string;\n workspaces?: {\n packages?: string[];\n catalog?: Record<string, string>;\n };\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n}\n\nexport interface SharedUiResolvedDep {\n name: string;\n version: string;\n requiredVersion: string;\n shareScope: string;\n singleton: boolean;\n eager: boolean;\n strictVersion: boolean;\n}\n\nexport interface SharedUiResolved {\n deps: Record<string, SharedUiResolvedDep>;\n fingerprintSha256: string;\n}\n\nexport interface SharedSyncResult {\n mode: \"catalog->bos\" | \"bos->catalog\";\n hostMode: \"local\" | \"remote\";\n bosConfigChanged: boolean;\n catalogChanged: boolean;\n generatedChanged: boolean;\n resolved: SharedUiResolved;\n}\n\nfunction sha256(input: string): string {\n return createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nfunction extractSemverExact(input: unknown): string | null {\n if (typeof input !== \"string\") return null;\n const match = input.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n return match ? match[0] : null;\n}\n\nfunction caretRange(version: string): string {\n return `^${version}`;\n}\n\nfunction stableDepsObject(\n deps: Record<string, SharedUiResolvedDep>,\n): Record<string, SharedUiResolvedDep> {\n const keys = Object.keys(deps).sort((a, b) => a.localeCompare(b));\n const out: Record<string, SharedUiResolvedDep> = {};\n for (const k of keys) out[k] = deps[k]!;\n return out;\n}\n\nfunction writeFileIfChanged(filePath: string, nextContent: string): boolean {\n try {\n const current = readFileSync(filePath, \"utf-8\");\n if (current === nextContent) return false;\n } catch {\n // ignore\n }\n\n writeFileSync(filePath, nextContent);\n return true;\n}\n\nfunction fingerprintResolved(deps: Record<string, SharedUiResolvedDep>): string {\n const stable = stableDepsObject(deps);\n return sha256(JSON.stringify(stable));\n}\n\nfunction getSharedUiDeps(bosConfig: BosConfig): Record<string, SharedDepConfig> {\n const shared = bosConfig.shared ?? {};\n const ui = shared.ui ?? {};\n return ui;\n}\n\nexport async function syncAndGenerateSharedUi(opts: {\n configDir: string;\n hostMode: \"local\" | \"remote\";\n bosConfig?: BosConfig;\n env?: BosEnv;\n extendsChain?: string[];\n}): Promise<SharedSyncResult> {\n const bosConfigPath = join(opts.configDir, \"bos.config.json\");\n const resolvedConfigPath = join(opts.configDir, \".bos\", \"bos.resolved-config.json\");\n const packageJsonPath = join(opts.configDir, \"package.json\");\n const generatedPath = join(opts.configDir, \".bos\", \"generated\", \"shared-ui.json\");\n\n let bosConfig: BosConfig;\n if (opts.bosConfig) {\n bosConfig = opts.bosConfig;\n } else {\n const raw = JSON.parse(readFileSync(bosConfigPath, \"utf-8\")) as Record<string, unknown>;\n bosConfig = BosConfigSchema.parse(raw);\n }\n let pkgJson: PackageJson = {};\n try {\n pkgJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as PackageJson;\n } catch {\n // package.json might not exist\n }\n\n const originalBos = JSON.stringify(bosConfig);\n const originalPkg = JSON.stringify(pkgJson);\n\n const catalog = pkgJson?.workspaces?.catalog ?? {};\n const sharedUi = getSharedUiDeps(bosConfig);\n\n const mode = opts.hostMode === \"local\" ? \"catalog->bos\" : \"bos->catalog\";\n\n if (mode === \"catalog->bos\") {\n for (const [name, cfg] of Object.entries(sharedUi)) {\n const dep = cfg as SharedDepConfig;\n const version =\n catalog[name] ?? extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);\n if (!version) continue;\n dep.version = version;\n dep.requiredVersion = caretRange(version);\n dep.shareScope = dep.shareScope ?? \"default\";\n }\n } else {\n for (const [name, cfg] of Object.entries(sharedUi)) {\n const dep = cfg as SharedDepConfig;\n const version = extractSemverExact(dep.version) ?? extractSemverExact(dep.requiredVersion);\n if (!version) continue;\n dep.version = version;\n dep.requiredVersion = caretRange(version);\n dep.shareScope = dep.shareScope ?? \"default\";\n if (catalog[name] !== version) {\n catalog[name] = version;\n }\n }\n if (!pkgJson.workspaces) pkgJson.workspaces = { packages: [], catalog: {} };\n pkgJson.workspaces.catalog = catalog;\n }\n\n const nextBos = JSON.stringify(bosConfig);\n const nextPkg = JSON.stringify(pkgJson);\n const bosConfigChanged = nextBos !== originalBos;\n const catalogChanged = nextPkg !== originalPkg;\n\n if (bosConfigChanged) {\n if (mode === \"catalog->bos\") {\n const resolvedDir = dirname(resolvedConfigPath);\n if (!existsSync(resolvedDir)) {\n mkdirSync(resolvedDir, { recursive: true });\n }\n const ordered = rebuildOrderedConfig(bosConfig);\n const meta: ResolvedConfigMeta = {\n env: opts.env ?? \"development\",\n resolvedAt: new Date().toISOString(),\n extendsChain: opts.extendsChain ?? [],\n source: \"shared-sync\",\n };\n const resolvedOutput = {\n _resolved: meta,\n ...ordered,\n };\n writeFileIfChanged(resolvedConfigPath, `${JSON.stringify(resolvedOutput, null, 2)}\\n`);\n } else {\n writeFileIfChanged(bosConfigPath, `${JSON.stringify(bosConfig, null, 2)}\\n`);\n }\n }\n if (catalogChanged) {\n writeFileIfChanged(packageJsonPath, `${JSON.stringify(pkgJson, null, 2)}\\n`);\n }\n\n const resolvedDeps: Record<string, SharedUiResolvedDep> = {};\n for (const [name, cfg] of Object.entries(getSharedUiDeps(bosConfig))) {\n const version =\n catalog[name] ?? extractSemverExact(cfg.version) ?? extractSemverExact(cfg.requiredVersion);\n if (!version) continue;\n resolvedDeps[name] = {\n name,\n version,\n requiredVersion: caretRange(version),\n shareScope: cfg.shareScope ?? \"default\",\n singleton: cfg.singleton ?? false,\n eager: cfg.eager ?? false,\n strictVersion: cfg.strictVersion ?? false,\n };\n }\n\n const stableResolvedDeps = stableDepsObject(resolvedDeps);\n const resolved: SharedUiResolved = {\n deps: stableResolvedDeps,\n fingerprintSha256: fingerprintResolved(stableResolvedDeps),\n };\n\n const nextGenerated = {\n schemaVersion: 1,\n kind: \"everything-dev/shared-ui\",\n generatedAt: new Date().toISOString(),\n ui: {\n deps: stableResolvedDeps,\n fingerprintSha256: resolved.fingerprintSha256,\n },\n inputs: {\n mode,\n hostMode: opts.hostMode,\n },\n };\n\n let prevFingerprint: string | null = null;\n try {\n const prev = JSON.parse(readFileSync(generatedPath, \"utf-8\"));\n prevFingerprint = prev?.ui?.fingerprintSha256 ?? null;\n } catch {\n // ignore\n }\n\n mkdirSync(dirname(generatedPath), { recursive: true });\n writeFileIfChanged(generatedPath, `${JSON.stringify(nextGenerated, null, 2)}\\n`);\n\n const generatedChanged = prevFingerprint !== nextGenerated.ui.fingerprintSha256;\n\n return {\n mode,\n hostMode: opts.hostMode,\n bosConfigChanged,\n catalogChanged,\n generatedChanged,\n resolved,\n };\n}\n\nexport function loadGeneratedSharedUi(configDir: string): SharedUiResolved | null {\n const generatedPath = join(configDir, \".bos\", \"generated\", \"shared-ui.json\");\n try {\n const content = JSON.parse(readFileSync(generatedPath, \"utf-8\"));\n return content?.ui ?? null;\n } catch {\n return null;\n }\n}\n"],"mappings":"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"}