@xemahq/xema 0.4.0 → 0.5.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.
- package/README.md +30 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/dist.d.ts +3 -0
- package/dist/commands/dist.d.ts.map +1 -0
- package/dist/commands/dist.js +142 -0
- package/dist/commands/dist.js.map +1 -0
- package/dist/runtime/distribution/available-biome.d.ts +10 -0
- package/dist/runtime/distribution/available-biome.d.ts.map +1 -0
- package/dist/runtime/distribution/available-biome.js +51 -0
- package/dist/runtime/distribution/available-biome.js.map +1 -0
- package/dist/runtime/distribution/compose.d.ts +22 -0
- package/dist/runtime/distribution/compose.d.ts.map +1 -0
- package/dist/runtime/distribution/compose.js +50 -0
- package/dist/runtime/distribution/compose.js.map +1 -0
- package/dist/runtime/paths.d.ts +2 -1
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.js +10 -0
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/sources/kinds/git.d.ts +4 -0
- package/dist/runtime/sources/kinds/git.d.ts.map +1 -1
- package/dist/runtime/sources/kinds/git.js +12 -7
- package/dist/runtime/sources/kinds/git.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -193,6 +193,36 @@ What a biome *does* (services, skills, capabilities, agents) is wholly open —
|
|
|
193
193
|
only the bundle *shape* is standardized, so every author builds the same way and
|
|
194
194
|
any source resolves the same way.
|
|
195
195
|
|
|
196
|
+
## Compose a distribution — `xema dist build`
|
|
197
|
+
|
|
198
|
+
Build **your own platform**: take a base edition's first-party biomes and add
|
|
199
|
+
the ones you bring (your git repos / workspace dirs). The composition is
|
|
200
|
+
validated by the real distribution resolver (dependency closure + trust +
|
|
201
|
+
operator rules), then written as a distribution + a launch config:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
xema dist build --id acme-platform --base oss \
|
|
205
|
+
--git acme=https://github.com/acme/xema-biomes.git \
|
|
206
|
+
--source local=./my-biomes \
|
|
207
|
+
--config-out acme.config.yaml
|
|
208
|
+
# or read sources from an existing config: --config xema.config.yaml
|
|
209
|
+
# --no-allow-third-party rejects non-first-party biomes (default: allowed)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
It writes `~/.xema/distributions/<id>/{xema-distribution.json,distribution.lock.json}`
|
|
213
|
+
(the composed recipe + resolved record) and, with `--config-out`, a
|
|
214
|
+
`xema.config.yaml` (base edition + your sources). Then:
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
xema dev --config acme.config.yaml # native — your biomes run from source
|
|
218
|
+
xema up --edition acme-platform # first-party biomes by edition (your composition)
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Your composed distribution also shows up as an edition in `xema init` and
|
|
222
|
+
`xema up --edition <id>`. User biomes are `third-party` by origin and launch via
|
|
223
|
+
the source registry (which resolves their source roots); building container
|
|
224
|
+
images for your own biomes is a separate step.
|
|
225
|
+
|
|
196
226
|
## Author biomes & run capabilities
|
|
197
227
|
|
|
198
228
|
```bash
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,YAAY,IAAI,OAAO,CA4BtC;AAED,wBAAsB,IAAI,CAAC,IAAI,GAAE,aAAa,CAAC,MAAM,CAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpF"}
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ const commander_1 = require("commander");
|
|
|
9
9
|
const apply_1 = require("./commands/apply");
|
|
10
10
|
const biome_1 = require("./commands/biome");
|
|
11
11
|
const dev_1 = require("./commands/dev");
|
|
12
|
+
const dist_1 = require("./commands/dist");
|
|
12
13
|
const doctor_1 = require("./commands/doctor");
|
|
13
14
|
const down_1 = require("./commands/down");
|
|
14
15
|
const export_1 = require("./commands/export");
|
|
@@ -45,6 +46,7 @@ function buildProgram() {
|
|
|
45
46
|
(0, status_1.registerCommand)(program);
|
|
46
47
|
(0, logs_1.registerCommand)(program);
|
|
47
48
|
(0, dev_1.registerCommand)(program);
|
|
49
|
+
(0, dist_1.registerCommand)(program);
|
|
48
50
|
(0, serve_1.registerCommand)(program);
|
|
49
51
|
(0, biome_1.registerCommand)(program);
|
|
50
52
|
(0, plan_1.registerCommand)(program);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAmDA,oCA4BC;AAED,oBAMC;AA7ED,qCAAuC;AACvC,yCAAiC;AAEjC,yCAAoC;AAEpC,4CAAoE;AACpE,4CAAoE;AACpE,wCAAgE;AAChE,0CAAkE;AAClE,8CAAsE;AACtE,0CAAkE;AAClE,8CAAsE;AACtE,8CAAsE;AACtE,0CAAkE;AAClE,0CAAkE;AAClE,gDAAwE;AACxE,0CAAkE;AAClE,wCAAgE;AAChE,4CAAoE;AACpE,4CAAoE;AACpE,8CAAsE;AACtE,sCAA8D;AAS9D,SAAS,cAAc;IACrB,MAAM,YAAY,GAAG,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAyB,CAAC;IAC3F,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,YAAY,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;AAErC,SAAgB,YAAY;IAC1B,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,oDAAoD,CAAC;SACjE,OAAO,CAAC,WAAW,EAAE,eAAe,EAAE,uBAAuB,CAAC;SAC9D,kBAAkB,CAAC,IAAI,CAAC;SACxB,aAAa,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC;IACpB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,qBAAW,EAAC,OAAO,CAAC,CAAC;IACrB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAA,sBAAY,EAAC,OAAO,CAAC,CAAC;IACtB,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,qBAAW,EAAC,OAAO,CAAC,CAAC;IACrB,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IACvB,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,wBAAc,EAAC,OAAO,CAAC,CAAC;IAExB,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,IAAI,CAAC,OAA8B,OAAO,CAAC,IAAI;IACnE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAI/B,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAID,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist.d.ts","sourceRoot":"","sources":["../../src/commands/dist.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6BtD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerCommand = registerCommand;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const yaml_1 = require("yaml");
|
|
8
|
+
const exit_codes_1 = require("../lib/exit-codes");
|
|
9
|
+
const loader_1 = require("../runtime/config/loader");
|
|
10
|
+
const compose_1 = require("../runtime/distribution/compose");
|
|
11
|
+
const paths_1 = require("../runtime/paths");
|
|
12
|
+
const credentials_1 = require("../runtime/sources/credentials");
|
|
13
|
+
const git_1 = require("../runtime/sources/kinds/git");
|
|
14
|
+
const schema_1 = require("../runtime/sources/schema");
|
|
15
|
+
const DEFAULT_BASE = 'oss';
|
|
16
|
+
const DEFAULT_OUT_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.xema', 'distributions');
|
|
17
|
+
function collect(value, previous) {
|
|
18
|
+
return [...previous, value];
|
|
19
|
+
}
|
|
20
|
+
function registerCommand(program) {
|
|
21
|
+
const dist = program.command('dist').summary('Compose a distribution (build your own platform)');
|
|
22
|
+
dist
|
|
23
|
+
.command('build')
|
|
24
|
+
.summary('Compose a distribution from a base edition + your own biomes')
|
|
25
|
+
.description('Seed a base edition (--base) with its first-party biomes, add your own ' +
|
|
26
|
+
'biomes from git/workspace sources (--git / --source, or a --config ' +
|
|
27
|
+
'sources: block), resolve + validate the whole set with the distribution ' +
|
|
28
|
+
'resolver, and write the distribution (xema-distribution.json + ' +
|
|
29
|
+
'distribution.lock.json) plus a launch xema.config.yaml.')
|
|
30
|
+
.requiredOption('--id <name>', 'Id for the composed distribution (kebab-case)')
|
|
31
|
+
.option('--base <edition>', `Base edition to extend (default: ${DEFAULT_BASE})`)
|
|
32
|
+
.option('--git <name=url>', 'Add a git biome source (repeatable)', collect, [])
|
|
33
|
+
.option('--source <name=path>', 'Add a local biome dir / workspace (repeatable)', collect, [])
|
|
34
|
+
.option('--config <path>', 'Read additional biome sources from a xema.config.yaml')
|
|
35
|
+
.option('--no-allow-third-party', 'Reject third-party (user) biomes (first-party only)')
|
|
36
|
+
.option('--out-dir <dir>', `Where to write the distribution (default: ${DEFAULT_OUT_DIR})`)
|
|
37
|
+
.option('--config-out <path>', 'Also write a launch xema.config.yaml referencing it')
|
|
38
|
+
.action((opts) => {
|
|
39
|
+
try {
|
|
40
|
+
runDistBuild(opts);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
44
|
+
(0, exit_codes_1.exitWith)(exit_codes_1.XemaCliExitCode.GenericError, `xema dist build failed: ${message}`);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function runDistBuild(opts) {
|
|
49
|
+
const id = opts.id;
|
|
50
|
+
if (id === undefined || !/^[a-z][a-z0-9-]*$/.test(id)) {
|
|
51
|
+
return (0, exit_codes_1.exitWith)(exit_codes_1.XemaCliExitCode.ConfigurationError, `--id must be lowercase kebab-case (got "${String(id)}").`);
|
|
52
|
+
}
|
|
53
|
+
const base = opts.base ?? DEFAULT_BASE;
|
|
54
|
+
const log = (line) => console.log(` ${line}`);
|
|
55
|
+
const specs = [
|
|
56
|
+
...(opts.git ?? []).map((s) => gitSpecFrom(s)),
|
|
57
|
+
...(opts.source ?? []).map((s) => workspaceSpecFrom(s)),
|
|
58
|
+
...sourcesFromConfig(opts.config),
|
|
59
|
+
];
|
|
60
|
+
const credentials = new credentials_1.CredentialResolver();
|
|
61
|
+
const userSources = specs.map((spec) => resolveSourceRoot(spec, credentials, log));
|
|
62
|
+
const allowThirdParty = opts.allowThirdParty !== false;
|
|
63
|
+
console.log(`xema dist build — composing "${id}" from base "${base}"`);
|
|
64
|
+
console.log('-'.repeat(60));
|
|
65
|
+
const result = (0, compose_1.composeDistribution)({
|
|
66
|
+
id,
|
|
67
|
+
baseEdition: base,
|
|
68
|
+
userSources,
|
|
69
|
+
allowThirdParty,
|
|
70
|
+
resolvedAt: new Date().toISOString(),
|
|
71
|
+
});
|
|
72
|
+
const outDir = (0, node_path_1.resolve)(process.cwd(), opts.outDir ?? DEFAULT_OUT_DIR, id);
|
|
73
|
+
(0, node_fs_1.mkdirSync)(outDir, { recursive: true });
|
|
74
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(outDir, 'xema-distribution.json'), `${JSON.stringify(result.definition, null, 2)}\n`, 'utf8');
|
|
75
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(outDir, 'distribution.lock.json'), `${JSON.stringify(result.lock, null, 2)}\n`, 'utf8');
|
|
76
|
+
if (opts.configOut !== undefined) {
|
|
77
|
+
const configPath = (0, node_path_1.resolve)(process.cwd(), opts.configOut);
|
|
78
|
+
(0, node_fs_1.writeFileSync)(configPath, renderLaunchConfig(base, specs), 'utf8');
|
|
79
|
+
}
|
|
80
|
+
console.log('');
|
|
81
|
+
console.log(`✓ Composed "${id}": ${String(result.lock.biomes.length)} biome(s) ` +
|
|
82
|
+
`(${String(result.baseBiomeCount)} base + ${String(result.userBiomeCount)} user` +
|
|
83
|
+
`${result.overridden.length > 0 ? `, ${String(result.overridden.length)} overridden` : ''}).`);
|
|
84
|
+
console.log(` distribution → ${outDir}/`);
|
|
85
|
+
if (opts.configOut !== undefined) {
|
|
86
|
+
console.log(` launch config → ${(0, node_path_1.resolve)(process.cwd(), opts.configOut)}`);
|
|
87
|
+
console.log('');
|
|
88
|
+
console.log(`Next: xema dev --config ${opts.configOut} (native — user biomes run from source)`);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log(`Next: xema up --edition ${id} (add a launch config with --config-out for your git biomes)`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function resolveSourceRoot(spec, credentials, log) {
|
|
96
|
+
if (spec.kind === schema_1.SourceKind.Workspace) {
|
|
97
|
+
const root = spec.root !== undefined ? (0, node_path_1.resolve)(process.cwd(), spec.root) : (0, paths_1.findMonorepoRoot)();
|
|
98
|
+
if (root === null) {
|
|
99
|
+
return (0, exit_codes_1.exitWith)(exit_codes_1.XemaCliExitCode.ConfigurationError, `source "${spec.name}": no root (not in a monorepo and no path given).`);
|
|
100
|
+
}
|
|
101
|
+
return { name: spec.name, root };
|
|
102
|
+
}
|
|
103
|
+
if (spec.kind === schema_1.SourceKind.Git) {
|
|
104
|
+
log(`cloning ${spec.url}${spec.ref !== undefined ? `@${spec.ref}` : ''} …`);
|
|
105
|
+
return { name: spec.name, root: (0, git_1.checkoutGitSource)(spec, credentials, log) };
|
|
106
|
+
}
|
|
107
|
+
return (0, exit_codes_1.exitWith)(exit_codes_1.XemaCliExitCode.ConfigurationError, `source "${spec.name}" (${spec.kind}) can't seed a composition — use workspace or git ` +
|
|
108
|
+
`(npm/oci are install-time).`);
|
|
109
|
+
}
|
|
110
|
+
function gitSpecFrom(raw) {
|
|
111
|
+
const { name, value } = splitNameValue(raw, '--git');
|
|
112
|
+
return { name, kind: schema_1.SourceKind.Git, url: value };
|
|
113
|
+
}
|
|
114
|
+
function workspaceSpecFrom(raw) {
|
|
115
|
+
const { name, value } = splitNameValue(raw, '--source');
|
|
116
|
+
return { name, kind: schema_1.SourceKind.Workspace, root: value };
|
|
117
|
+
}
|
|
118
|
+
function splitNameValue(raw, flag) {
|
|
119
|
+
const eq = raw.indexOf('=');
|
|
120
|
+
if (eq <= 0) {
|
|
121
|
+
return (0, exit_codes_1.exitWith)(exit_codes_1.XemaCliExitCode.ConfigurationError, `${flag} expects <name>=<value>, got "${raw}".`);
|
|
122
|
+
}
|
|
123
|
+
return { name: raw.slice(0, eq).trim(), value: raw.slice(eq + 1).trim() };
|
|
124
|
+
}
|
|
125
|
+
function sourcesFromConfig(configPath) {
|
|
126
|
+
if (configPath === undefined) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const loaded = (0, loader_1.loadXemaConfig)({ explicit: configPath });
|
|
130
|
+
return loaded.config.sources.filter((s) => s.kind === schema_1.SourceKind.Workspace || s.kind === schema_1.SourceKind.Git);
|
|
131
|
+
}
|
|
132
|
+
function renderLaunchConfig(baseEdition, sources) {
|
|
133
|
+
const config = {
|
|
134
|
+
edition: baseEdition,
|
|
135
|
+
app: { substrate: 'native' },
|
|
136
|
+
sources,
|
|
137
|
+
};
|
|
138
|
+
const header = '# xema.config.yaml — generated by `xema dist build`\n' +
|
|
139
|
+
`# Base edition "${baseEdition}" + your biome sources (launched natively from source).\n\n`;
|
|
140
|
+
return header + (0, yaml_1.stringify)(config, { aliasDuplicateObjects: false });
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=dist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist.js","sourceRoot":"","sources":["../../src/commands/dist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DiscoveredBiome } from '../sources/manifest-walk';
|
|
2
|
+
import type { AvailableBiome } from '@xemahq/distribution-resolver';
|
|
3
|
+
import type { LockedBiome } from '@xemahq/kernel-contracts/distribution';
|
|
4
|
+
export declare function lockedBiomeToAvailable(b: LockedBiome): AvailableBiome;
|
|
5
|
+
export declare function discoveredBiomeToAvailable(b: DiscoveredBiome, sourceName: string): AvailableBiome;
|
|
6
|
+
export declare function mergeAvailableBiomes(base: readonly AvailableBiome[], user: readonly AvailableBiome[]): {
|
|
7
|
+
biomes: AvailableBiome[];
|
|
8
|
+
overridden: string[];
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=available-biome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"available-biome.d.ts","sourceRoot":"","sources":["../../../src/runtime/distribution/available-biome.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAWzE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAarE;AASD,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAmBjG;AAOD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,cAAc,EAAE,EAC/B,IAAI,EAAE,SAAS,cAAc,EAAE,GAC9B;IAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAapD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lockedBiomeToAvailable = lockedBiomeToAvailable;
|
|
4
|
+
exports.discoveredBiomeToAvailable = discoveredBiomeToAvailable;
|
|
5
|
+
exports.mergeAvailableBiomes = mergeAvailableBiomes;
|
|
6
|
+
const biome_1 = require("@xemahq/kernel-contracts/biome");
|
|
7
|
+
function lockedBiomeToAvailable(b) {
|
|
8
|
+
return {
|
|
9
|
+
id: b.id,
|
|
10
|
+
version: b.version,
|
|
11
|
+
tier: b.tier,
|
|
12
|
+
target: b.target,
|
|
13
|
+
origin: b.origin,
|
|
14
|
+
audience: b.audience ?? biome_1.BiomeAudience.Org,
|
|
15
|
+
requires: b.requiresServerBiomes ?? [],
|
|
16
|
+
repo: b.repo,
|
|
17
|
+
path: b.path,
|
|
18
|
+
services: b.services,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function discoveredBiomeToAvailable(b, sourceName) {
|
|
22
|
+
const manifest = b.manifest;
|
|
23
|
+
const trustTier = 'trustTier' in manifest.xema ? manifest.xema.trustTier : undefined;
|
|
24
|
+
return {
|
|
25
|
+
id: b.id,
|
|
26
|
+
version: b.version,
|
|
27
|
+
tier: b.tier,
|
|
28
|
+
target: b.target === 'server' ? biome_1.BiomeTarget.Server : biome_1.BiomeTarget.Web,
|
|
29
|
+
origin: trustTier ?? biome_1.BiomeOrigin.ThirdParty,
|
|
30
|
+
audience: (0, biome_1.getBiomeAudience)(manifest),
|
|
31
|
+
requires: b.requires,
|
|
32
|
+
repo: `source:${sourceName}`,
|
|
33
|
+
path: b.biomeDir.length > 0 ? b.biomeDir : '.',
|
|
34
|
+
services: b.services.map((s) => s.name),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function mergeAvailableBiomes(base, user) {
|
|
38
|
+
const byId = new Map();
|
|
39
|
+
for (const b of base) {
|
|
40
|
+
byId.set(b.id, b);
|
|
41
|
+
}
|
|
42
|
+
const overridden = [];
|
|
43
|
+
for (const b of user) {
|
|
44
|
+
if (byId.has(b.id)) {
|
|
45
|
+
overridden.push(b.id);
|
|
46
|
+
}
|
|
47
|
+
byId.set(b.id, b);
|
|
48
|
+
}
|
|
49
|
+
return { biomes: [...byId.values()], overridden };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=available-biome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"available-biome.js","sourceRoot":"","sources":["../../../src/runtime/distribution/available-biome.ts"],"names":[],"mappings":";;AAsBA,wDAaC;AASD,gEAmBC;AAOD,oDAgBC;AAtFD,0DAOwC;AAexC,SAAgB,sBAAsB,CAAC,CAAc;IACnD,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,qBAAa,CAAC,GAAG;QACzC,QAAQ,EAAE,CAAC,CAAC,oBAAoB,IAAI,EAAE;QACtC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;KACrB,CAAC;AACJ,CAAC;AASD,SAAgB,0BAA0B,CAAC,CAAkB,EAAE,UAAkB;IAC/E,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAyB,CAAC;IAG7C,MAAM,SAAS,GAAG,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAiB;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAW,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAW,CAAC,GAAG;QACpE,MAAM,EAAE,SAAS,IAAI,mBAAW,CAAC,UAAU;QAC3C,QAAQ,EAAE,IAAA,wBAAgB,EAAC,QAAQ,CAAC;QACpC,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,IAAI,EAAE,UAAU,UAAU,EAAE;QAG5B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;QAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KACxC,CAAC;AACJ,CAAC;AAOD,SAAgB,oBAAoB,CAClC,IAA+B,EAC/B,IAA+B;IAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Distribution, DistributionLock } from '@xemahq/kernel-contracts/distribution';
|
|
2
|
+
export interface UserBiomeSource {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly root: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ComposeInput {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly displayName?: string;
|
|
9
|
+
readonly baseEdition: string;
|
|
10
|
+
readonly userSources: readonly UserBiomeSource[];
|
|
11
|
+
readonly allowThirdParty: boolean;
|
|
12
|
+
readonly resolvedAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ComposeResult {
|
|
15
|
+
readonly definition: Distribution;
|
|
16
|
+
readonly lock: DistributionLock;
|
|
17
|
+
readonly baseBiomeCount: number;
|
|
18
|
+
readonly userBiomeCount: number;
|
|
19
|
+
readonly overridden: readonly string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function composeDistribution(input: ComposeInput): ComposeResult;
|
|
22
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/runtime/distribution/compose.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAG5F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAE3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,WAAW,EAAE,SAAS,eAAe,EAAE,CAAC;IAEjD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAElC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAqDtE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.composeDistribution = composeDistribution;
|
|
4
|
+
const distribution_resolver_1 = require("@xemahq/distribution-resolver");
|
|
5
|
+
const biome_1 = require("@xemahq/kernel-contracts/biome");
|
|
6
|
+
const lock_loader_1 = require("../lock-loader");
|
|
7
|
+
const available_biome_1 = require("./available-biome");
|
|
8
|
+
const manifest_walk_1 = require("../sources/manifest-walk");
|
|
9
|
+
function composeDistribution(input) {
|
|
10
|
+
const { lock: baseLock } = (0, lock_loader_1.loadDistributionLock)({ edition: input.baseEdition });
|
|
11
|
+
const baseBiomes = baseLock.biomes.map(available_biome_1.lockedBiomeToAvailable);
|
|
12
|
+
const userBiomes = [];
|
|
13
|
+
for (const source of input.userSources) {
|
|
14
|
+
const { biomes } = (0, manifest_walk_1.walkBiomeManifests)(source.root);
|
|
15
|
+
for (const b of biomes) {
|
|
16
|
+
userBiomes.push((0, available_biome_1.discoveredBiomeToAvailable)(b, source.name));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const { biomes: pool, overridden } = (0, available_biome_1.mergeAvailableBiomes)(baseBiomes, userBiomes);
|
|
20
|
+
const definition = {
|
|
21
|
+
schemaVersion: 1,
|
|
22
|
+
id: input.id,
|
|
23
|
+
displayName: input.displayName ?? input.id,
|
|
24
|
+
description: `Custom distribution composed from "${input.baseEdition}" + ${String(input.userSources.length)} user source(s).`,
|
|
25
|
+
include: pool.map((b) => ({ biome: b.id })),
|
|
26
|
+
trustPolicy: {
|
|
27
|
+
allow: input.allowThirdParty
|
|
28
|
+
? [biome_1.BiomeOrigin.FirstParty, biome_1.BiomeOrigin.ThirdParty]
|
|
29
|
+
: [biome_1.BiomeOrigin.FirstParty],
|
|
30
|
+
},
|
|
31
|
+
platformServices: baseLock.platformServices.map((ps) => ({ name: ps.name, tier: ps.tier })),
|
|
32
|
+
};
|
|
33
|
+
const resolved = (0, distribution_resolver_1.resolveDistribution)(definition, pool, { resolvedAt: input.resolvedAt });
|
|
34
|
+
const requiresById = new Map(pool.map((b) => [b.id, b.requires]));
|
|
35
|
+
const lock = {
|
|
36
|
+
...resolved,
|
|
37
|
+
biomes: resolved.biomes.map((b) => ({
|
|
38
|
+
...b,
|
|
39
|
+
requiresServerBiomes: requiresById.get(b.id) ?? [],
|
|
40
|
+
})),
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
definition,
|
|
44
|
+
lock,
|
|
45
|
+
baseBiomeCount: baseBiomes.length,
|
|
46
|
+
userBiomeCount: userBiomes.length,
|
|
47
|
+
overridden,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/runtime/distribution/compose.ts"],"names":[],"mappings":";;AAmDA,kDAqDC;AAxGD,yEAAyF;AACzF,0DAA6D;AAE7D,gDAAsD;AACtD,uDAI2B;AAC3B,4DAA8D;AA0C9D,SAAgB,mBAAmB,CAAC,KAAmB;IACrD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAA,kCAAoB,EAAC,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAChF,MAAM,UAAU,GAAqB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,wCAAsB,CAAC,CAAC;IAEjF,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,kCAAkB,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,UAAU,CAAC,IAAI,CAAC,IAAA,4CAA0B,EAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAA,sCAAoB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAElF,MAAM,UAAU,GAAiB;QAC/B,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE;QAC1C,WAAW,EAAE,sCAAsC,KAAK,CAAC,WAAW,OAAO,MAAM,CAC/E,KAAK,CAAC,WAAW,CAAC,MAAM,CACzB,kBAAkB;QAInB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,WAAW,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,eAAe;gBAC1B,CAAC,CAAC,CAAC,mBAAW,CAAC,UAAU,EAAE,mBAAW,CAAC,UAAU,CAAC;gBAClD,CAAC,CAAC,CAAC,mBAAW,CAAC,UAAU,CAAC;SAC7B;QACD,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;KAC5F,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,2CAAmB,EAAC,UAAU,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAIzF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAqB;QAC7B,GAAG,QAAQ;QACX,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,CAAC;YACJ,oBAAoB,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;SACnD,CAAC,CAAC;KACJ,CAAC;IAEF,OAAO;QACL,UAAU;QACV,IAAI;QACJ,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,cAAc,EAAE,UAAU,CAAC,MAAM;QACjC,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/runtime/paths.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ export declare function findMonorepoRoot(startDir?: string): string | null;
|
|
|
2
2
|
export declare function listAvailableEditions(): string[];
|
|
3
3
|
export interface ArtifactResolution {
|
|
4
4
|
readonly path: string;
|
|
5
|
-
readonly source: 'flag' | 'env' | 'vendored' | 'monorepo';
|
|
5
|
+
readonly source: 'flag' | 'env' | 'user' | 'vendored' | 'monorepo';
|
|
6
6
|
}
|
|
7
|
+
export declare function userDistributionsDir(): string;
|
|
7
8
|
export interface ResolveArtifactOptions {
|
|
8
9
|
readonly explicit?: string | undefined;
|
|
9
10
|
readonly envVar?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"AAsBA,wBAAgB,gBAAgB,CAAC,QAAQ,GAAE,MAAkB,GAAG,MAAM,GAAG,IAAI,CAY5E;AAgBD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAShD;AAmBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;CACpE;AAGD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,MAAM,WAAW,sBAAsB;IAErC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAErC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAcD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,CAiC5F;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,CAwBrF;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAG,kBAAkB,CAwBtG"}
|
package/dist/runtime/paths.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findMonorepoRoot = findMonorepoRoot;
|
|
4
4
|
exports.listAvailableEditions = listAvailableEditions;
|
|
5
|
+
exports.userDistributionsDir = userDistributionsDir;
|
|
5
6
|
exports.resolveDistributionLockPath = resolveDistributionLockPath;
|
|
6
7
|
exports.resolveImageLockPath = resolveImageLockPath;
|
|
7
8
|
exports.resolveBootGraphPath = resolveBootGraphPath;
|
|
8
9
|
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_os_1 = require("node:os");
|
|
9
11
|
const node_path_1 = require("node:path");
|
|
10
12
|
const MONOREPO_ROOT_MARKERS = ['pnpm-workspace.yaml', 'repos-infra/xema-distributions'];
|
|
11
13
|
function findMonorepoRoot(startDir = __dirname) {
|
|
@@ -31,6 +33,7 @@ function listAvailableEditions() {
|
|
|
31
33
|
collectEditionsFrom((0, node_path_1.join)(monorepo, 'repos-infra', 'xema-distributions'), editions);
|
|
32
34
|
}
|
|
33
35
|
collectEditionsFrom(vendoredAssetsDir(), editions);
|
|
36
|
+
collectEditionsFrom(userDistributionsDir(), editions);
|
|
34
37
|
return [...editions].sort();
|
|
35
38
|
}
|
|
36
39
|
function collectEditionsFrom(dir, into) {
|
|
@@ -50,6 +53,9 @@ function collectEditionsFrom(dir, into) {
|
|
|
50
53
|
}
|
|
51
54
|
}
|
|
52
55
|
}
|
|
56
|
+
function userDistributionsDir() {
|
|
57
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), '.xema', 'distributions');
|
|
58
|
+
}
|
|
53
59
|
function firstExisting(candidates) {
|
|
54
60
|
for (const c of candidates) {
|
|
55
61
|
if ((0, node_fs_1.existsSync)(c.path)) {
|
|
@@ -67,6 +73,10 @@ function resolveDistributionLockPath(opts) {
|
|
|
67
73
|
if (opts.envVar) {
|
|
68
74
|
candidates.push({ path: absolutize(opts.envVar), source: 'env' });
|
|
69
75
|
}
|
|
76
|
+
candidates.push({
|
|
77
|
+
path: (0, node_path_1.join)(userDistributionsDir(), opts.edition, 'distribution.lock.json'),
|
|
78
|
+
source: 'user',
|
|
79
|
+
});
|
|
70
80
|
if (monorepo) {
|
|
71
81
|
candidates.push({
|
|
72
82
|
path: (0, node_path_1.join)(monorepo, 'repos-infra/xema-distributions', opts.edition, 'distribution.lock.json'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/runtime/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { type LockIndex } from '../../roster';
|
|
2
|
+
import type { CredentialResolver } from '../credentials';
|
|
2
3
|
import type { GitSource } from '../schema';
|
|
3
4
|
import type { SourceResolveContext } from '../types';
|
|
5
|
+
type LogFn = (line: string) => void;
|
|
4
6
|
export declare function resolveGitSource(spec: GitSource, ctx: SourceResolveContext): LockIndex | null;
|
|
7
|
+
export declare function checkoutGitSource(spec: GitSource, credentials: CredentialResolver, log?: LogFn): string;
|
|
8
|
+
export {};
|
|
5
9
|
//# sourceMappingURL=git.d.ts.map
|
|
@@ -1 +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;
|
|
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,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAmBpC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAgB7F;AAOD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,kBAAkB,EAC/B,GAAG,CAAC,EAAE,KAAK,GACV,MAAM,CAMR"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveGitSource = resolveGitSource;
|
|
4
|
+
exports.checkoutGitSource = checkoutGitSource;
|
|
4
5
|
const node_child_process_1 = require("node:child_process");
|
|
5
6
|
const node_fs_1 = require("node:fs");
|
|
6
7
|
const node_os_1 = require("node:os");
|
|
@@ -16,20 +17,24 @@ function resolveGitSource(spec, ctx) {
|
|
|
16
17
|
`(a clone is source, not an image; use native substrate for git biomes).`);
|
|
17
18
|
return null;
|
|
18
19
|
}
|
|
19
|
-
const
|
|
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);
|
|
20
|
+
const dir = checkoutGitSource(spec, ctx.credentials, ctx.log);
|
|
23
21
|
const { biomes } = (0, manifest_walk_1.walkBiomeManifests)(dir);
|
|
24
22
|
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}`);
|
|
23
|
+
ctx.log?.(`source "${spec.name}" (git): ${String(serverBiomes.length)} biome(s) from ${spec.url}@${spec.ref ?? 'HEAD'}`);
|
|
26
24
|
return (0, roster_1.indexFromDiscoveredBiomes)(serverBiomes, { sourceName: spec.name, sourceRoot: dir });
|
|
27
25
|
}
|
|
28
|
-
function
|
|
26
|
+
function checkoutGitSource(spec, credentials, log) {
|
|
27
|
+
const token = credentials.resolve(spec.authTokenEnv, spec.name);
|
|
28
|
+
const ref = spec.ref ?? 'HEAD';
|
|
29
|
+
const dir = (0, node_path_1.join)(GIT_CACHE_DIR, spec.name);
|
|
30
|
+
ensureClone(spec, dir, ref, token, log);
|
|
31
|
+
return dir;
|
|
32
|
+
}
|
|
33
|
+
function ensureClone(spec, dir, ref, token, log) {
|
|
29
34
|
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, REF_MARKER))) {
|
|
30
35
|
const cached = (0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, REF_MARKER), 'utf8').trim();
|
|
31
36
|
if (cached === ref) {
|
|
32
|
-
|
|
37
|
+
log?.(`source "${spec.name}" (git): reusing cached clone (${ref}).`);
|
|
33
38
|
return;
|
|
34
39
|
}
|
|
35
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/git.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/runtime/sources/kinds/git.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/xema",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Xema OS global CLI (plan v4.3 §6 Phase J). Single binary day-0 onboarding: `npm i -g @xemahq/xema && xema dev` boots the whole stack; `xema biome scaffold` / `install` / `publish` / `lint` author and ship biomes; `xema run <capability>` invokes through the local capability-router. Multi-platform: works without pnpm or any monorepo clone.",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"@nestjs/common": "11.1.13",
|
|
22
22
|
"@nestjs/core": "11.1.13",
|
|
23
23
|
"@nestjs/platform-express": "11.1.13",
|
|
24
|
+
"@xemahq/distribution-resolver": "^0.1.1",
|
|
24
25
|
"@xemahq/kernel-contracts": "^0.22.0",
|
|
25
26
|
"@xemahq/kernel-state-runtime": "^0.1.5",
|
|
26
27
|
"@xemahq/service-registry-nest": "^0.1.9",
|