style-dictionary
Version:
Style once, use everywhere. A build system for creating cross-platform styles.
51 lines (45 loc) • 1.96 kB
JavaScript
/*
* Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
import deepExtend from './deepExtend.js';
/**
* @typedef {import('../../types/DesignToken.js').Dictionary} Dictionary
* @typedef {import('../../types/Config.d.ts').PlatformConfig} PlatformConfig
* @typedef {import('../../types/Config.d.ts').Config} Options
* @typedef {import('../../types/File.d.ts').File} File
* @typedef {import('../../types/Format.d.ts').FormatFnArguments} FormatFnArguments
*
/**
* @param {FormatFnArguments} param0
*/
export default function createFormatArgs({ dictionary, platform, options, file }) {
const { allTokens, tokens } = dictionary;
// This will merge platform and file-level configuration
// where the file configuration takes precedence
const { options: fileOpts } = platform;
const fileOptsTakenFromPlatform = /** @type {Partial<File>} */ ({ options: fileOpts });
// we have to do some typecasting here. We assume that because deepExtends merges objects together, and "file"
// always has the destination prop, then result will be File rather than Partial<File>, so we just typecast it.
file = /** @type {File} */ (deepExtend([{}, fileOptsTakenFromPlatform, file]));
return /** @type {FormatFnArguments & Dictionary} */ ({
dictionary,
allTokens,
tokens,
platform,
file,
options: {
...options,
...(file.options || {}),
usesDtcg: options?.usesDtcg ?? false,
},
});
}