@biffo/cli 0.303.4 → 0.304.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 (2) hide show
  1. package/dist/index.js +69 -4
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -4993,6 +4993,15 @@ var DnsSchema = z5.object({
4993
4993
  mode: z5.enum(["managed-route53", "external", "none"]).default("managed-route53"),
4994
4994
  domain: z5.string().min(1).optional()
4995
4995
  });
4996
+ var DesignTokensSchema = z5.object({
4997
+ package: z5.string().min(1).describe(
4998
+ `npm package providing this instance's real type scale, e.g. "@tabsii-com/ui". Added as an apps/frontend dependency of every new sibling, alongside (not instead of) @biffo/design-tokens -- biffo-scale-guard's own bin still ships from there.`
4999
+ ),
5000
+ version: z5.string().min(1).default("*").describe("Version range to pin `package` at in a new sibling's apps/frontend/package.json"),
5001
+ path: z5.string().min(1).describe(
5002
+ `Path to the CSS file declaring the --text-*/--space-* scale, relative to the package root (e.g. "dist/tokens.css"). Used for both the new sibling's globals.css @import and biffo-scale-guard's --tokens argument.`
5003
+ )
5004
+ });
4996
5005
  var BiffoConfigSchema = z5.object({
4997
5006
  $schema: z5.string().optional(),
4998
5007
  project: z5.object({
@@ -5013,7 +5022,8 @@ var BiffoConfigSchema = z5.object({
5013
5022
  schema_path: z5.string().nullable().default(null),
5014
5023
  migrations_path: z5.string().default("services/api/migrations")
5015
5024
  }).default({}),
5016
- modules: ModulesSchema.default({})
5025
+ modules: ModulesSchema.default({}),
5026
+ design_tokens: DesignTokensSchema.optional()
5017
5027
  }).superRefine((config, ctx) => {
5018
5028
  const dns = resolveDnsConfig(config);
5019
5029
  if (dns.mode !== "none" && !dns.domain) {
@@ -6997,6 +7007,9 @@ async function runSiblingCreateCommand(name, options) {
6997
7007
  `
6998
7008
  );
6999
7009
  }
7010
+ async function defaultRelockFrontendDeps(cwd) {
7011
+ await execa("pnpm", ["install", "--lockfile-only"], { cwd });
7012
+ }
7000
7013
  async function runSiblingCreate(github, aws, coreAws, git, config, session, options) {
7001
7014
  const totalSteps = 9;
7002
7015
  const { org, repo } = githubRepo(config);
@@ -7059,7 +7072,8 @@ async function runSiblingCreate(github, aws, coreAws, git, config, session, opti
7059
7072
  cloneUrl,
7060
7073
  config,
7061
7074
  options.coreConfig,
7062
- options.githubToken
7075
+ options.githubToken,
7076
+ options.relockFrontendDeps ?? defaultRelockFrontendDeps
7063
7077
  );
7064
7078
  }
7065
7079
  markSiblingStepComplete(session, "push_skeleton");
@@ -7219,7 +7233,7 @@ async function resolveCoreIdentity(coreAws, coreConfig, environments) {
7219
7233
  }
7220
7234
  return coreIdentity;
7221
7235
  }
7222
- async function pushSkeleton(git, skeletonRoot, cloneUrl, config, coreConfig, githubToken) {
7236
+ async function pushSkeleton(git, skeletonRoot, cloneUrl, config, coreConfig, githubToken, relockFrontendDeps) {
7223
7237
  const workDir = mkdtempSync4(join24(tmpdir4(), `biffo-sibling-${config.project.name}-`));
7224
7238
  try {
7225
7239
  writeSiblingTemplate(skeletonRoot, workDir, config, {
@@ -7228,8 +7242,12 @@ async function pushSkeleton(git, skeletonRoot, cloneUrl, config, coreConfig, git
7228
7242
  // The core template's version at scaffold time (issue #567) — visibility
7229
7243
  // only, mirroring how `biffo init` stamps `biffo.core.json`. See the
7230
7244
  // `template_version` field doc on `SiblingMarker` (lib/sibling-teardown.ts).
7231
- templateVersion: getLatestCoreVersion()
7245
+ templateVersion: getLatestCoreVersion(),
7246
+ designTokens: coreConfig.design_tokens
7232
7247
  });
7248
+ if (coreConfig.design_tokens) {
7249
+ await relockFrontendDeps(join24(workDir, "apps", "frontend"));
7250
+ }
7233
7251
  await git.init(workDir, "dev");
7234
7252
  await git.addRemote(workDir, "origin", cloneUrl);
7235
7253
  await git.add(workDir, ["."]);
@@ -7282,6 +7300,53 @@ function writeSiblingTemplate(templateRoot, targetDir, config, context) {
7282
7300
  } catch (err) {
7283
7301
  if (err.code !== "ENOENT") throw err;
7284
7302
  }
7303
+ if (context.designTokens) {
7304
+ rewriteDesignTokens(targetDir, context.designTokens);
7305
+ }
7306
+ }
7307
+ function rewriteDesignTokens(targetDir, tokens) {
7308
+ const importSpecifier = `${tokens.package}/${tokens.path}`;
7309
+ const packageJsonPath = join24(targetDir, "apps", "frontend", "package.json");
7310
+ try {
7311
+ const pkg = JSON.parse(readFileSync17(packageJsonPath, "utf8"));
7312
+ pkg.dependencies = { ...pkg.dependencies, [tokens.package]: tokens.version };
7313
+ writeFileSync7(packageJsonPath, JSON.stringify(pkg, null, 2) + "\n");
7314
+ } catch (err) {
7315
+ if (err.code !== "ENOENT") throw err;
7316
+ }
7317
+ const globalsCssPath = join24(targetDir, "apps", "frontend", "src", "app", "globals.css");
7318
+ try {
7319
+ const css = readFileSync17(globalsCssPath, "utf8").replace(
7320
+ /^@import '@biffo\/design-tokens\/tokens\.css';$/m,
7321
+ `@import '${importSpecifier}';`
7322
+ );
7323
+ writeFileSync7(globalsCssPath, css);
7324
+ } catch (err) {
7325
+ if (err.code !== "ENOENT") throw err;
7326
+ }
7327
+ const ciYmlPath = join24(targetDir, ".github", "workflows", "ci.yml");
7328
+ try {
7329
+ let yml = readFileSync17(ciYmlPath, "utf8");
7330
+ yml = yml.replace(
7331
+ /^(\s*run: pnpm exec biffo-scale-guard)$/m,
7332
+ `$1 --tokens node_modules/${importSpecifier}`
7333
+ );
7334
+ yml = yml.replace(
7335
+ " timeout-minutes: 20\n defaults:\n run:\n working-directory: apps/frontend\n steps:",
7336
+ " timeout-minutes: 20\n permissions:\n contents: read\n packages: read\n defaults:\n run:\n working-directory: apps/frontend\n steps:"
7337
+ );
7338
+ yml = yml.replace(
7339
+ " continue-on-error: true\n defaults:\n run:\n working-directory: apps/frontend\n steps:",
7340
+ " continue-on-error: true\n permissions:\n contents: read\n packages: read\n defaults:\n run:\n working-directory: apps/frontend\n steps:"
7341
+ );
7342
+ yml = yml.replace(
7343
+ /( {6}- run: pnpm install --frozen-lockfile)\n(?! {8}env:)/g,
7344
+ "$1\n env:\n NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
7345
+ );
7346
+ writeFileSync7(ciYmlPath, yml);
7347
+ } catch (err) {
7348
+ if (err.code !== "ENOENT") throw err;
7349
+ }
7285
7350
  }
7286
7351
  async function configureSiblingGithub(github, config, coreConfig, session, coreIdentity) {
7287
7352
  const { org, repo } = githubRepo(config);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@biffo/cli",
3
- "version": "0.303.4",
3
+ "version": "0.304.0",
4
4
  "description": "Biffo project scaffolding CLI",
5
5
  "license": "MIT",
6
6
  "type": "module",