2024-06-06 14:40:35 +02:00
|
|
|
/**
|
|
|
|
* @file Internal utilities.
|
|
|
|
*
|
|
|
|
* Here resides all the functionality that does not qualifies to reside
|
|
|
|
* in the SDK because is not publicly exposed.
|
|
|
|
*/
|
|
|
|
|
2022-09-25 09:04:58 +08:00
|
|
|
import fs from 'node:fs/promises';
|
2024-03-25 01:38:18 +08:00
|
|
|
import path from 'node:path';
|
2024-12-19 18:32:41 +08:00
|
|
|
import {
|
2024-12-21 22:49:25 +08:00
|
|
|
collator,
|
|
|
|
getDirnameFromImportMeta,
|
2025-01-06 12:08:28 +08:00
|
|
|
getIconSlug,
|
2024-12-21 22:49:25 +08:00
|
|
|
getIconsDataPath,
|
2024-12-19 18:32:41 +08:00
|
|
|
} from '../sdk.mjs';
|
2022-09-28 10:11:27 +08:00
|
|
|
|
|
|
|
const __dirname = getDirnameFromImportMeta(import.meta.url);
|
|
|
|
|
2024-06-06 14:40:35 +02:00
|
|
|
/**
|
|
|
|
* @typedef {import("../sdk.js").IconData} IconData
|
|
|
|
*/
|
|
|
|
|
2022-09-28 10:11:27 +08:00
|
|
|
/**
|
|
|
|
* Get JSON schema data.
|
2024-06-06 14:40:35 +02:00
|
|
|
* @param {string} rootDirectory Path to the root directory of the project.
|
|
|
|
* @returns {Promise<any>} JSON schema data.
|
2022-09-28 10:11:27 +08:00
|
|
|
*/
|
|
|
|
export const getJsonSchemaData = async (
|
2024-12-21 22:49:25 +08:00
|
|
|
rootDirectory = path.resolve(__dirname, '..'),
|
2024-12-17 14:50:29 +01:00
|
|
|
) =>
|
2024-12-21 22:49:25 +08:00
|
|
|
JSON.parse(
|
|
|
|
await fs.readFile(path.resolve(rootDirectory, '.jsonschema.json'), 'utf8'),
|
|
|
|
);
|
2022-09-28 10:11:27 +08:00
|
|
|
|
2022-09-25 09:04:58 +08:00
|
|
|
/**
|
|
|
|
* Write icons data to _data/simple-icons.json.
|
2024-12-21 23:43:30 +01:00
|
|
|
* @param {IconData[]} iconsData Icons data array.
|
2024-06-06 14:40:35 +02:00
|
|
|
* @param {string} rootDirectory Path to the root directory of the project.
|
2024-10-01 11:52:48 +08:00
|
|
|
* @param {boolean} minify Whether to minify the JSON output.
|
2022-09-25 09:04:58 +08:00
|
|
|
*/
|
2023-04-19 15:23:13 +02:00
|
|
|
export const writeIconsData = async (
|
2024-12-21 22:49:25 +08:00
|
|
|
iconsData,
|
|
|
|
rootDirectory = path.resolve(__dirname, '..'),
|
|
|
|
minify,
|
2023-04-19 15:23:13 +02:00
|
|
|
) => {
|
2024-12-21 22:49:25 +08:00
|
|
|
await fs.writeFile(
|
|
|
|
getIconsDataPath(rootDirectory),
|
|
|
|
`${JSON.stringify(iconsData, null, minify ? 0 : '\t')}\n`,
|
|
|
|
'utf8',
|
|
|
|
);
|
2022-09-25 09:04:58 +08:00
|
|
|
};
|
2024-10-17 00:11:55 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get SPDX license IDs from `spdx-license-ids` package.
|
|
|
|
* @param {string} rootDirectory Path to the root directory of the project.
|
|
|
|
* @returns {Promise<string[]>} Set of SPDX license IDs.
|
|
|
|
*/
|
|
|
|
export const getSpdxLicenseIds = async (
|
2024-12-21 22:49:25 +08:00
|
|
|
rootDirectory = path.resolve(__dirname, '..'),
|
2024-12-17 14:50:29 +01:00
|
|
|
) =>
|
2024-12-21 22:49:25 +08:00
|
|
|
JSON.parse(
|
|
|
|
await fs.readFile(
|
|
|
|
path.resolve(
|
|
|
|
rootDirectory,
|
|
|
|
'node_modules',
|
|
|
|
'spdx-license-ids',
|
|
|
|
'index.json',
|
|
|
|
),
|
|
|
|
'utf8',
|
|
|
|
),
|
|
|
|
);
|
2024-12-19 18:32:41 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* The compare function for sortng icons in _data/simple-icons.json.
|
|
|
|
* @param {IconData} a Icon A.
|
|
|
|
* @param {IconData} b Icon B.
|
|
|
|
* @returns {number} Comparison result.
|
|
|
|
*/
|
|
|
|
export const sortIconsCompare = (a, b) => {
|
2024-12-21 22:49:25 +08:00
|
|
|
return a.title === b.title
|
2025-01-06 12:08:28 +08:00
|
|
|
? collator.compare(getIconSlug(a), getIconSlug(b))
|
2024-12-21 22:49:25 +08:00
|
|
|
: collator.compare(a.title, b.title);
|
2024-12-19 18:32:41 +08:00
|
|
|
};
|