This repository has been archived on 2026-09-13. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
BPOS-TMP-REPO/tools/build-activities.ts

50 lines
2.8 KiB
TypeScript

/**
* 活动包的编译产出 —— **构建工具**,不是活动包的一部分(编码规范 §8.2 / ADR-004)。
*
* 「活动包 = 包清单 + 代码产物(.JS)+ 资产文件;清单**机器可读**,
* 系统不执行代码即知包为何物。」
*
* 产出 `activities/<pkg>/dist/{manifest.json,index.js}`;
* api 侧只经**文件**读取它们 —— 与 activities 之间只有安装通道,没有代码通道。
* 放在 tools/ 而非 activities/ 是因为它要用 fs:活动包本身**零环境能力**,构建脚本不受此限。
*/
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import { manifest as quoteIntake } from '../activities/quote-intake/src/manifest.ts';
import { manifest as quotePricing } from '../activities/quote-pricing/src/manifest.ts';
import { manifest as quoteNegotiate } from '../activities/quote-negotiate/src/manifest.ts';
import { manifest as quoteArchive } from '../activities/quote-archive/src/manifest.ts';
import { manifest as quoteSourcing } from '../activities/quote-sourcing/src/manifest.ts';
import { manifest as quoteAlternative } from '../activities/quote-alternative/src/manifest.ts';
import { manifest as crmRelationshipCoverage } from '../activities/crm-relationship-coverage/src/manifest.ts';
import { manifest as brandContentToolkit } from '../activities/brand-content-toolkit/src/manifest.ts';
import { manifest as partSubstitutionAssessment } from '../activities/part-substitution-assessment/src/manifest.ts';
const root = dirname(dirname(fileURLToPath(import.meta.url)));
const PACKAGES = [
{ dir: 'quote-intake', manifest: quoteIntake },
{ dir: 'quote-pricing', manifest: quotePricing },
{ dir: 'quote-negotiate', manifest: quoteNegotiate },
{ dir: 'quote-archive', manifest: quoteArchive },
{ dir: 'quote-sourcing', manifest: quoteSourcing },
{ dir: 'quote-alternative', manifest: quoteAlternative },
{ dir: 'crm-relationship-coverage', manifest: crmRelationshipCoverage },
{ dir: 'brand-content-toolkit', manifest: brandContentToolkit },
{ dir: 'part-substitution-assessment', manifest: partSubstitutionAssessment },
] as const;
for (const pkg of PACKAGES) {
const base = join(root, 'activities', pkg.dir);
const dist = join(base, 'dist');
await mkdir(dist, { recursive: true });
await writeFile(join(dist, 'manifest.json'), JSON.stringify(pkg.manifest, null, 2), 'utf8');
// MVP 阶段直接把源码文本当产物落盘:静态审扫描的正是产物文本(import 与全局引用)。
// 真编译(tsup 单文件 ESM)在装载器落地时接入 —— 见 docs/debt.md · M5-3
const source = await readFile(join(base, 'src', 'index.ts'), 'utf8');
await writeFile(join(dist, 'index.js'), source, 'utf8');
process.stdout.write(`活动包已产出:${pkg.dir}\n`);
}