@xemahq/create-biome 0.1.2 → 0.2.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.
@@ -1,20 +1,62 @@
1
- export function buildManifest(input) {
1
+ const XEMA_ENGINE_RANGE = '^1.0.0';
2
+ const DEFAULT_API_REQUIRES_SERVICES = ['identity-api'];
3
+ export function buildServerManifest(input) {
2
4
  return {
3
- schemaVersion: 1,
4
- id: input.biomeId,
5
- name: input.displayName,
5
+ name: firstPartyPackageName(input.biomeId),
6
6
  version: '0.1.0',
7
- trustTier: 'third-party',
8
- engines: {
9
- xema: '>=1.0.0',
7
+ xema: {
8
+ id: input.biomeId,
9
+ displayName: input.displayName,
10
+ description: input.description,
11
+ scope: input.scope,
12
+ target: 'server',
13
+ engines: { xema: XEMA_ENGINE_RANGE },
14
+ requiresCapabilities: [],
15
+ exposesCapabilities: [],
16
+ contributions: { directory: './contributions' },
17
+ ships: {
18
+ apis: [
19
+ {
20
+ name: input.apiName,
21
+ path: `./api/${input.apiName}`,
22
+ displayName: `${input.displayName} API`,
23
+ serviceKind: 'biome-api',
24
+ requiresServices: DEFAULT_API_REQUIRES_SERVICES,
25
+ exposesCapabilities: [],
26
+ },
27
+ ],
28
+ },
10
29
  },
11
- requiresCapabilities: [],
12
- exposesCapabilities: [],
13
- contributes: [],
14
30
  };
15
31
  }
16
- export function npmPackageName(biomeId) {
17
- return `@xemahq-biomes/${biomeId}`;
32
+ export function buildWebManifest(input) {
33
+ const base = {
34
+ name: firstPartyPackageName(input.biomeId),
35
+ version: '0.1.0',
36
+ xema: {
37
+ id: input.biomeId,
38
+ displayName: input.displayName,
39
+ description: input.description,
40
+ scope: input.scope,
41
+ target: 'web',
42
+ },
43
+ };
44
+ if (input.requiresServerBiomes.length === 0) {
45
+ return base;
46
+ }
47
+ return {
48
+ ...base,
49
+ xema: { ...base.xema, requiresServerBiomes: input.requiresServerBiomes },
50
+ };
51
+ }
52
+ export function firstPartyPackageName(biomeId) {
53
+ return `@xemahq/biomes-${biomeId}`;
54
+ }
55
+ export function apiNameForBiome(biomeId) {
56
+ return `${biomeId}-api`;
57
+ }
58
+ export function webBiomeId(biomeId) {
59
+ return `${biomeId}-web`;
18
60
  }
19
61
  const BIOME_ID_PATTERN = /^[a-z][a-z0-9-]{1,61}[a-z0-9]$/;
20
62
  export function validateBiomeId(biomeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"AAqCA,MAAM,UAAU,aAAa,CAAC,KAA2B;IACvD,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,EAAE,EAAE,KAAK,CAAC,OAAO;QACjB,IAAI,EAAE,KAAK,CAAC,WAAW;QACvB,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;SAChB;QACD,oBAAoB,EAAE,EAAE;QACxB,mBAAmB,EAAE,EAAE;QACvB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACrC,CAAC;AAOD,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,aAAa,OAAO,8FAA8F;SAC3H,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"manifest-builder.js","sourceRoot":"","sources":["../../src/lib/manifest-builder.ts"],"names":[],"mappings":"AAgFA,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAQnC,MAAM,6BAA6B,GAAsB,CAAC,cAAc,CAAC,CAAC;AAE1E,MAAM,UAAU,mBAAmB,CACjC,KAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACpC,oBAAoB,EAAE,EAAE;YACxB,mBAAmB,EAAE,EAAE;YACvB,aAAa,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE;YAC/C,KAAK,EAAE;gBACL,IAAI,EAAE;oBACJ;wBACE,IAAI,EAAE,KAAK,CAAC,OAAO;wBACnB,IAAI,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE;wBAC9B,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,MAAM;wBACvC,WAAW,EAAE,WAAW;wBACxB,gBAAgB,EAAE,6BAA6B;wBAC/C,mBAAmB,EAAE,EAAE;qBACxB;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAA8B;IAE9B,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1C,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE;YACJ,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAc;SACvB;KACF,CAAC;IACF,IAAI,KAAK,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAAE;KACzE,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACrC,CAAC;AAMD,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,GAAG,OAAO,MAAM,CAAC;AAC1B,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,GAAG,OAAO,MAAM,CAAC;AAC1B,CAAC;AAQD,MAAM,gBAAgB,GAAG,gCAAgC,CAAC;AAE1D,MAAM,UAAU,eAAe,CAC7B,OAAe;IAEf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,aAAa,OAAO,8FAA8F;SAC3H,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -1,16 +1,22 @@
1
- import { buildManifest } from './manifest-builder.js';
2
- import { type BiomeTemplateId } from './template.js';
1
+ import { BiomeKind } from './kind.js';
2
+ import { type ManifestScope } from './manifest-builder.js';
3
3
  export interface ScaffoldBiomeInput {
4
4
  readonly biomeId: string;
5
5
  readonly displayName: string;
6
6
  readonly description: string;
7
- readonly template: BiomeTemplateId;
8
- readonly targetDir: string;
7
+ readonly kind: BiomeKind;
8
+ readonly scope: ManifestScope;
9
+ readonly repoRoot: string;
10
+ readonly serverBiomesDir?: string;
11
+ readonly webBiomesDir?: string;
12
+ }
13
+ export interface ScaffoldedBiomeDir {
14
+ readonly target: 'server' | 'web';
15
+ readonly dir: string;
9
16
  }
10
17
  export interface ScaffoldBiomeResult {
11
- readonly targetDir: string;
18
+ readonly dirs: readonly ScaffoldedBiomeDir[];
12
19
  readonly filesWritten: readonly string[];
13
- readonly manifest: ReturnType<typeof buildManifest>;
14
20
  }
15
21
  export declare function scaffoldBiome(input: ScaffoldBiomeInput): Promise<ScaffoldBiomeResult>;
16
22
  export declare class ScaffolderError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../src/lib/scaffolder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAmC,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AASlE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;CACrD;AAUD,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoC3F;AAOD,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../src/lib/scaffolder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAa/B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAO9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAK1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAMlC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAWD,wBAAsB,aAAa,CACjC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC,CA4B9B;AAgGD,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B"}
@@ -1,41 +1,90 @@
1
1
  import { mkdir, writeFile } from 'node:fs/promises';
2
2
  import { existsSync } from 'node:fs';
3
3
  import * as path from 'node:path';
4
- import { buildManifest, npmPackageName, validateBiomeId } from './manifest-builder.js';
5
- import { buildPackageJson } from './package-builder.js';
6
- import { getTemplate } from './template.js';
7
- import { renderTemplateFiles } from './template-files.js';
4
+ import { BiomeKind } from './kind.js';
5
+ import { apiNameForBiome, buildServerManifest, buildWebManifest, validateBiomeId, webBiomeId, } from './manifest-builder.js';
6
+ import { renderServerBiomeFiles, webBiomeFiles, } from './template-files.js';
8
7
  export async function scaffoldBiome(input) {
9
8
  const idCheck = validateBiomeId(input.biomeId);
10
9
  if (!idCheck.ok) {
11
10
  throw new ScaffolderError(idCheck.reason);
12
11
  }
13
- if (existsSync(input.targetDir)) {
14
- throw new ScaffolderError(`target directory already exists: ${input.targetDir} — choose a fresh path or delete it first`);
12
+ const dirs = [];
13
+ const filesWritten = [];
14
+ const wantsServer = input.kind === BiomeKind.Service || input.kind === BiomeKind.Full;
15
+ const wantsWeb = input.kind === BiomeKind.Web || input.kind === BiomeKind.Full;
16
+ if (wantsServer) {
17
+ const serverDir = resolveServerDir(input);
18
+ refuseExisting(serverDir);
19
+ await writeServerBiome(input, serverDir, filesWritten);
20
+ dirs.push({ target: 'server', dir: serverDir });
21
+ }
22
+ if (wantsWeb) {
23
+ const webDir = resolveWebDir(input);
24
+ refuseExisting(webDir);
25
+ await writeWebBiome(input, webDir, filesWritten);
26
+ dirs.push({ target: 'web', dir: webDir });
15
27
  }
16
- const template = getTemplate(input.template);
17
- const manifest = buildManifest({
28
+ return { dirs, filesWritten };
29
+ }
30
+ function resolveServerDir(input) {
31
+ if (!input.serverBiomesDir) {
32
+ throw new ScaffolderError('serverBiomesDir is required for a service/full biome (e.g. repos/xema-community/biomes)');
33
+ }
34
+ return path.resolve(input.repoRoot, input.serverBiomesDir, input.biomeId);
35
+ }
36
+ function resolveWebDir(input) {
37
+ if (!input.webBiomesDir) {
38
+ throw new ScaffolderError('webBiomesDir is required for a web/full biome (e.g. submodules/xema-host-web/biomes)');
39
+ }
40
+ const tier = input.scope;
41
+ return path.resolve(input.repoRoot, input.webBiomesDir, tier, webBiomeId(input.biomeId));
42
+ }
43
+ function refuseExisting(dir) {
44
+ if (existsSync(dir)) {
45
+ throw new ScaffolderError(`target directory already exists: ${dir} — choose a fresh id or delete it first`);
46
+ }
47
+ }
48
+ async function writeServerBiome(input, serverDir, written) {
49
+ const ctx = {
18
50
  biomeId: input.biomeId,
19
51
  displayName: input.displayName,
20
52
  description: input.description,
21
- template,
53
+ };
54
+ const manifest = buildServerManifest({
55
+ biomeId: input.biomeId,
56
+ displayName: input.displayName,
57
+ description: input.description,
58
+ scope: input.scope,
59
+ apiName: apiNameForBiome(input.biomeId),
22
60
  });
23
- const pkg = buildPackageJson({
24
- biomePackageName: npmPackageName(input.biomeId),
25
- template,
61
+ await mkdir(serverDir, { recursive: true });
62
+ await writeJson(serverDir, 'xema-biome.json', manifest, written);
63
+ for (const [rel, content] of Object.entries(renderServerBiomeFiles(ctx))) {
64
+ await writeText(serverDir, rel, content, written);
65
+ }
66
+ }
67
+ async function writeWebBiome(input, webDir, written) {
68
+ const wid = webBiomeId(input.biomeId);
69
+ const navLabel = input.displayName;
70
+ const manifest = buildWebManifest({
71
+ biomeId: wid,
72
+ displayName: `${input.displayName} (Web)`,
73
+ description: input.description,
74
+ scope: input.scope,
75
+ requiresServerBiomes: input.kind === BiomeKind.Full ? [input.biomeId] : [],
26
76
  });
27
- const templateFiles = renderTemplateFiles(template.id, {
77
+ await mkdir(webDir, { recursive: true });
78
+ await writeJson(webDir, 'xema-biome.json', manifest, written);
79
+ for (const [rel, content] of Object.entries(webBiomeFiles({
28
80
  biomeId: input.biomeId,
29
81
  displayName: input.displayName,
30
- });
31
- await mkdir(input.targetDir, { recursive: true });
32
- const filesWritten = [];
33
- await writeJson(input.targetDir, 'package.json', pkg, filesWritten);
34
- await writeJson(input.targetDir, 'xema-biome.json', manifest, filesWritten);
35
- for (const [relativePath, content] of Object.entries(templateFiles)) {
36
- await writeText(input.targetDir, relativePath, content, filesWritten);
82
+ description: input.description,
83
+ webBiomeId: wid,
84
+ navLabel,
85
+ }))) {
86
+ await writeText(webDir, rel, content, written);
37
87
  }
38
- return { targetDir: input.targetDir, filesWritten, manifest };
39
88
  }
40
89
  export class ScaffolderError extends Error {
41
90
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../src/lib/scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../src/lib/scaffolder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
- import { BiomeTemplateId } from './template.js';
2
1
  export interface TemplateContext {
3
2
  readonly biomeId: string;
4
3
  readonly displayName: string;
4
+ readonly description: string;
5
5
  }
6
6
  export type TemplateFiles = Readonly<Record<string, string>>;
7
- export declare function renderTemplateFiles(templateId: BiomeTemplateId, ctx: TemplateContext): TemplateFiles;
7
+ export interface WebTemplateContext extends TemplateContext {
8
+ readonly webBiomeId: string;
9
+ readonly navLabel: string;
10
+ }
11
+ export declare function webBiomeFiles(ctx: WebTemplateContext): TemplateFiles;
12
+ export declare function renderServerBiomeFiles(ctx: TemplateContext): TemplateFiles;
8
13
  //# sourceMappingURL=template-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-files.d.ts","sourceRoot":"","sources":["../../src/lib/template-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAYhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7D,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,eAAe,EAC3B,GAAG,EAAE,eAAe,GACnB,aAAa,CAOf"}
1
+ {"version":3,"file":"template-files.d.ts","sourceRoot":"","sources":["../../src/lib/template-files.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAgc7D,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IAEzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD,wBAAgB,aAAa,CAAC,GAAG,EAAE,kBAAkB,GAAG,aAAa,CA2CpE;AA6HD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,aAAa,CAK1E"}