Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
b3e16c6
fix(atls-ui-generators): stabilize icon generation
comfrt1k Jun 18, 2026
ae538b6
feat(atls-ui-admin): check generated icons
comfrt1k Jun 18, 2026
b4d9e17
refactor(atls-ui-generators): flat namings
comfrt1k Jun 18, 2026
5d548f7
fix(atls-ui-generators): return cheerio generator instead of regex
comfrt1k Jun 19, 2026
709036c
refactor(atls-ui-generators): extract lib from scripts
comfrt1k Jun 23, 2026
39742b5
refactor(icons): move generated check under owner
comfrt1k Jun 23, 2026
4770189
refactor(icons): model generated check input constraints
comfrt1k Jun 23, 2026
27d257c
refactor(icons): colocate generated check role types
comfrt1k Jun 23, 2026
1f059fe
refactor(icons): keep generated check output in script
comfrt1k Jun 23, 2026
712a364
refactor(icons): add generated check error contract
comfrt1k Jun 23, 2026
00e9170
refactor(icons): simplify generated check contracts
comfrt1k Jun 23, 2026
d79b94c
refactor(icons): colocate generated error messages
comfrt1k Jun 23, 2026
c7bcbf9
fix(icons): align check command interfaces
comfrt1k Jul 1, 2026
b93ce1a
fix(icons): model generated file drift state
comfrt1k Jul 1, 2026
fd4e56b
fix(icons): make input constraints predicates
comfrt1k Jul 1, 2026
6257927
fix(icons): clarify input path failure handling
comfrt1k Jul 1, 2026
15d4dfa
fix(icons): colocate check generated cli
comfrt1k Jul 1, 2026
180355a
fix(icons): expose drift comparison interfaces
comfrt1k Jul 1, 2026
572f3df
fix(icons): split drift messages and interfaces
comfrt1k Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions generators/icons/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
},
"main": "src/index.ts",
"bin": {
"generate-icons": "dist/icons.generator.js"
"generate-icons": "dist/generator.js"
},
"files": [
"dist"
],
"scripts": {
"build": "yarn library build",
"generate-icons": "tsx src/icons.generator.ts",
"generate-icons": "tsx src/generator.ts",
"prepack": "yarn run build",
"postpack": "rm -rf dist"
},
Expand All @@ -30,12 +30,12 @@
"@swc/core": "1.6.1",
"cheerio": "1.1.2",
"clipanion": "4.0.0-rc.4",
"domhandler": "5.0.3",
"glob": "11.0.2",
"is-svg": "6.1.0"
},
"devDependencies": {
"@types/node": "22.15.3",
"domhandler": "5.0.3",
"tsx": "4.20.5",
"typescript": "5.5.4"
},
Expand Down
3 changes: 2 additions & 1 deletion generators/icons/src/commands/base-icons.command.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable n/no-sync */

import type { ResolvedIconsPath } from '../icons.interfaces.js'
import type { ResolvedIconsPath } from '../interfaces.js'

import assert from 'node:assert/strict'
import fs from 'node:fs'
Expand Down Expand Up @@ -49,6 +49,7 @@ export class BaseIconsCommand extends Command {
this.resolvePaths()
} catch (error) {
this.logger.error(error)
process.exitCode = 1
}
}
}
3 changes: 2 additions & 1 deletion generators/icons/src/commands/generate-icons.command.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable n/no-sync */

import type { Replacements } from '../icons.interfaces.js'
import type { Replacements } from '../interfaces.js'

import assert from 'node:assert/strict'
import { lstatSync } from 'node:fs'
Expand Down Expand Up @@ -57,6 +57,7 @@ export class GenerateIconsCommand extends BaseIconsCommand {
this.logger.info(`Generated into ${outputPath}`)
} catch (error) {
this.logger.error(error)
process.exitCode = 1
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export class GenerateReplacementsCommand extends BaseIconsCommand {
this.logger.info(`Generated into ${outputFilePath}`)
} catch (error) {
this.logger.error(error)
process.exitCode = 1
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { Icon } from '../../icons.interfaces.js'
import type { Replacements } from '../../icons.interfaces.js'
import type { Icon } from '../../interfaces.js'
import type { Replacements } from '../../interfaces.js'

import { createReplacementIconColors } from '../create-replacement-icon-colors/index.js'
import { createReplacements } from '../create-replacements/index.js'
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './build-replacements.util.js'
export * from './build-replacements.js'
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Icon } from '../../icons.interfaces.js'
import type { ReplacementIconColors } from '../../icons.interfaces.js'
import type { Icon } from '../../interfaces.js'
import type { ReplacementIconColors } from '../../interfaces.js'

import { compileIconJsx } from '../../svgr-utils/index.js'
import { getSvgColors } from '../../svgr-utils/index.js'
import { getSvgColorsOptions } from './create-replacement-icon-colors.constants.js'
import { getSvgColorsOptions } from './constants.js'

export const createReplacementIconColors = async (
icons: Array<Icon>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './create-replacement-icon-colors.util.js'
export * from './create-replacement-icon-colors.js'
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { Replacements } from '../../icons.interfaces.js'
import type { ReplacementIconColors } from '../../icons.interfaces.js'
import type { Replacements } from '../../interfaces.js'
import type { ReplacementIconColors } from '../../interfaces.js'

import { getColorReplacement } from '../get-color-replacement/index.js'

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './create-replacements.util.cjs'
export * from './create-replacements.cjs'
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './create-replacements.util.js'
export * from './create-replacements.js'
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { Replacements } from '../../../icons.interfaces.js'
import type { Replacements } from '../../../interfaces.js'

export interface TestCase {
replacementIcons: Record<string, Array<string> | string>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { GetColorReplacement } from './get-color-replacement.interfaces.js'
import type { GetColorReplacement } from './interfaces.js'

export const getColorReplacement: GetColorReplacement = (options) => ({
[options.color]: `currentColor`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './get-color-replacement.util.cjs'
export * from './get-color-replacement.cjs'
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './get-color-replacement.util.js'
export * from './get-color-replacement.js'
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export * from './write-replacements-file.util.js'
export * from './write-replacements-file.js'
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable n/no-sync */

import type { Replacements } from '../../icons.interfaces.js'
import type { Replacements } from '../../interfaces.js'

import { writeFileSync } from 'node:fs'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { Replacements } from '../icons.interfaces.js'
import type { Replacements } from '../interfaces.js'

import { compileIcons } from './compile-icons/index.js'
import { discoverIcons } from './discover-icons.util.js'
import { writeCompiledIcons } from './write-compiled-icons.util.js'
import { discoverIcons } from './discover-icons.js'
import { writeCompiledIcons } from './write-compiled-icons.js'

export const buildSvgr = async (
iconsPath: string,
Expand Down

This file was deleted.

54 changes: 54 additions & 0 deletions generators/icons/src/svgr-utils/compile-icons/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import type { Config } from '@svgr/core'

import type { SvgrPlugin } from './interfaces.js'
import type { SvgrPluginModule } from './interfaces.js'

import { createRequire } from 'node:module'

import { svgrTemplate } from './template.js'

const svgrCorePackageName = '@svgr/core/package.json'

const svgoPluginName = '@svgr/plugin-svgo'

const jsxPluginName = '@svgr/plugin-jsx'

const prettierPluginName = '@svgr/plugin-prettier'

const require = createRequire(import.meta.url)

const svgrRequire = createRequire(require.resolve(svgrCorePackageName))

const loadSvgrPlugin = (pluginName: string): SvgrPlugin => {
const plugin = svgrRequire(pluginName) as SvgrPlugin | SvgrPluginModule

if (typeof plugin === 'object' && 'default' in plugin && plugin.default) {
return plugin.default
}

return plugin as SvgrPlugin
}

const svgrTransformPlugins = [
loadSvgrPlugin(svgoPluginName),
loadSvgrPlugin(jsxPluginName),
loadSvgrPlugin(prettierPluginName),
]

export const MASK_ID_PATTERN = /mask0/g
export const PROPS_SPREAD_FROM = '...props'
export const PROPS_SPREAD_TO = '...otherProps'

export const FIFTY_PLUS_PATTERN = '50+'
export const FIFTY_PLUS_REPLACEMENT = 'FiftyPlus'

export const svgrTransformConfig: Config = {
icon: true,
typescript: true,
template: svgrTemplate,
plugins: svgrTransformPlugins,
svgProps: {
className: `{clsx(className, String(otherProps.className || ''))}`,
style: '{iconStyle}',
},
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { Icon } from '../../icons.interfaces.js'
import type { Icon } from '../../interfaces.js'

import { transform } from '@svgr/core'

import { MASK_ID_PATTERN } from './compile-icons.constants.js'
import { svgrTransformConfig } from './compile-icons.constants.js'
import { MASK_ID_PATTERN } from './constants.js'
import { svgrTransformConfig } from './constants.js'

export const compileIconJsx = async (icon: Icon): Promise<string> =>
transform(icon.source.replace(MASK_ID_PATTERN, icon.name), {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import type { Icon } from '../../icons.interfaces.js'
import type { Replacements } from '../../icons.interfaces.js'
import type { Source } from '../../icons.interfaces.js'
import type { Icon } from '../../interfaces.js'
import type { Replacements } from '../../interfaces.js'
import type { Source } from '../../interfaces.js'

import { transform } from '@svgr/core'

import { MASK_ID_PATTERN } from './compile-icons.constants.js'
import { PROPS_SPREAD_FROM } from './compile-icons.constants.js'
import { PROPS_SPREAD_TO } from './compile-icons.constants.js'
import { FIFTY_PLUS_PATTERN } from './compile-icons.constants.js'
import { FIFTY_PLUS_REPLACEMENT } from './compile-icons.constants.js'
import { svgrTransformConfig } from './compile-icons.constants.js'
import { MASK_ID_PATTERN } from './constants.js'
import { PROPS_SPREAD_FROM } from './constants.js'
import { PROPS_SPREAD_TO } from './constants.js'
import { FIFTY_PLUS_PATTERN } from './constants.js'
import { FIFTY_PLUS_REPLACEMENT } from './constants.js'
import { svgrTransformConfig } from './constants.js'

export const compileIcons = async (
icons: Array<Icon>,
Expand Down
6 changes: 3 additions & 3 deletions generators/icons/src/svgr-utils/compile-icons/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export * from './compile-icon-jsx.util.js'
export * from './compile-icons.template.js'
export * from './compile-icons.util.js'
export * from './icon-jsx.js'
export * from './icons.js'
export * from './template.js'
7 changes: 7 additions & 0 deletions generators/icons/src/svgr-utils/compile-icons/interfaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { Config } from '@svgr/core'

export type SvgrPlugin = NonNullable<Config['plugins']>[number]

export interface SvgrPluginModule {
default?: SvgrPlugin
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable n/no-sync */

import type { Icon } from '../icons.interfaces.js'
import type { Icon } from '../interfaces.js'

import fs from 'node:fs'

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const styleColorAttributeKey = 'style'
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { CheerioAPI } from 'cheerio'
import type { AnyNode } from 'domhandler'
import type { CheerioAPI } from 'cheerio/slim'
import type { AnyNode } from 'domhandler'

import type { GetSvgColorsOptions } from './get-svg-colors.interfaces.js'
import type { GetSvgColorsOptions } from './interfaces.js'

import { STYLE_COLOR_ATTRIBUTE_KEY } from './get-svg-colors.constants.js'
import { styleColorAttributeKey } from './constants.js'

export const extractColorFromElement = (
cheerio: CheerioAPI,
Expand All @@ -19,7 +19,7 @@ export const extractColorFromElement = (
colors.add(value)
}

if (name === STYLE_COLOR_ATTRIBUTE_KEY) {
if (name === styleColorAttributeKey) {
options.colorAttributes?.forEach((colorAttribute) => {
colors.add(cheerio(element).css(colorAttribute) || '')
})
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { GetSvgColorsOptions } from './get-svg-colors.interfaces.js'
import type { GetSvgColorsOptions } from './interfaces.js'

import { load } from 'cheerio'
import { load } from 'cheerio/slim'

import { extractColorFromElement } from './extract-color-from-element.helper.js'
import { validateColor } from './validate-color.helper.js'
import { extractColorFromElement } from './extract-color-from-element.js'
import { validateColor } from './helpers/validate-color.js'

export const getSvgColors = (source: string, options: GetSvgColorsOptions = {}): Array<string> => {
const colors = new Set<string>()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { GetSvgColorsOptions } from './get-svg-colors.interfaces.js'
import type { GetSvgColorsOptions } from '../interfaces.js'

export const validateColor = (color: string, options: GetSvgColorsOptions): boolean => {
if (!color) {
Expand Down
4 changes: 2 additions & 2 deletions generators/icons/src/svgr-utils/get-svg-colors/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export * from './get-svg-colors.util.js'
export type * from './get-svg-colors.interfaces.js'
export * from './get-svg-colors.js'
export type * from './interfaces.js'
4 changes: 2 additions & 2 deletions generators/icons/src/svgr-utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export * from './build-svgr.util.js'
export * from './build-svgr.js'
export * from './compile-icons/index.js'
export * from './discover-icons.util.js'
export * from './discover-icons.js'
export * from './get-svg-colors/index.js'
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable n/no-sync */

import type { Source } from '../icons.interfaces.js'
import type { Source } from '../interfaces.js'

import fs from 'node:fs'
import path from 'node:path'
Expand Down
13 changes: 13 additions & 0 deletions ui-admin/icons/lib/generated/check/cli.ts
Comment thread
TorinAsakura marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { checkSuccessMessage } from './constants.js'
import { outputLineBreak } from './constants.js'
import { checkGenerated } from './index.js'

try {
await checkGenerated()
process.stdout.write(`${checkSuccessMessage}${outputLineBreak}`)
} catch (error) {
const errorMessage = error instanceof Error ? (error.stack ?? error.message) : String(error)

process.stderr.write(`${errorMessage}${outputLineBreak}`)
process.exitCode = 1
}
3 changes: 3 additions & 0 deletions ui-admin/icons/lib/generated/check/command/interfaces.ts
Comment thread
TorinAsakura marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface CommandOptions {
cwd?: string
}
Loading