async build()

in libs/@guardian/source/src/design-tokens/cobalt-plugins/typography.js [75:112]


		async build({ tokens /* metadata, rawSchema */ }) {
			// this is where we'll store the transformed tokens
			/** @type {Object.<string, string>} */
			const transformedTokens = {};

			/** @type {Object.<string, string>} */
			const comments = {};

			const typographyTokens = tokens.filter((token) =>
				token.id.startsWith(GROUP_PREFIX),
			);

			// we can re-use the default transformer from `@cobalt-ui/plugin-js`
			for (const token of typographyTokens) {
				set(transformedTokens, token.id, defaultTransformer(token));
				if (token.$description) {
					comments[getCommentId(token.id)] = token.$description;
				}
			}

			/** @type {Object.<!string, TypographyPreset>} */
			const typographyPresets = transformedTokens.typographyPresets;
			const typescriptSource = Object.entries(typographyPresets)
				.map(([preset, properties]) => {
					const output = presetTemplate(preset, properties);
					return comments[preset]
						? `\n/** ${comments[preset]} */${output}`
						: output;
				})
				.join('');

			return [
				{
					filename: options.filename,
					contents: template(import.meta.filename, typescriptSource),
				},
			];
		},