mirror of
https://github.com/Mibew/simple-icons.git
synced 2025-05-02 09:06:43 +03:00
Autogenerate SDK TypeScript definitions on releases (#9186)
This commit is contained in:
parent
32c1611c8e
commit
3588f61183
2
.github/workflows/create-release.yml
vendored
2
.github/workflows/create-release.yml
vendored
@ -64,6 +64,8 @@ jobs:
|
|||||||
run: node ./scripts/release/update-svgs-count.js
|
run: node ./scripts/release/update-svgs-count.js
|
||||||
- name: Update slugs table
|
- name: Update slugs table
|
||||||
run: node ./scripts/release/update-slugs-table.js
|
run: node ./scripts/release/update-slugs-table.js
|
||||||
|
- name: Update SDK Typescript definitions
|
||||||
|
run: node ./scripts/release/update-sdk-ts-defs.js
|
||||||
- name: Commit version bump
|
- name: Commit version bump
|
||||||
uses: stefanzweifel/git-auto-commit-action@v4.16.0
|
uses: stefanzweifel/git-auto-commit-action@v4.16.0
|
||||||
with:
|
with:
|
||||||
|
8
.github/workflows/publish.yml
vendored
8
.github/workflows/publish.yml
vendored
@ -48,10 +48,12 @@ jobs:
|
|||||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }}
|
key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }}
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-node-
|
${{ runner.os }}-node-
|
||||||
- name: Replace CDN theme image links from README
|
|
||||||
run: npm run strip-theme-link
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm i
|
run: npm i
|
||||||
|
- name: Replace CDN theme image links from README
|
||||||
|
run: npm run strip-theme-link
|
||||||
|
- name: Update SDK Typescript definitions
|
||||||
|
run: node ./scripts/release/update-sdk-ts-defs.js
|
||||||
- name: Build NodeJS package
|
- name: Build NodeJS package
|
||||||
run: npm run build
|
run: npm run build
|
||||||
- name: Deploy to NPM
|
- name: Deploy to NPM
|
||||||
@ -80,7 +82,7 @@ jobs:
|
|||||||
git config user.name "${GITHUB_ACTOR}"
|
git config user.name "${GITHUB_ACTOR}"
|
||||||
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
|
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
|
||||||
# Commit that will only be included in the tag
|
# Commit that will only be included in the tag
|
||||||
- name: Commit dark theme images strip
|
- name: Commit CDN theme image links removal
|
||||||
run: |
|
run: |
|
||||||
git add README.md
|
git add README.md
|
||||||
git commit -m 'Replace README CDN theme image links'
|
git commit -m 'Replace README CDN theme image links'
|
||||||
|
69
scripts/release/update-sdk-ts-defs.js
Normal file
69
scripts/release/update-sdk-ts-defs.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/**
|
||||||
|
* @fileoverview
|
||||||
|
* Updates the SDK Typescript definitions located in the file sdk.d.ts
|
||||||
|
* to match the current definitions of functions of sdk.mjs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fsSync from 'node:fs';
|
||||||
|
import fs from 'node:fs/promises';
|
||||||
|
import path from 'node:path';
|
||||||
|
import { execSync } from 'node:child_process';
|
||||||
|
import { getDirnameFromImportMeta } from '../../sdk.mjs';
|
||||||
|
|
||||||
|
const __dirname = getDirnameFromImportMeta(import.meta.url);
|
||||||
|
const rootDir = path.resolve(__dirname, '..', '..');
|
||||||
|
|
||||||
|
const sdkTs = path.resolve(rootDir, 'sdk.d.ts');
|
||||||
|
const sdkMts = path.resolve(rootDir, 'sdk.d.mts');
|
||||||
|
const sdkMjs = path.resolve(rootDir, 'sdk.mjs');
|
||||||
|
|
||||||
|
const generateSdkMts = async () => {
|
||||||
|
// remove temporally type definitions imported with comments
|
||||||
|
// in sdk.mjs to avoid circular imports
|
||||||
|
const originalSdkMjsContent = await fs.readFile(sdkMjs, 'utf-8');
|
||||||
|
const tempSdkMjsContent = originalSdkMjsContent
|
||||||
|
.split('\n')
|
||||||
|
.filter((line) => {
|
||||||
|
return !line.startsWith(' * @typedef {import("./sdk")');
|
||||||
|
})
|
||||||
|
.join('\n');
|
||||||
|
await fs.writeFile(sdkMjs, tempSdkMjsContent);
|
||||||
|
try {
|
||||||
|
execSync(
|
||||||
|
'npx tsc sdk.mjs' +
|
||||||
|
' --declaration --emitDeclarationOnly --allowJs --removeComments',
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(
|
||||||
|
`Error ${error.status} generating Typescript` +
|
||||||
|
` definitions: '${error.message}'`,
|
||||||
|
);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
await fs.writeFile(sdkMjs, originalSdkMjsContent);
|
||||||
|
};
|
||||||
|
|
||||||
|
const generateSdkTs = async () => {
|
||||||
|
fsSync.existsSync(sdkMts) && (await fs.unlink(sdkMts));
|
||||||
|
await generateSdkMts();
|
||||||
|
|
||||||
|
const autogeneratedMsg = '/* The next code is autogenerated from sdk.mjs */';
|
||||||
|
const newSdkTsContent =
|
||||||
|
(await fs.readFile(sdkTs, 'utf-8')).split(autogeneratedMsg)[0] +
|
||||||
|
`${autogeneratedMsg}\n\n${await fs.readFile(sdkMts, 'utf-8')}`;
|
||||||
|
|
||||||
|
await fs.writeFile(sdkTs, newSdkTsContent);
|
||||||
|
await fs.unlink(sdkMts);
|
||||||
|
|
||||||
|
try {
|
||||||
|
execSync('npx prettier -w sdk.d.ts');
|
||||||
|
} catch (error) {
|
||||||
|
console.log(
|
||||||
|
`Error ${error.status} executing Prettier` +
|
||||||
|
` to pretiffy SDK TS definitions: '${error.message}'`,
|
||||||
|
);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
await generateSdkTs();
|
5
sdk.d.ts
vendored
5
sdk.d.ts
vendored
@ -3,7 +3,7 @@
|
|||||||
* Types for Simple Icons SDK.
|
* Types for Simple Icons SDK.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { License } from './types.d.ts';
|
import type { License } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The data for a third-party extension.
|
* The data for a third-party extension.
|
||||||
@ -59,8 +59,9 @@ export type IconData = {
|
|||||||
aliases?: Aliases;
|
aliases?: Aliases;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const URL_REGEX: RegExp;
|
/* The next code is autogenerated from sdk.mjs */
|
||||||
|
|
||||||
|
export const URL_REGEX: RegExp;
|
||||||
export function getDirnameFromImportMeta(importMetaUrl: string): string;
|
export function getDirnameFromImportMeta(importMetaUrl: string): string;
|
||||||
export function getIconSlug(icon: IconData): string;
|
export function getIconSlug(icon: IconData): string;
|
||||||
export function svgToPath(svg: string): string;
|
export function svgToPath(svg: string): string;
|
||||||
|
8
sdk.mjs
8
sdk.mjs
@ -120,7 +120,7 @@ export const htmlFriendlyToTitle = (htmlFriendlyTitle) =>
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get path of *_data/simpe-icons.json*.
|
* Get path of *_data/simpe-icons.json*.
|
||||||
* @param {String|undefined} rootDir Path to the root directory of the project
|
* @param {String} rootDir Path to the root directory of the project
|
||||||
* @returns {String} Path of *_data/simple-icons.json*
|
* @returns {String} Path of *_data/simple-icons.json*
|
||||||
*/
|
*/
|
||||||
export const getIconDataPath = (
|
export const getIconDataPath = (
|
||||||
@ -131,7 +131,7 @@ export const getIconDataPath = (
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get contents of *_data/simple-icons.json*.
|
* Get contents of *_data/simple-icons.json*.
|
||||||
* @param {String|undefined} rootDir Path to the root directory of the project
|
* @param {String} rootDir Path to the root directory of the project
|
||||||
* @returns {String} Content of *_data/simple-icons.json*
|
* @returns {String} Content of *_data/simple-icons.json*
|
||||||
*/
|
*/
|
||||||
export const getIconsDataString = (
|
export const getIconsDataString = (
|
||||||
@ -142,7 +142,7 @@ export const getIconsDataString = (
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get icons data as object from *_data/simple-icons.json*.
|
* Get icons data as object from *_data/simple-icons.json*.
|
||||||
* @param {String|undefined} rootDir Path to the root directory of the project
|
* @param {String} rootDir Path to the root directory of the project
|
||||||
* @returns {IconData[]} Icons data as array from *_data/simple-icons.json*
|
* @returns {IconData[]} Icons data as array from *_data/simple-icons.json*
|
||||||
*/
|
*/
|
||||||
export const getIconsData = async (
|
export const getIconsData = async (
|
||||||
@ -178,7 +178,7 @@ export const normalizeColor = (text) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get information about third party extensions from the README table.
|
* Get information about third party extensions from the README table.
|
||||||
* @param {String|undefined} readmePath Path to the README file
|
* @param {String} readmePath Path to the README file
|
||||||
* @returns {Promise<ThirdPartyExtension[]>} Information about third party extensions
|
* @returns {Promise<ThirdPartyExtension[]>} Information about third party extensions
|
||||||
*/
|
*/
|
||||||
export const getThirdPartyExtensions = async (
|
export const getThirdPartyExtensions = async (
|
||||||
|
Loading…
Reference in New Issue
Block a user