@xemahq/xema 0.2.4 → 0.4.0

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 (107) hide show
  1. package/LICENSE +176 -175
  2. package/README.md +117 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +13 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/biome.d.ts.map +1 -1
  7. package/dist/commands/biome.js +83 -6
  8. package/dist/commands/biome.js.map +1 -1
  9. package/dist/commands/dev.d.ts.map +1 -1
  10. package/dist/commands/dev.js +34 -10
  11. package/dist/commands/dev.js.map +1 -1
  12. package/dist/commands/doctor.d.ts +2 -0
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +48 -1
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/down.d.ts.map +1 -1
  17. package/dist/commands/down.js +39 -5
  18. package/dist/commands/down.js.map +1 -1
  19. package/dist/commands/init.d.ts +3 -0
  20. package/dist/commands/init.d.ts.map +1 -0
  21. package/dist/commands/init.js +192 -0
  22. package/dist/commands/init.js.map +1 -0
  23. package/dist/commands/serve.d.ts.map +1 -1
  24. package/dist/commands/serve.js +13 -1
  25. package/dist/commands/serve.js.map +1 -1
  26. package/dist/commands/status.d.ts.map +1 -1
  27. package/dist/commands/status.js +30 -4
  28. package/dist/commands/status.js.map +1 -1
  29. package/dist/commands/up.d.ts.map +1 -1
  30. package/dist/commands/up.js +11 -0
  31. package/dist/commands/up.js.map +1 -1
  32. package/dist/runtime/config/init-presets.d.ts +37 -0
  33. package/dist/runtime/config/init-presets.d.ts.map +1 -0
  34. package/dist/runtime/config/init-presets.js +145 -0
  35. package/dist/runtime/config/init-presets.js.map +1 -0
  36. package/dist/runtime/config/schema.d.ts +27 -0
  37. package/dist/runtime/config/schema.d.ts.map +1 -1
  38. package/dist/runtime/config/schema.js +2 -0
  39. package/dist/runtime/config/schema.js.map +1 -1
  40. package/dist/runtime/launch.d.ts.map +1 -1
  41. package/dist/runtime/launch.js +22 -2
  42. package/dist/runtime/launch.js.map +1 -1
  43. package/dist/runtime/paths.d.ts +1 -0
  44. package/dist/runtime/paths.d.ts.map +1 -1
  45. package/dist/runtime/paths.js +27 -0
  46. package/dist/runtime/paths.js.map +1 -1
  47. package/dist/runtime/roster.d.ts +10 -2
  48. package/dist/runtime/roster.d.ts.map +1 -1
  49. package/dist/runtime/roster.js +50 -1
  50. package/dist/runtime/roster.js.map +1 -1
  51. package/dist/runtime/runner/helm-cli.d.ts +20 -0
  52. package/dist/runtime/runner/helm-cli.d.ts.map +1 -0
  53. package/dist/runtime/runner/helm-cli.js +58 -0
  54. package/dist/runtime/runner/helm-cli.js.map +1 -0
  55. package/dist/runtime/runner/helm-runner.d.ts +1 -2
  56. package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
  57. package/dist/runtime/runner/helm-runner.js +11 -24
  58. package/dist/runtime/runner/helm-runner.js.map +1 -1
  59. package/dist/runtime/runner/native-runner.d.ts.map +1 -1
  60. package/dist/runtime/runner/native-runner.js +6 -5
  61. package/dist/runtime/runner/native-runner.js.map +1 -1
  62. package/dist/runtime/sources/credentials.d.ts +11 -0
  63. package/dist/runtime/sources/credentials.d.ts.map +1 -0
  64. package/dist/runtime/sources/credentials.js +68 -0
  65. package/dist/runtime/sources/credentials.js.map +1 -0
  66. package/dist/runtime/sources/kinds/distribution.d.ts +5 -0
  67. package/dist/runtime/sources/kinds/distribution.d.ts.map +1 -0
  68. package/dist/runtime/sources/kinds/distribution.js +33 -0
  69. package/dist/runtime/sources/kinds/distribution.js.map +1 -0
  70. package/dist/runtime/sources/kinds/git.d.ts +5 -0
  71. package/dist/runtime/sources/kinds/git.d.ts.map +1 -0
  72. package/dist/runtime/sources/kinds/git.js +70 -0
  73. package/dist/runtime/sources/kinds/git.js.map +1 -0
  74. package/dist/runtime/sources/kinds/workspace.d.ts +5 -0
  75. package/dist/runtime/sources/kinds/workspace.d.ts.map +1 -0
  76. package/dist/runtime/sources/kinds/workspace.js +24 -0
  77. package/dist/runtime/sources/kinds/workspace.js.map +1 -0
  78. package/dist/runtime/sources/manifest-walk.d.ts +22 -0
  79. package/dist/runtime/sources/manifest-walk.d.ts.map +1 -0
  80. package/dist/runtime/sources/manifest-walk.js +87 -0
  81. package/dist/runtime/sources/manifest-walk.js.map +1 -0
  82. package/dist/runtime/sources/resolver.d.ts +15 -0
  83. package/dist/runtime/sources/resolver.d.ts.map +1 -0
  84. package/dist/runtime/sources/resolver.js +75 -0
  85. package/dist/runtime/sources/resolver.js.map +1 -0
  86. package/dist/runtime/sources/schema.d.ts +101 -0
  87. package/dist/runtime/sources/schema.d.ts.map +1 -0
  88. package/dist/runtime/sources/schema.js +71 -0
  89. package/dist/runtime/sources/schema.js.map +1 -0
  90. package/dist/runtime/sources/types.d.ts +10 -0
  91. package/dist/runtime/sources/types.d.ts.map +1 -0
  92. package/dist/runtime/sources/types.js +3 -0
  93. package/dist/runtime/sources/types.js.map +1 -0
  94. package/dist/runtime/waves.d.ts +1 -0
  95. package/dist/runtime/waves.d.ts.map +1 -1
  96. package/dist/runtime/waves.js +19 -0
  97. package/dist/runtime/waves.js.map +1 -1
  98. package/examples/01-local-monolith.yaml +1 -1
  99. package/examples/02-local-container-full.yaml +1 -1
  100. package/examples/03-byo-infra.yaml +1 -1
  101. package/examples/05-appliance-helm.yaml +1 -1
  102. package/examples/06-biome-sources.yaml +51 -0
  103. package/package.json +5 -2
  104. package/dist/dev/dev-orchestrator.d.ts +0 -7
  105. package/dist/dev/dev-orchestrator.d.ts.map +0 -1
  106. package/dist/dev/dev-orchestrator.js +0 -367
  107. package/dist/dev/dev-orchestrator.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CredentialResolver = exports.CREDENTIALS_FILE = void 0;
4
+ exports.loadCredentialsFile = loadCredentialsFile;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_os_1 = require("node:os");
7
+ const node_path_1 = require("node:path");
8
+ exports.CREDENTIALS_FILE = (0, node_path_1.join)((0, node_os_1.homedir)(), '.xema', 'credentials.env');
9
+ function loadCredentialsFile(path = exports.CREDENTIALS_FILE) {
10
+ const out = new Map();
11
+ if (!(0, node_fs_1.existsSync)(path)) {
12
+ return out;
13
+ }
14
+ const lines = (0, node_fs_1.readFileSync)(path, 'utf8').split('\n');
15
+ for (let i = 0; i < lines.length; i++) {
16
+ const raw = lines[i] ?? '';
17
+ const line = raw.trim();
18
+ if (line.length === 0 || line.startsWith('#')) {
19
+ continue;
20
+ }
21
+ const eq = line.indexOf('=');
22
+ if (eq <= 0) {
23
+ throw new Error(`${path}:${String(i + 1)}: expected KEY=value, got: ${line}`);
24
+ }
25
+ const key = line.slice(0, eq).trim();
26
+ let value = line.slice(eq + 1).trim();
27
+ if ((value.startsWith('"') && value.endsWith('"')) ||
28
+ (value.startsWith("'") && value.endsWith("'"))) {
29
+ value = value.slice(1, -1);
30
+ }
31
+ out.set(key, value);
32
+ }
33
+ return out;
34
+ }
35
+ class CredentialResolver {
36
+ env;
37
+ fileCreds;
38
+ constructor(env = process.env, fileCreds) {
39
+ this.env = env;
40
+ this.fileCreds = fileCreds ?? loadCredentialsFile();
41
+ }
42
+ has(authTokenEnv) {
43
+ if (authTokenEnv === undefined) {
44
+ return true;
45
+ }
46
+ return this.lookup(authTokenEnv) !== undefined;
47
+ }
48
+ resolve(authTokenEnv, sourceName) {
49
+ if (authTokenEnv === undefined) {
50
+ return undefined;
51
+ }
52
+ const value = this.lookup(authTokenEnv);
53
+ if (value === undefined || value.length === 0) {
54
+ throw new Error(`Source "${sourceName}" needs a token: env var ${authTokenEnv} is unset/empty. ` +
55
+ `Export it, or add ${authTokenEnv}=<token> to ${exports.CREDENTIALS_FILE}.`);
56
+ }
57
+ return value;
58
+ }
59
+ lookup(name) {
60
+ const fromEnv = this.env[name];
61
+ if (fromEnv !== undefined && fromEnv.length > 0) {
62
+ return fromEnv;
63
+ }
64
+ return this.fileCreds.get(name);
65
+ }
66
+ }
67
+ exports.CredentialResolver = CredentialResolver;
68
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/runtime/sources/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type LockIndex } from '../../roster';
2
+ import type { DistributionSource } from '../schema';
3
+ import type { SourceResolveContext } from '../types';
4
+ export declare function resolveDistributionSource(spec: DistributionSource, ctx: SourceResolveContext): LockIndex;
5
+ //# sourceMappingURL=distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.d.ts","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/distribution.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAYrD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,oBAAoB,GACxB,SAAS,CAwBX"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveDistributionSource = resolveDistributionSource;
4
+ const node_path_1 = require("node:path");
5
+ const lock_loader_1 = require("../../lock-loader");
6
+ const roster_1 = require("../../roster");
7
+ function resolveDistributionSource(spec, ctx) {
8
+ const explicitDir = localRefDir(spec.ref);
9
+ if (spec.ref !== undefined && explicitDir === null) {
10
+ throw new Error(`source "${spec.name}" (distribution): remote ref "${spec.ref}" is not yet supported on ` +
11
+ `the launch path. Provide a local path to a distributions checkout, or use a vendored edition.`);
12
+ }
13
+ const lockExplicit = explicitDir !== null ? (0, node_path_1.join)(explicitDir, spec.edition, 'distribution.lock.json') : undefined;
14
+ const imageExplicit = explicitDir !== null ? (0, node_path_1.join)(explicitDir, spec.edition, 'images.lock.json') : undefined;
15
+ const { lock } = (0, lock_loader_1.loadDistributionLock)({ edition: spec.edition, explicit: lockExplicit });
16
+ let imagesByBiome;
17
+ if (ctx.usesImages) {
18
+ imagesByBiome = (0, lock_loader_1.loadImageLock)({ edition: spec.edition, explicit: imageExplicit }).imagesByBiome;
19
+ }
20
+ ctx.log?.(`source "${spec.name}" (distribution): edition "${spec.edition}", ` +
21
+ `${String(lock.biomes.length)} biome(s).`);
22
+ return (0, roster_1.buildLockIndex)(lock, imagesByBiome);
23
+ }
24
+ function localRefDir(ref) {
25
+ if (ref === undefined) {
26
+ return null;
27
+ }
28
+ if (ref.includes(':') && !(0, node_path_1.isAbsolute)(ref)) {
29
+ return null;
30
+ }
31
+ return (0, node_path_1.resolve)(process.cwd(), ref);
32
+ }
33
+ //# sourceMappingURL=distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/distribution.ts"],"names":[],"mappings":";;AAkBA,8DA2BC;AA7CD,yCAAsD;AAEtD,mDAAyF;AACzF,yCAA8D;AAe9D,SAAgB,yBAAyB,CACvC,IAAwB,EACxB,GAAyB;IAEzB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,CAAC,IAAI,iCAAiC,IAAI,CAAC,GAAG,4BAA4B;YACvF,+FAA+F,CAClG,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAChB,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,aAAa,GACjB,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,kCAAoB,EAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAEzF,IAAI,aAA0D,CAAC;IAC/D,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,aAAa,GAAG,IAAA,2BAAa,EAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC;IAClG,CAAC;IACD,GAAG,CAAC,GAAG,EAAE,CACP,WAAW,IAAI,CAAC,IAAI,8BAA8B,IAAI,CAAC,OAAO,KAAK;QACjE,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAC5C,CAAC;IACF,OAAO,IAAA,uBAAc,EAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAGD,SAAS,WAAW,CAAC,GAAuB;IAC1C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAA,sBAAU,EAAC,GAAG,CAAC,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAA,mBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type LockIndex } from '../../roster';
2
+ import type { GitSource } from '../schema';
3
+ import type { SourceResolveContext } from '../types';
4
+ export declare function resolveGitSource(spec: GitSource, ctx: SourceResolveContext): LockIndex | null;
5
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/git.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAmBrD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAmB7F"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveGitSource = resolveGitSource;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_fs_1 = require("node:fs");
6
+ const node_os_1 = require("node:os");
7
+ const node_path_1 = require("node:path");
8
+ const roster_1 = require("../../roster");
9
+ const manifest_walk_1 = require("../manifest-walk");
10
+ const GIT_CACHE_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.xema', 'cache', 'git');
11
+ const REF_MARKER = '.xema-source-ref';
12
+ const CLONE_TIMEOUT_MS = 120_000;
13
+ function resolveGitSource(spec, ctx) {
14
+ if (ctx.usesImages) {
15
+ ctx.log?.(`source "${spec.name}" (git): inert on an image substrate ` +
16
+ `(a clone is source, not an image; use native substrate for git biomes).`);
17
+ return null;
18
+ }
19
+ const token = ctx.credentials.resolve(spec.authTokenEnv, spec.name);
20
+ const ref = spec.ref ?? 'HEAD';
21
+ const dir = (0, node_path_1.join)(GIT_CACHE_DIR, spec.name);
22
+ ensureClone(spec, dir, ref, token, ctx);
23
+ const { biomes } = (0, manifest_walk_1.walkBiomeManifests)(dir);
24
+ const serverBiomes = biomes.filter((b) => b.target === 'server' && b.services.length > 0);
25
+ ctx.log?.(`source "${spec.name}" (git): ${String(serverBiomes.length)} biome(s) from ${spec.url}@${ref}`);
26
+ return (0, roster_1.indexFromDiscoveredBiomes)(serverBiomes, { sourceName: spec.name, sourceRoot: dir });
27
+ }
28
+ function ensureClone(spec, dir, ref, token, ctx) {
29
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, REF_MARKER))) {
30
+ const cached = (0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, REF_MARKER), 'utf8').trim();
31
+ if (cached === ref) {
32
+ ctx.log?.(`source "${spec.name}" (git): reusing cached clone (${ref}).`);
33
+ return;
34
+ }
35
+ }
36
+ if ((0, node_fs_1.existsSync)(dir)) {
37
+ (0, node_fs_1.rmSync)(dir, { recursive: true, force: true });
38
+ }
39
+ (0, node_fs_1.mkdirSync)(GIT_CACHE_DIR, { recursive: true });
40
+ const args = ['clone', '--depth', '1'];
41
+ if (spec.ref !== undefined) {
42
+ args.push('--branch', spec.ref);
43
+ }
44
+ args.push('--', spec.url, dir);
45
+ try {
46
+ (0, node_child_process_1.execFileSync)('git', args, {
47
+ stdio: 'pipe',
48
+ timeout: CLONE_TIMEOUT_MS,
49
+ env: gitEnvWithAuth(token),
50
+ });
51
+ }
52
+ catch (err) {
53
+ const message = err instanceof Error ? err.message : String(err);
54
+ throw new Error(`source "${spec.name}" (git): clone of ${spec.url}@${ref} failed: ${message}`);
55
+ }
56
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, REF_MARKER), ref, 'utf8');
57
+ }
58
+ function gitEnvWithAuth(token) {
59
+ const base = { ...process.env, GIT_TERMINAL_PROMPT: '0' };
60
+ if (token === undefined) {
61
+ return base;
62
+ }
63
+ return {
64
+ ...base,
65
+ GIT_CONFIG_COUNT: '1',
66
+ GIT_CONFIG_KEY_0: 'http.extraHeader',
67
+ GIT_CONFIG_VALUE_0: `Authorization: Bearer ${token}`,
68
+ };
69
+ }
70
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type LockIndex } from '../../roster';
2
+ import type { WorkspaceSource } from '../schema';
3
+ import type { SourceResolveContext } from '../types';
4
+ export declare function resolveWorkspaceSource(spec: WorkspaceSource, ctx: SourceResolveContext): LockIndex | null;
5
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/workspace.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAQrD,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,oBAAoB,GACxB,SAAS,GAAG,IAAI,CAqBlB"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveWorkspaceSource = resolveWorkspaceSource;
4
+ const node_path_1 = require("node:path");
5
+ const paths_1 = require("../../paths");
6
+ const roster_1 = require("../../roster");
7
+ const manifest_walk_1 = require("../manifest-walk");
8
+ function resolveWorkspaceSource(spec, ctx) {
9
+ if (ctx.usesImages) {
10
+ ctx.log?.(`source "${spec.name}" (workspace): inert on an image substrate ` +
11
+ `(working-tree dirs have no images; use native substrate for local biomes).`);
12
+ return null;
13
+ }
14
+ const root = spec.root ? (0, node_path_1.resolve)(process.cwd(), spec.root) : (0, paths_1.findMonorepoRoot)();
15
+ if (root === null) {
16
+ ctx.log?.(`source "${spec.name}" (workspace): no monorepo root detected; nothing to contribute.`);
17
+ return null;
18
+ }
19
+ const { biomes } = (0, manifest_walk_1.walkBiomeManifests)(root);
20
+ const serverBiomes = biomes.filter((b) => b.target === 'server' && b.services.length > 0);
21
+ ctx.log?.(`source "${spec.name}" (workspace): ${String(serverBiomes.length)} biome(s) from ${root}`);
22
+ return (0, roster_1.indexFromDiscoveredBiomes)(serverBiomes, { sourceName: spec.name, sourceRoot: root });
23
+ }
24
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/workspace.ts"],"names":[],"mappings":";;AAeA,wDAwBC;AAvCD,yCAAoC;AAEpC,uCAA+C;AAC/C,yCAAyE;AACzE,oDAAsD;AAWtD,SAAgB,sBAAsB,CACpC,IAAqB,EACrB,GAAyB;IAEzB,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,EAAE,CACP,WAAW,IAAI,CAAC,IAAI,6CAA6C;YAC/D,4EAA4E,CAC/E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,mBAAO,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,wBAAgB,GAAE,CAAC;IAChF,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,EAAE,CACP,WAAW,IAAI,CAAC,IAAI,kEAAkE,CACvF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAkB,EAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1F,GAAG,CAAC,GAAG,EAAE,CACP,WAAW,IAAI,CAAC,IAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAC1F,CAAC;IACF,OAAO,IAAA,kCAAyB,EAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type BiomeManifest } from '@xemahq/kernel-contracts/biome';
2
+ export interface DiscoveredService {
3
+ readonly name: string;
4
+ readonly servicePath: string;
5
+ }
6
+ export interface DiscoveredBiome {
7
+ readonly id: string;
8
+ readonly tier: string;
9
+ readonly target: 'server' | 'web';
10
+ readonly version: string;
11
+ readonly packageName: string;
12
+ readonly biomeDir: string;
13
+ readonly requires: readonly string[];
14
+ readonly services: readonly DiscoveredService[];
15
+ readonly manifest: BiomeManifest;
16
+ }
17
+ export interface WalkResult {
18
+ readonly root: string;
19
+ readonly biomes: readonly DiscoveredBiome[];
20
+ }
21
+ export declare function walkBiomeManifests(root: string): WalkResult;
22
+ //# sourceMappingURL=manifest-walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-walk.d.ts","sourceRoot":"","sources":["../../../src/runtime/sources/manifest-walk.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AA2CxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAGD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAErC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IAEzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C;AASD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAS3D"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walkBiomeManifests = walkBiomeManifests;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const biome_1 = require("@xemahq/kernel-contracts/biome");
7
+ const SKIP_DIRS = new Set([
8
+ 'node_modules',
9
+ '.git',
10
+ 'dist',
11
+ 'build',
12
+ '.turbo',
13
+ 'coverage',
14
+ '.next',
15
+ '.cache',
16
+ 'templates',
17
+ 'fixtures',
18
+ '__fixtures__',
19
+ '__mocks__',
20
+ ]);
21
+ function walkBiomeManifests(root) {
22
+ if (!(0, node_fs_1.existsSync)(root)) {
23
+ throw new Error(`walkBiomeManifests: root does not exist: ${root}`);
24
+ }
25
+ const biomes = [];
26
+ visit(root, root, biomes);
27
+ biomes.sort((a, b) => a.id.localeCompare(b.id));
28
+ return { root, biomes };
29
+ }
30
+ function visit(dir, root, out) {
31
+ const manifestPath = (0, node_path_1.join)(dir, biome_1.BIOME_MANIFEST_FILENAME);
32
+ if ((0, node_fs_1.existsSync)(manifestPath)) {
33
+ out.push(projectManifest(manifestPath, root));
34
+ return;
35
+ }
36
+ let entries;
37
+ try {
38
+ entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
39
+ }
40
+ catch {
41
+ return;
42
+ }
43
+ for (const entry of entries) {
44
+ if (!entry.isDirectory() || SKIP_DIRS.has(entry.name) || entry.name.startsWith('.')) {
45
+ continue;
46
+ }
47
+ visit((0, node_path_1.join)(dir, entry.name), root, out);
48
+ }
49
+ }
50
+ function projectManifest(manifestPath, root) {
51
+ const biomeAbsDir = manifestPath.slice(0, -(biome_1.BIOME_MANIFEST_FILENAME.length + 1));
52
+ let manifest;
53
+ try {
54
+ manifest = (0, biome_1.parseBiomeManifest)(JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8')));
55
+ }
56
+ catch (err) {
57
+ const message = err instanceof Error ? err.message : String(err);
58
+ throw new Error(`Invalid biome manifest at ${manifestPath}: ${message}`);
59
+ }
60
+ const biomeDir = (0, node_path_1.relative)(root, biomeAbsDir);
61
+ const xema = manifest.xema;
62
+ const requires = Object.keys(xema.requires ?? {});
63
+ const services = xema.target === 'server'
64
+ ? (xema.ships?.apis ?? []).map((api) => ({
65
+ name: api.name,
66
+ servicePath: (0, node_path_1.join)(biomeDir, normalizeApiPath(api.path, api.name)),
67
+ }))
68
+ : [];
69
+ return {
70
+ id: xema.id,
71
+ tier: xema.scope,
72
+ target: xema.target,
73
+ version: manifest.version,
74
+ packageName: manifest.name,
75
+ biomeDir,
76
+ requires,
77
+ services,
78
+ manifest,
79
+ };
80
+ }
81
+ function normalizeApiPath(declared, name) {
82
+ if (declared !== undefined && declared.length > 0) {
83
+ return declared.replace(/^\.\//, '');
84
+ }
85
+ return (0, node_path_1.join)('api', name);
86
+ }
87
+ //# sourceMappingURL=manifest-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-walk.js","sourceRoot":"","sources":["../../../src/runtime/sources/manifest-walk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type LockIndex } from '../roster';
2
+ import { CredentialResolver } from './credentials';
3
+ import { SourceKind, type SourceSpec } from './schema';
4
+ import type { SourceResolveContext } from './types';
5
+ export declare function composeSourceIndex(base: LockIndex, sources: readonly SourceSpec[], ctx: SourceResolveContext): LockIndex;
6
+ export interface SourceStatus {
7
+ readonly name: string;
8
+ readonly kind: SourceKind;
9
+ readonly detail: string;
10
+ readonly tokenEnv?: string;
11
+ readonly tokenPresent: boolean;
12
+ readonly launchTime: boolean;
13
+ }
14
+ export declare function describeSources(sources: readonly SourceSpec[], credentials?: CredentialResolver): SourceStatus[];
15
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/runtime/sources/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAepD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,GAAG,EAAE,oBAAoB,GACxB,SAAS,CAqBX;AAsBD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAE1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAE/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAGD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,WAAW,GAAE,kBAA6C,GACzD,YAAY,EAAE,CAahB"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.composeSourceIndex = composeSourceIndex;
4
+ exports.describeSources = describeSources;
5
+ const roster_1 = require("../roster");
6
+ const credentials_1 = require("./credentials");
7
+ const distribution_1 = require("./kinds/distribution");
8
+ const git_1 = require("./kinds/git");
9
+ const workspace_1 = require("./kinds/workspace");
10
+ const schema_1 = require("./schema");
11
+ function composeSourceIndex(base, sources, ctx) {
12
+ const workspace = [];
13
+ const other = [];
14
+ for (const spec of sources) {
15
+ (spec.kind === schema_1.SourceKind.Workspace ? workspace : other).push(spec);
16
+ }
17
+ let index = base;
18
+ for (const spec of [...other].reverse()) {
19
+ const contrib = resolveOne(spec, ctx);
20
+ if (contrib !== null) {
21
+ index = (0, roster_1.mergeIndices)(index, contrib);
22
+ }
23
+ }
24
+ for (const spec of [...workspace].reverse()) {
25
+ const contrib = resolveOne(spec, ctx);
26
+ if (contrib !== null) {
27
+ index = (0, roster_1.mergeIndices)(index, contrib);
28
+ }
29
+ }
30
+ return index;
31
+ }
32
+ function resolveOne(spec, ctx) {
33
+ switch (spec.kind) {
34
+ case schema_1.SourceKind.Workspace:
35
+ return (0, workspace_1.resolveWorkspaceSource)(spec, ctx);
36
+ case schema_1.SourceKind.Distribution:
37
+ return (0, distribution_1.resolveDistributionSource)(spec, ctx);
38
+ case schema_1.SourceKind.Git:
39
+ return (0, git_1.resolveGitSource)(spec, ctx);
40
+ case schema_1.SourceKind.Npm:
41
+ case schema_1.SourceKind.Oci:
42
+ ctx.log?.(`source "${spec.name}" (${spec.kind}): install-time source — install it into a running ` +
43
+ `platform with \`xema biome install\`; it does not boot directly from \`xema up\`.`);
44
+ return null;
45
+ }
46
+ }
47
+ function describeSources(sources, credentials = new credentials_1.CredentialResolver()) {
48
+ return sources.map((spec) => {
49
+ const tokenEnv = 'authTokenEnv' in spec ? spec.authTokenEnv : undefined;
50
+ const launchTime = spec.kind !== schema_1.SourceKind.Npm && spec.kind !== schema_1.SourceKind.Oci;
51
+ return {
52
+ name: spec.name,
53
+ kind: spec.kind,
54
+ detail: detailFor(spec),
55
+ ...(tokenEnv !== undefined ? { tokenEnv } : {}),
56
+ tokenPresent: credentials.has(tokenEnv),
57
+ launchTime,
58
+ };
59
+ });
60
+ }
61
+ function detailFor(spec) {
62
+ switch (spec.kind) {
63
+ case schema_1.SourceKind.Workspace:
64
+ return spec.root ?? '(auto-detected monorepo root)';
65
+ case schema_1.SourceKind.Distribution:
66
+ return `edition ${spec.edition}${spec.ref ? ` @ ${spec.ref}` : ''}`;
67
+ case schema_1.SourceKind.Git:
68
+ return `${spec.url}${spec.ref ? `@${spec.ref}` : ''}`;
69
+ case schema_1.SourceKind.Npm:
70
+ return spec.registryUrl ?? 'https://registry.npmjs.org';
71
+ case schema_1.SourceKind.Oci:
72
+ return spec.registry;
73
+ }
74
+ }
75
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/runtime/sources/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { z } from 'zod';
2
+ export declare enum SourceKind {
3
+ Workspace = "workspace",
4
+ Distribution = "distribution",
5
+ Npm = "npm",
6
+ Oci = "oci",
7
+ Git = "git"
8
+ }
9
+ export declare const WorkspaceSourceSchema: z.ZodObject<{
10
+ kind: z.ZodLiteral<SourceKind.Workspace>;
11
+ root: z.ZodOptional<z.ZodString>;
12
+ name: z.ZodString;
13
+ }, z.core.$strict>;
14
+ export type WorkspaceSource = z.infer<typeof WorkspaceSourceSchema>;
15
+ export declare const DistributionSourceSchema: z.ZodObject<{
16
+ kind: z.ZodLiteral<SourceKind.Distribution>;
17
+ edition: z.ZodString;
18
+ ref: z.ZodOptional<z.ZodString>;
19
+ name: z.ZodString;
20
+ }, z.core.$strict>;
21
+ export type DistributionSource = z.infer<typeof DistributionSourceSchema>;
22
+ export declare const NpmSourceSchema: z.ZodObject<{
23
+ kind: z.ZodLiteral<SourceKind.Npm>;
24
+ registryUrl: z.ZodOptional<z.ZodString>;
25
+ scope: z.ZodOptional<z.ZodString>;
26
+ authTokenEnv: z.ZodOptional<z.ZodString>;
27
+ name: z.ZodString;
28
+ }, z.core.$strict>;
29
+ export type NpmSource = z.infer<typeof NpmSourceSchema>;
30
+ export declare const OciSourceSchema: z.ZodObject<{
31
+ kind: z.ZodLiteral<SourceKind.Oci>;
32
+ registry: z.ZodString;
33
+ authTokenEnv: z.ZodOptional<z.ZodString>;
34
+ name: z.ZodString;
35
+ }, z.core.$strict>;
36
+ export type OciSource = z.infer<typeof OciSourceSchema>;
37
+ export declare const GitSourceSchema: z.ZodObject<{
38
+ kind: z.ZodLiteral<SourceKind.Git>;
39
+ url: z.ZodString;
40
+ ref: z.ZodOptional<z.ZodString>;
41
+ authTokenEnv: z.ZodOptional<z.ZodString>;
42
+ name: z.ZodString;
43
+ }, z.core.$strict>;
44
+ export type GitSource = z.infer<typeof GitSourceSchema>;
45
+ export declare const SourceSpecSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
46
+ kind: z.ZodLiteral<SourceKind.Workspace>;
47
+ root: z.ZodOptional<z.ZodString>;
48
+ name: z.ZodString;
49
+ }, z.core.$strict>, z.ZodObject<{
50
+ kind: z.ZodLiteral<SourceKind.Distribution>;
51
+ edition: z.ZodString;
52
+ ref: z.ZodOptional<z.ZodString>;
53
+ name: z.ZodString;
54
+ }, z.core.$strict>, z.ZodObject<{
55
+ kind: z.ZodLiteral<SourceKind.Npm>;
56
+ registryUrl: z.ZodOptional<z.ZodString>;
57
+ scope: z.ZodOptional<z.ZodString>;
58
+ authTokenEnv: z.ZodOptional<z.ZodString>;
59
+ name: z.ZodString;
60
+ }, z.core.$strict>, z.ZodObject<{
61
+ kind: z.ZodLiteral<SourceKind.Oci>;
62
+ registry: z.ZodString;
63
+ authTokenEnv: z.ZodOptional<z.ZodString>;
64
+ name: z.ZodString;
65
+ }, z.core.$strict>, z.ZodObject<{
66
+ kind: z.ZodLiteral<SourceKind.Git>;
67
+ url: z.ZodString;
68
+ ref: z.ZodOptional<z.ZodString>;
69
+ authTokenEnv: z.ZodOptional<z.ZodString>;
70
+ name: z.ZodString;
71
+ }, z.core.$strict>], "kind">;
72
+ export type SourceSpec = z.infer<typeof SourceSpecSchema>;
73
+ export declare const SourcesConfigSchema: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
74
+ kind: z.ZodLiteral<SourceKind.Workspace>;
75
+ root: z.ZodOptional<z.ZodString>;
76
+ name: z.ZodString;
77
+ }, z.core.$strict>, z.ZodObject<{
78
+ kind: z.ZodLiteral<SourceKind.Distribution>;
79
+ edition: z.ZodString;
80
+ ref: z.ZodOptional<z.ZodString>;
81
+ name: z.ZodString;
82
+ }, z.core.$strict>, z.ZodObject<{
83
+ kind: z.ZodLiteral<SourceKind.Npm>;
84
+ registryUrl: z.ZodOptional<z.ZodString>;
85
+ scope: z.ZodOptional<z.ZodString>;
86
+ authTokenEnv: z.ZodOptional<z.ZodString>;
87
+ name: z.ZodString;
88
+ }, z.core.$strict>, z.ZodObject<{
89
+ kind: z.ZodLiteral<SourceKind.Oci>;
90
+ registry: z.ZodString;
91
+ authTokenEnv: z.ZodOptional<z.ZodString>;
92
+ name: z.ZodString;
93
+ }, z.core.$strict>, z.ZodObject<{
94
+ kind: z.ZodLiteral<SourceKind.Git>;
95
+ url: z.ZodString;
96
+ ref: z.ZodOptional<z.ZodString>;
97
+ authTokenEnv: z.ZodOptional<z.ZodString>;
98
+ name: z.ZodString;
99
+ }, z.core.$strict>], "kind">>>;
100
+ export type SourcesConfig = z.infer<typeof SourcesConfigSchema>;
101
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/runtime/sources/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,oBAAY,UAAU;IAEpB,SAAS,cAAc;IAEvB,YAAY,iBAAiB;IAE7B,GAAG,QAAQ;IAEX,GAAG,QAAQ;IAEX,GAAG,QAAQ;CACZ;AAeD,eAAO,MAAM,qBAAqB;;;;kBAMvB,CAAC;AACZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAQpE,eAAO,MAAM,wBAAwB;;;;;kBAO1B,CAAC;AACZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAQ1E,eAAO,MAAM,eAAe;;;;;;kBAWjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,eAAe;;;;;kBAOjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAQxD,eAAO,MAAM,eAAe;;;;;;kBAQjB,CAAC;AACZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;4BAM3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAQ1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;8BAAwC,CAAC;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}