* ci(#10336): use TurboSnap * build: fix version * ci(#10336): update build dir * chore(#10336): fire changes * chore: stabilize icon width on `PageHeader` * chore: fire changes * ci: invalid ignore * ci: trace logs * chore: debug * revert: debug This reverts commit2329165e25. * chore: do not reuse build dir * build: scripts * ci: tweak * revert: re-revert debug This reverts commit596ef05d9e. * chore: detect changes manually * fix: syntax * ci: do not use only-changed * ci: fix command * revert: re-re-revert debug This reverts commitb027170d75. * ci: use build dir * revert: re-re-re-revert debug This reverts commit529ab126ed. * ci: fix path * revert: re-re-re-re-revert debug This reverts commit0b0c0b9ea4. * ci: fix typo * ci: only show story files * revert: re-re-re-re-re-revert debug This reverts commit9f5b88df32. * ci: skip when no stories found * ci: use skip * revert: re-re-re-re-re-re-revert debug This reverts commit0df4bdc30b. * ci: fix micromatch version * revert: re-re-re-re-re-re-re-revert debug This reverts commit63063b02bb. * revert: re-re-re-re-re-re-re-re-revert debug This reverts commit01d9669e2a. * chore: pin tabler icon width globally * ci: notify when Chromatic skips * ci: fix endpoint --------- Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import fs from 'node:fs/promises';
 | 
						|
import path from 'node:path';
 | 
						|
import micromatch from 'micromatch';
 | 
						|
import main from './main';
 | 
						|
 | 
						|
interface Stats {
 | 
						|
	readonly modules: readonly {
 | 
						|
		readonly id: string;
 | 
						|
		readonly name: string;
 | 
						|
		readonly reasons: readonly {
 | 
						|
			readonly moduleName: string;
 | 
						|
		}[];
 | 
						|
	}[];
 | 
						|
}
 | 
						|
 | 
						|
fs.readFile(
 | 
						|
	path.resolve(__dirname, '../storybook-static/preview-stats.json')
 | 
						|
).then((buffer) => {
 | 
						|
	const stats: Stats = JSON.parse(buffer.toString());
 | 
						|
	const keys = new Set(stats.modules.map((stat) => stat.id));
 | 
						|
	const map = new Map(
 | 
						|
		Array.from(keys, (key) => [
 | 
						|
			key,
 | 
						|
			new Set(
 | 
						|
				stats.modules
 | 
						|
					.filter((stat) => stat.id === key)
 | 
						|
					.flatMap((stat) => stat.reasons)
 | 
						|
					.map((reason) => reason.moduleName)
 | 
						|
			),
 | 
						|
		])
 | 
						|
	);
 | 
						|
	const modules = new Set(
 | 
						|
		process.argv
 | 
						|
			.slice(2)
 | 
						|
			.map((arg) =>
 | 
						|
				path.relative(
 | 
						|
					path.resolve(__dirname, '..'),
 | 
						|
					path.resolve(__dirname, '../../..', arg)
 | 
						|
				)
 | 
						|
			)
 | 
						|
			.map((path) => (path.startsWith('.') ? path : `./${path}`))
 | 
						|
	);
 | 
						|
	if (
 | 
						|
		micromatch(Array.from(modules), [
 | 
						|
			'../../assets/**',
 | 
						|
			'../../fluent-emojis/**',
 | 
						|
			'../../locales/**',
 | 
						|
			'../../misskey-assets/**',
 | 
						|
			'assets/**',
 | 
						|
			'public/**',
 | 
						|
			'../../pnpm-lock.yaml',
 | 
						|
		]).length
 | 
						|
	) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
	for (;;) {
 | 
						|
		const oldSize = modules.size;
 | 
						|
		for (const module of Array.from(modules)) {
 | 
						|
			if (map.has(module)) {
 | 
						|
				for (const dependency of Array.from(map.get(module)!)) {
 | 
						|
					modules.add(dependency);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if (modules.size === oldSize) {
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	const stories = micromatch(
 | 
						|
		Array.from(modules),
 | 
						|
		main.stories.map((story) => `./${path.relative('..', story)}`)
 | 
						|
	);
 | 
						|
	if (stories.length) {
 | 
						|
		for (const story of stories) {
 | 
						|
			process.stdout.write(` --only-story-files ${story}`);
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		process.stdout.write(` --skip`);
 | 
						|
	}
 | 
						|
});
 |