diff --git a/packages/theme/src/v2/index.ts b/packages/theme/src/v2/index.ts index ecb8337..20c5c81 100644 --- a/packages/theme/src/v2/index.ts +++ b/packages/theme/src/v2/index.ts @@ -1,5 +1,13 @@ import { objectKeys } from '../utils/object-keys'; -import { darkThemeV2, lightThemeV2 } from './variables'; +import { + darkThemeV2, + lightThemeV2, + // only use for type inference + type nestedDarkTheme, + type nestedLightTheme, +} from './variables'; + +type NestedTheme = typeof nestedLightTheme | typeof nestedDarkTheme; export { darkThemeV2, lightThemeV2 }; export type AffineThemeV2 = typeof lightThemeV2; @@ -21,17 +29,41 @@ function createVariables(theme: AffineThemeV2) { export const lightCssVariablesV2 = createVariables(lightThemeV2); export const darkCssVariablesV2 = createVariables(darkThemeV2); +function _cssVarV2(key: AffineThemeKeyV2, fallback?: string) { + return `var(${themeToVar(key)}${fallback ? `, ${fallback}` : ''})`; +} + +function createCssVarProxy(prefix: string = ''): any { + return new Proxy(_cssVarV2, { + get(_, prop) { + const newPrefix = prefix ? `${prefix}/${String(prop)}` : String(prop); + + if (typeof lightThemeV2[newPrefix as AffineThemeKeyV2] !== 'string') { + return createCssVarProxy(newPrefix); + } + + // found the value + return _cssVarV2(newPrefix as AffineThemeKeyV2); + }, + apply(_, __, [fallback]) { + return _cssVarV2(prefix as AffineThemeKeyV2, fallback); + }, + }); +} + /** * Get AFFiNE css variable name type safely (v2) * @param key as copied from Figma design. __e.g. `text/primary`__ - * + * * ```ts * import { cssVarV2 } from '@toeverything/theme/v2'; - * + * * cssVarV2('text/primary'); * cssVarV2('button/siderbarPrimary/background') + * + * // alternative syntax: + * cssVarV2.text.primary; + * cssVarV2.button.siderbarPrimary.background; * ``` */ -export function cssVarV2(key: AffineThemeKeyV2, fallback?: string) { - return `var(${themeToVar(key)}${fallback ? `, ${fallback}` : ''})`; -} +export const cssVarV2 = createCssVarProxy() as typeof _cssVarV2 & NestedTheme; diff --git a/packages/theme/src/v2/variables.ts b/packages/theme/src/v2/variables.ts index 3009ed1..d8b7e73 100644 --- a/packages/theme/src/v2/variables.ts +++ b/packages/theme/src/v2/variables.ts @@ -586,3 +586,705 @@ export const darkThemeV2 = { 'tooltips/foreground': '#ffffff', 'tooltips/secondaryBackground': '#ffffff2b', }; +export const nestedLightTheme = { + badge: { believer: '#002742', free: '#29a3fa', pro: '#29a3fa' }, + block: { + callout: { + background: { + blue: '#f0f9ff', + green: '#fbfef1', + grey: '#f9f9f9', + magenta: '#fefaff', + orange: '#fff7ee', + purple: '#f9f7ff', + red: '#fff4f5', + teal: '#eefffd', + yellow: '#fdfcf4', + }, + icon: { + blue: '#53b2ef', + green: '#22bf07', + grey: '#cdcdcd', + magenta: '#cc4187', + orange: '#ffae63', + purple: '#7c3aed', + red: '#c83030', + teal: '#448e86', + yellow: '#fde047', + }, + }, + divider: { divider: '#92929238' }, + notSupportedBlock: { + background: '#ffffff', + inlineBg: { default: '#f3f3f3', hover: '#e6e6e6' }, + }, + }, + button: { + innerBlackBorder: '#00000012', + badgesColor: '#ed3f3f', + buttonoOverHover: '#ffffff', + checkBox: '#1e96eb', + disable: '#b3b3b3', + emptyIconBackground: '#0000000d', + error: '#ed3f3f', + iconButtonSolid: '#ffffff', + primary: '#1e96eb', + pureWhiteText: '#ffffff', + secondary: '#ffffff', + success: '#44b931', + grabber: { select: '#00000038', default: '#0000001a' }, + mobile: { aIActionBackground: '#252525', deletedAction: '#ed3f3f' }, + sidebarButton: { background: '#ffffff08' }, + siderbarPrimary: { background: '#ffffffab' }, + }, + centerPeek: { background: '#ffffff', icon: '#7a7a7a', overlay: '#0000002b' }, + chatBlock: { + chatBlockBg: '#ffffff', + chatBlockBoder: '#e6e6e6', + chatBlockIcon: '#7a7a7a', + chatBlockText: '#141414', + }, + chip: { + label: { + blue: '#e6f5ff', + green: '#dcfdd7', + grey: '#e6e6e6', + magenta: '#ffecf6', + orange: '#ffebd5', + purple: '#ede9ff', + red: '#fce5e6', + teal: '#d7fbf6', + text: '#00000085', + white: '#f5f5f5', + yellow: '#fef3c7', + }, + tag: { + blue: '#84cfff', + green: '#69b87d', + grey: '#b3b3b3', + orange: '#ff8c38', + purple: '#7c3aed', + red: '#ed3f3f', + teal: '#8be7dc', + yellow: '#facc15', + }, + }, + database: { + border: '#0000001a', + cardHover: '#00000008', + filterHeaderFadeIn: '#ffffff', + filterHeaderFadeOut: '#ffffff08', + focusBackground: '#1e96eb0a', + textSecondary: '#00000085', + }, + dialog: { background: { primary: '#ffffff' } }, + edgeless: { + frame: { + background: { + black: '#cdcdcd', + blue: '#e6f5ff', + green: '#f1fdf4', + grey: '#f3f3f3', + magenta: '#ffecf6', + orange: '#ffebd5', + purple: '#ede9ff', + red: '#fce5e6', + teal: '#e2fdf9', + white: '#ffffff', + yellow: '#fffbd5', + }, + border: { active: '#1e96eb', default: '#0000002b', locked: '#00000085' }, + fontColor: { font: '#000000f2' }, + }, + group: { + background: { background: '#ffffff' }, + border: { active: '#1e96eb', borderHint: '#8fd1ff', hover: '#1e96eb' }, + fontColor: { + active: '#1e96eb', + default: '#00000085', + hover: '#1e96eb', + rename: '#000000', + }, + }, + line: { + black: '#000000', + blue: '#29a3fa', + green: '#3cbc36', + grey: '#929292', + magenta: '#e660a4', + orange: '#ff8c38', + purple: '#6e52df', + red: '#e11e41', + teal: '#5cc7ba', + white: '#ffffff', + yellow: '#facc15', + }, + mindMap: { line: '#000000' }, + note: { + black: '#b3b3b3', + blue: '#ceecff', + green: '#c9f8c1', + grey: '#e6e6e6', + magenta: '#ffdaed', + orange: '#ffc58f', + purple: '#ddd6fe', + red: '#fbb7b7', + teal: '#c7f8f2', + white: '#ffffff', + yellow: '#fde68a', + }, + palette: { + black: '#000000', + white: '#ffffff', + heavy: { + blue: '#1c70a5', + green: '#447756', + magenta: '#941555', + orange: '#b55309', + purple: '#5a21b6', + red: '#761717', + yellow: '#ac7400', + }, + light: { + blueLight: '#e6f5ff', + greenLight: '#f1fdf4', + greyLight: '#e6e6e6', + magentaLight: '#ffecf6', + orangeLight: '#ffebd5', + purpleLight: '#ede9ff', + redLight: '#fce5e6', + yellowLight: '#fffbd5', + }, + medium: { + blueMedium: '#84cfff', + greenMedium: '#3cbc36', + greyMedium: '#929292', + magentaMedium: '#e96cab', + orangeMedium: '#ff8c38', + purpleMedium: '#6e52df', + redMedium: '#fb7081', + yellowMedium: '#fcd34d', + }, + }, + selection: { + selectionMarqueeBackground: '#1e96eb14', + selectionMarqueeBorder: '#1e96eb', + }, + shape: { + black: '#000000', + blue: '#9fd9ff', + green: '#9bda91', + grey: '#cdcdcd', + magenta: '#ffc0e0', + orange: '#ffae63', + purple: '#d7cdff', + red: '#fecdd1', + teal: '#8be7dc', + white: '#ffffff', + yellow: '#fde047', + }, + }, + edgelessToolbar: { + note: { background: '#ffffff', textColor: '#0000001a' }, + others: { + background: '#ffffff1f', + highlightLinearEnd: '#ffffff', + highlightLinearStart: '#ffffff00', + linearCenter: '#000000c4', + linearEnd: '#0000001f', + linearStart: '#ffffff1f', + }, + 'pen&eraser': { + background: '#f1f1f1', + 'bodyShadow-1': '#00000033', + 'bodyShadow-2': '#0000001a', + 'bodyShadow-3': '#00000003', + 'bodyShadow-4': '#ffffff14', + 'eraserBlue-1': '#173654', + 'eraserBlue-2': '#effaff', + 'eraserBlue-3': '#1e96eb', + eraserBorder: '#e7e7e7', + eraserBorder2: '#e3e2e4', + eraserFill: '#f1f1f1', + eraserHighlight: '#ffffffb8', + }, + }, + icon: { + activated: '#1e96eb', + disable: '#b3b3b3', + primary: '#7a7a7a', + secondary: '#b3b3b3', + tertiary: '#cdcdcd', + }, + input: { + background: '#ffffff', + border: { active: '#1e96eb', default: '#e6e6e6', error: '#f45353' }, + scrollBar: { handle: '#0000001a' }, + }, + layer: { + black: '#000000', + pureBlack: '#000000', + pureWhite: '#ffffff', + white: '#ffffff', + insideBorder: { + blackBorder: '#0000001a', + border: '#e6e6e6', + primaryBorder: '#1e96eb', + whiteBorder: '#ffffff8f', + }, + background: { + codeBlock: '#f9f9f9', + error: '#fff1f1', + hoverOverlay: '#0000000d', + modal: '#000000b2', + modalWhite: '#ffffff2b', + overlayPanel: '#ffffff', + primary: '#ffffff', + processing: '#eef2ff', + secondary: '#f5f5f5', + success: '#f1fdf4', + tertiary: '#f3f3f3', + translucentUI: '#ffffffb8', + warning: '#fff7ee', + mobile: { + iOSControl: '#000000', + modal: '#0000002b', + primary: '#f5f5f5', + secondary: '#ffffff', + tertiary: '#e6e6e6', + }, + }, + }, + loading: { background: '#0000001a', foreground: '#1e96eb' }, + others: { warnLabel: { black: '#000000', yellow: '#facc15' } }, + portrait: { + localPortrait: '#00000038', + localPortraitBackground: '#0000001a', + }, + radio: { + disable: '#cdcdcd', + active: { chekced: '#1e96eb', default: '#7a7a7a' }, + }, + skeleton: { skeleton: '#e6e6e6' }, + status: { error: '#ed3f3f', success: '#44b931' }, + switch: { + buttonBackground: { active: '#ffffff', hover: '#0000000d' }, + fontColor: { + primary: '#141414', + secondary: '#7a7a7a', + tertiary: '#929292', + }, + iconColor: { active: '#565656', default: '#929292' }, + switchBackground: { background: '#f3f3f3' }, + }, + tab: { + divider: { divider: '#00000012', indicator: '#1e96eb' }, + fontColor: { active: '#141414', default: '#b3b3b3', hover: '#141414' }, + iconColor: { active: '#565656', default: '#b3b3b3', hover: '#565656' }, + tabBackground: { active: '#ffffff', default: '#f3f3f3', hover: '#f3f3f3' }, + }, + text: { + disable: '#7a7a7a', + emphasis: '#1e96eb', + link: '#035f9f', + listDotAndNumber: '#0077cb', + placeholder: '#929292', + primary: '#141414', + pureWhite: '#ffffff', + secondary: '#7a7a7a', + tertiary: '#929292', + highlight: { + border: '#00000038', + bg: { + blue: '#daf0ff', + green: '#f0fccb', + grey: '#e6e6e6', + magenta: '#ffecf6', + orange: '#ffebd5', + purple: '#ede9ff', + red: '#fce5e6', + teal: '#c7f8f2', + yellow: '#fff9b6', + }, + fg: { + blue: '#003c67', + green: '#225c18', + grey: '#7a7a7a', + magenta: '#941555', + orange: '#db7123', + purple: '#7c3aed', + red: '#c83030', + teal: '#0e4841', + yellow: '#ac7400', + }, + }, + }, + toast: { + cardLayer: { second: '#f9f9f9', third: '#f5f5f5' }, + iconState: { error: '#ed3f3f', regular: '#0077cb', success: '#44b931' }, + overlay: { secondary: '#00000008', tertiary: '#0000000d' }, + }, + toggle: { + background: '#1e96eb', + backgroundDisable: '#b3b3b3', + backgroundOff: '#929292', + foreground: '#ffffff', + foregroundDisable: '#e6e6e6', + }, + tooltips: { + background: '#000000', + foreground: '#ffffff', + secondaryBackground: '#ffffff2b', + }, +} as const; +export const nestedDarkTheme = { + badge: { believer: '#002742', free: '#29a3fa', pro: '#29a3fa' }, + block: { + callout: { + background: { + blue: '#002742', + green: '#192e06', + grey: '#414141', + magenta: '#5f0a35', + orange: '#451a02', + purple: '#1e1b4b', + red: '#460606', + teal: '#0e4841', + yellow: '#321a04', + }, + icon: { + blue: '#2f94d5', + green: '#22bf07', + grey: '#cdcdcd', + magenta: '#cc4187', + orange: '#d97705', + purple: '#7c3aed', + red: '#c83030', + teal: '#5cc7ba', + yellow: '#e0aa00', + }, + }, + divider: { divider: '#9292922b' }, + notSupportedBlock: { + background: '#000000', + inlineBg: { default: '#252525', hover: '#414141' }, + }, + }, + button: { + innerBlackBorder: '#ffffff17', + badgesColor: '#c83030', + buttonoOverHover: '#414141', + checkBox: '#1e96eb', + disable: '#7a7a7a', + emptyIconBackground: '#ffffff0d', + error: '#c83030', + iconButtonSolid: '#252525', + primary: '#1e96eb', + pureWhiteText: '#ffffff', + secondary: '#000000', + success: '#1d9c07', + grabber: { select: '#ffffff21', default: '#ffffff17' }, + mobile: { aIActionBackground: '#252525', deletedAction: '#c83030' }, + sidebarButton: { background: '#ffffff08' }, + siderbarPrimary: { background: '#0000002b' }, + }, + centerPeek: { background: '#000000', icon: '#b3b3b3', overlay: '#00000085' }, + chatBlock: { + chatBlockBg: '#252525', + chatBlockBoder: '#e6e6e6', + chatBlockIcon: '#b3b3b3', + chatBlockText: '#141414', + }, + chip: { + label: { + blue: '#004b7b', + green: '#225c18', + grey: '#414141', + magenta: '#5f0a35', + orange: '#843b06', + purple: '#25136d', + red: '#460606', + teal: '#1c6b63', + text: '#ffffffab', + white: '#252525', + yellow: '#ac7400', + }, + tag: { + blue: '#84cfff', + green: '#69b87d', + grey: '#b3b3b3', + orange: '#ff8c38', + purple: '#7c3aed', + red: '#ed3f3f', + teal: '#8be7dc', + yellow: '#facc15', + }, + }, + database: { + border: '#ffffff21', + cardHover: '#ffffff08', + filterHeaderFadeIn: '#000000', + filterHeaderFadeOut: '#00000008', + focusBackground: '#1e96eb0a', + textSecondary: '#ffffff8f', + }, + dialog: { background: { primary: '#252525' } }, + edgeless: { + frame: { + background: { + black: '#cdcdcd', + blue: '#e6f5ff', + green: '#f1fdf4', + grey: '#f3f3f3', + magenta: '#ffecf6', + orange: '#ffebd5', + purple: '#ede9ff', + red: '#fce5e6', + teal: '#e2fdf9', + white: '#ffffff', + yellow: '#fffbd5', + }, + border: { active: '#1e96eb', default: '#ffffff2b', locked: '#ffffff8f' }, + fontColor: { font: '#000000f2' }, + }, + group: { + background: { background: '#ffffff' }, + border: { active: '#1e96eb', borderHint: '#8fd1ff', hover: '#1e96eb' }, + fontColor: { + active: '#1e96eb', + default: '#ffffff8f', + hover: '#1e96eb', + rename: '#000000', + }, + }, + line: { + black: '#000000', + blue: '#29a3fa', + green: '#3cbc36', + grey: '#929292', + magenta: '#e660a4', + orange: '#ff8c38', + purple: '#6e52df', + red: '#ed3f3f', + teal: '#5cc7ba', + white: '#ffffff', + yellow: '#facc15', + }, + mindMap: { line: '#ffffff' }, + note: { + black: '#252525', + blue: '#004b7b', + green: '#3b5315', + grey: '#565656', + magenta: '#5f0a35', + orange: '#843b06', + purple: '#312e81', + red: '#460606', + teal: '#0e4841', + white: '#000000', + yellow: '#704200', + }, + palette: { + black: '#ffffff', + white: '#000000', + heavy: { + blue: '#1c70a5', + green: '#447756', + magenta: '#941555', + orange: '#b55309', + purple: '#5a21b6', + red: '#761717', + yellow: '#ac7400', + }, + light: { + blueLight: '#e6f5ff', + greenLight: '#f1fdf4', + greyLight: '#e6e6e6', + magentaLight: '#ffecf6', + orangeLight: '#ffebd5', + purpleLight: '#d7cdff', + redLight: '#fce5e6', + yellowLight: '#fffbd5', + }, + medium: { + blueMedium: '#84cfff', + greenMedium: '#3cbc36', + greyMedium: '#929292', + magentaMedium: '#e96cab', + orangeMedium: '#ff8c38', + purpleMedium: '#6e52df', + redMedium: '#fb7081', + yellowMedium: '#fcd34d', + }, + }, + selection: { + selectionMarqueeBackground: '#1e96eb14', + selectionMarqueeBorder: '#1e96eb', + }, + shape: { + black: '#000000', + blue: '#9fd9ff', + green: '#9bda91', + grey: '#cdcdcd', + magenta: '#ffc0e0', + orange: '#ffae63', + purple: '#d7cdff', + red: '#fbb7b7', + teal: '#8be7dc', + white: '#ffffff', + yellow: '#fde047', + }, + }, + edgelessToolbar: { + note: { background: '#414141', textColor: '#ffffff21' }, + others: { + background: '#4a4a4ab2', + highlightLinearEnd: '#ffffff1f', + highlightLinearStart: '#ffffff0f', + linearCenter: '#000000a8', + linearEnd: '#00000000', + linearStart: '#00000000', + }, + 'pen&eraser': { + background: '#c1c1c1', + 'bodyShadow-1': '#00000099', + 'bodyShadow-2': '#00000066', + 'bodyShadow-3': '#00000033', + 'bodyShadow-4': '#0000001a', + 'eraserBlue-1': '#0d2338', + 'eraserBlue-2': '#d0dfe5', + 'eraserBlue-3': '#1a7cc1', + eraserBorder: '#7f7f7f', + eraserBorder2: '#9b9b9b', + eraserFill: '#c1c1c1', + eraserHighlight: '#ffffff3b', + }, + }, + icon: { + activated: '#1e96eb', + disable: '#414141', + primary: '#f3f3f3', + secondary: '#cdcdcd', + tertiary: '#565656', + }, + input: { + background: '#ffffff', + border: { active: '#1e96eb', default: '#e6e6e6', error: '#ed3f3f' }, + scrollBar: { handle: '#ffffff2b' }, + }, + layer: { + black: '#ffffff', + pureBlack: '#000000', + pureWhite: '#ffffff', + white: '#000000', + insideBorder: { + blackBorder: '#ffffff0d', + border: '#414141', + primaryBorder: '#1e96eb', + whiteBorder: '#ffffff0d', + }, + background: { + codeBlock: '#252525', + error: '#460606', + hoverOverlay: '#ffffff17', + modal: '#00000085', + modalWhite: '#ffffff2b', + overlayPanel: '#252525', + primary: '#141414', + processing: '#002742', + secondary: '#252525', + success: '#1c3027', + tertiary: '#565656', + translucentUI: '#000000a6', + warning: '#321a04', + mobile: { + iOSControl: '#ffffff', + modal: '#00000085', + primary: '#000000', + secondary: '#252525', + tertiary: '#414141', + }, + }, + }, + loading: { background: '#ffffffd1', foreground: '#0077cb' }, + others: { warnLabel: { black: '#000000', yellow: '#facc15' } }, + portrait: { + localPortrait: '#ffffff3b', + localPortraitBackground: '#ffffff2b', + }, + radio: { + disable: '#7a7a7a', + active: { chekced: '#1e96eb', default: '#b3b3b3' }, + }, + skeleton: { skeleton: '#252525' }, + status: { error: '#c83030', success: '#1d9c07' }, + switch: { + buttonBackground: { active: '#414141', hover: '#ffffff0d' }, + fontColor: { + primary: '#e6e6e6', + secondary: '#929292', + tertiary: '#7a7a7a', + }, + iconColor: { active: '#cdcdcd', default: '#7a7a7a' }, + switchBackground: { background: '#252525' }, + }, + tab: { + divider: { divider: '#ffffff21', indicator: '#1e96eb' }, + fontColor: { active: '#e6e6e6', default: '#565656', hover: '#e6e6e6' }, + iconColor: { active: '#cdcdcd', default: '#7a7a7a', hover: '#cdcdcd' }, + tabBackground: { active: '#414141', default: '#252525', hover: '#252525' }, + }, + text: { + disable: '#565656', + emphasis: '#29a3fa', + link: '#7ac8ff', + listDotAndNumber: '#4ab1fa', + placeholder: '#565656', + primary: '#e6e6e6', + pureWhite: '#ffffff', + secondary: '#929292', + tertiary: '#7a7a7a', + highlight: { + border: '#ffffff3b', + bg: { + blue: '#002742', + green: '#192e06', + grey: '#414141', + magenta: '#5f0a35', + orange: '#843b06', + purple: '#2e1065', + red: '#460606', + teal: '#0e4841', + yellow: '#321a04', + }, + fg: { + blue: '#2f94d5', + green: '#9bda91', + grey: '#565656', + magenta: '#f37fba', + orange: '#ffae63', + purple: '#9681ef', + red: '#fc7979', + teal: '#448e86', + yellow: '#facc15', + }, + }, + }, + toast: { + cardLayer: { second: '#252525', third: '#252525' }, + iconState: { error: '#ed3f3f', regular: '#035f9f', success: '#44b931' }, + overlay: { secondary: '#0000000d', tertiary: '#00000008' }, + }, + toggle: { + background: '#0077cb', + backgroundDisable: '#414141', + backgroundOff: '#565656', + foreground: '#fffffffa', + foregroundDisable: '#929292', + }, + tooltips: { + background: '#414141', + foreground: '#ffffff', + secondaryBackground: '#ffffff2b', + }, +} as const; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c792f32..c8f9c73 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -241,6 +241,40 @@ importers: specifier: ^2.3.0 version: 2.3.0(vite@4.4.8) + scripts: + dependencies: + dotenv: + specifier: ^16.4.5 + version: 16.4.5 + inquirer: + specifier: ^10.0.1 + version: 10.0.1 + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 + devDependencies: + '@toeverything/theme': + specifier: workspace:* + version: link:../packages/theme + '@types/node': + specifier: ^20.4.7 + version: 20.4.7 + '@types/node-fetch': + specifier: ^2.6.11 + version: 2.6.11 + prettier: + specifier: ^3.0.0 + version: 3.0.0 + rimraf: + specifier: ^6.0.0 + version: 6.0.0 + tsx: + specifier: ^4.19.2 + version: 4.19.2 + typescript: + specifier: ^5.1.3 + version: 5.1.3 + packages: /@adobe/css-tools@4.4.0: @@ -1765,6 +1799,15 @@ packages: dev: true optional: true + /@esbuild/aix-ppc64@0.23.1: + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -1792,6 +1835,15 @@ packages: dev: true optional: true + /@esbuild/android-arm64@0.23.1: + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -1819,6 +1871,15 @@ packages: dev: true optional: true + /@esbuild/android-arm@0.23.1: + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -1846,6 +1907,15 @@ packages: dev: true optional: true + /@esbuild/android-x64@0.23.1: + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -1873,6 +1943,15 @@ packages: dev: true optional: true + /@esbuild/darwin-arm64@0.23.1: + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -1900,6 +1979,15 @@ packages: dev: true optional: true + /@esbuild/darwin-x64@0.23.1: + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -1927,6 +2015,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-arm64@0.23.1: + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -1954,6 +2051,15 @@ packages: dev: true optional: true + /@esbuild/freebsd-x64@0.23.1: + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -1981,6 +2087,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm64@0.23.1: + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -2008,6 +2123,15 @@ packages: dev: true optional: true + /@esbuild/linux-arm@0.23.1: + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -2035,6 +2159,15 @@ packages: dev: true optional: true + /@esbuild/linux-ia32@0.23.1: + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -2062,6 +2195,15 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.23.1: + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -2089,6 +2231,15 @@ packages: dev: true optional: true + /@esbuild/linux-mips64el@0.23.1: + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -2116,6 +2267,15 @@ packages: dev: true optional: true + /@esbuild/linux-ppc64@0.23.1: + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -2143,6 +2303,15 @@ packages: dev: true optional: true + /@esbuild/linux-riscv64@0.23.1: + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -2170,6 +2339,15 @@ packages: dev: true optional: true + /@esbuild/linux-s390x@0.23.1: + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -2197,6 +2375,15 @@ packages: dev: true optional: true + /@esbuild/linux-x64@0.23.1: + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -2224,6 +2411,24 @@ packages: dev: true optional: true + /@esbuild/netbsd-x64@0.23.1: + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.1: + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -2251,6 +2456,15 @@ packages: dev: true optional: true + /@esbuild/openbsd-x64@0.23.1: + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -2278,6 +2492,15 @@ packages: dev: true optional: true + /@esbuild/sunos-x64@0.23.1: + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -2305,6 +2528,15 @@ packages: dev: true optional: true + /@esbuild/win32-arm64@0.23.1: + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -2332,6 +2564,15 @@ packages: dev: true optional: true + /@esbuild/win32-ia32@0.23.1: + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -2359,6 +2600,15 @@ packages: dev: true optional: true + /@esbuild/win32-x64@0.23.1: + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2456,6 +2706,151 @@ packages: deprecated: Use @eslint/object-schema instead dev: true + /@inquirer/checkbox@2.5.0: + resolution: {integrity: sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/confirm@3.2.0: + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/core@9.2.1: + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/figures': 1.0.8 + '@inquirer/type': 2.0.0 + '@types/mute-stream': 0.0.4 + '@types/node': 22.10.1 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 1.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/editor@2.2.0: + resolution: {integrity: sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + external-editor: 3.1.0 + dev: false + + /@inquirer/expand@2.3.0: + resolution: {integrity: sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/figures@1.0.8: + resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==} + engines: {node: '>=18'} + dev: false + + /@inquirer/input@2.3.0: + resolution: {integrity: sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/number@1.1.0: + resolution: {integrity: sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + dev: false + + /@inquirer/password@2.2.0: + resolution: {integrity: sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + dev: false + + /@inquirer/prompts@5.5.0: + resolution: {integrity: sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==} + engines: {node: '>=18'} + dependencies: + '@inquirer/checkbox': 2.5.0 + '@inquirer/confirm': 3.2.0 + '@inquirer/editor': 2.2.0 + '@inquirer/expand': 2.3.0 + '@inquirer/input': 2.3.0 + '@inquirer/number': 1.1.0 + '@inquirer/password': 2.2.0 + '@inquirer/rawlist': 2.3.0 + '@inquirer/search': 1.1.0 + '@inquirer/select': 2.5.0 + dev: false + + /@inquirer/rawlist@2.3.0: + resolution: {integrity: sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/search@1.1.0: + resolution: {integrity: sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 1.5.5 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/select@2.5.0: + resolution: {integrity: sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==} + engines: {node: '>=18'} + dependencies: + '@inquirer/core': 9.2.1 + '@inquirer/figures': 1.0.8 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + dev: false + + /@inquirer/type@1.5.5: + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + dependencies: + mute-stream: 1.0.0 + dev: false + + /@inquirer/type@2.0.0: + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + engines: {node: '>=18'} + dependencies: + mute-stream: 1.0.0 + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -5920,6 +6315,12 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 20.4.7 + dev: false + /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: @@ -5939,7 +6340,12 @@ packages: /@types/node@20.4.7: resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==} - dev: true + + /@types/node@22.10.1: + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + dependencies: + undici-types: 6.20.0 + dev: false /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -6024,6 +6430,10 @@ packages: '@types/node': 20.4.7 dev: true + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: false + /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true @@ -6779,7 +7189,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-escapes@6.2.1: resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} @@ -6789,7 +7198,6 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -6808,7 +7216,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -7416,6 +7823,10 @@ packages: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: false + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -7499,6 +7910,11 @@ packages: '@colors/colors': 1.5.0 dev: true + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: false + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: true @@ -7571,7 +7987,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -7579,7 +7994,6 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /colors@1.2.5: resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} @@ -7756,6 +8170,11 @@ packages: fs-exists-sync: 0.1.0 dev: true + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: false + /data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -8084,7 +8503,6 @@ packages: /dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dev: true /dts-bundle-generator@9.5.1: resolution: {integrity: sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==} @@ -8136,7 +8554,6 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} @@ -8414,6 +8831,38 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true + /esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + dev: true + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -8929,6 +9378,15 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: false + /extract-zip@1.7.0: resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} hasBin: true @@ -8996,6 +9454,14 @@ packages: pend: 1.2.0 dev: true + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + dev: false + /fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true @@ -9189,6 +9655,13 @@ packages: engines: {node: '>=0.4.x'} dev: true + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: false + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -9420,6 +9893,19 @@ packages: path-scurry: 1.11.1 dev: true + /glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + dependencies: + foreground-child: 3.2.1 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + dev: true + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -9674,7 +10160,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: true /iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} @@ -9740,6 +10225,19 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /inquirer@10.0.1: + resolution: {integrity: sha512-XgthhRIn0Ci9JdGJpUo2EtpPfaczbooZbGTN+FTzSCyUb7YHJcPPnuSXfeG5903bJMy3OyEoVTQMnvO4Ly5tFg==} + engines: {node: '>=18'} + dependencies: + '@inquirer/prompts': 5.5.0 + '@inquirer/type': 1.5.5 + '@types/mute-stream': 0.0.4 + ansi-escapes: 4.3.2 + mute-stream: 1.0.0 + run-async: 3.0.0 + rxjs: 7.8.1 + dev: false + /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} @@ -9880,7 +10378,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -10162,6 +10659,13 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jackspeak@4.0.2: + resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} + engines: {node: 20 || >=22} + dependencies: + '@isaacs/cliui': 8.0.2 + dev: true + /jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -11060,6 +11564,11 @@ packages: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} dev: true + /lru-cache@11.0.2: + resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==} + engines: {node: 20 || >=22} + dev: true + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -11597,6 +12106,13 @@ packages: engines: {node: '>=4'} dev: true + /minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} dependencies: @@ -11720,6 +12236,11 @@ packages: resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} dev: true + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -11804,6 +12325,11 @@ packages: minimatch: 3.1.2 dev: true + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + /node-fetch-native@1.6.4: resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} dev: true @@ -11820,6 +12346,15 @@ packages: whatwg-url: 5.0.0 dev: true + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -12059,6 +12594,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: false + /outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} dev: true @@ -12233,6 +12773,14 @@ packages: minipass: 7.1.2 dev: true + /path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + dependencies: + lru-cache: 11.0.2 + minipass: 7.1.2 + dev: true + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true @@ -13067,6 +13615,14 @@ packages: glob: 7.2.3 dev: true + /rimraf@6.0.0: + resolution: {integrity: sha512-u+yqhM92LW+89cxUQK0SRyvXYQmyuKHx0jkx4W7KfwLGLqJnQM5031Uv1trE4gB9XEXBM/s6MxKlfW95IidqaA==} + engines: {node: 20 || >=22} + hasBin: true + dependencies: + glob: 11.0.0 + dev: true + /rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -13103,6 +13659,11 @@ packages: fsevents: 2.3.3 dev: true + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: false + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -13116,6 +13677,12 @@ packages: tslib: 1.14.1 dev: true + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.3 + dev: false + /sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -13156,7 +13723,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true /scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -13326,7 +13892,6 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - dev: true /simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} @@ -13532,7 +14097,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -13605,7 +14169,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} @@ -13860,6 +14423,13 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: false + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -13936,6 +14506,17 @@ packages: typescript: 5.1.3 dev: true + /tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.7.6 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -13961,7 +14542,6 @@ packages: /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} @@ -14077,6 +14657,10 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + /undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + dev: false + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -14637,6 +15221,11 @@ packages: defaults: 1.0.4 dev: true + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true @@ -14789,7 +15378,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -14974,6 +15562,11 @@ packages: engines: {node: '>=12.20'} dev: true + /yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + dev: false + /z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 600b4bb..5d80b26 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - 'packages/**' + - 'scripts/**' diff --git a/scripts/package.json b/scripts/package.json index 9638a66..3345127 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -2,18 +2,19 @@ "name": "@toeverything/design-scripts", "version": "0.0.1", "description": "Scripts for design system", - "main": "dist/index.js", + "main": "src/index.ts", "type": "module", "scripts": { - "build": "rimraf dist && tsc", - "start": "npm run build && node ./dist/index.js" + "start": "tsx ./src/index.ts" }, "keywords": [], "devDependencies": { + "@toeverything/theme": "workspace:*", "@types/node": "^20.4.7", "@types/node-fetch": "^2.6.11", "prettier": "^3.0.0", "rimraf": "^6.0.0", + "tsx": "^4.19.2", "typescript": "^5.1.3" }, "dependencies": { diff --git a/scripts/src/generate-theme-variables.ts b/scripts/src/generate-theme-variables.ts index 1ef4ae8..459268e 100644 --- a/scripts/src/generate-theme-variables.ts +++ b/scripts/src/generate-theme-variables.ts @@ -1,9 +1,11 @@ -import { execSync } from 'child_process'; -import { appendFileSync, readFileSync } from 'fs'; -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; +import { execSync } from 'node:child_process'; +import { appendFileSync, readFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; -import { jsonToTs, writeIfChanged } from './utils/writer.js'; +import * as prevTheme from '@toeverything/theme/v2'; + +import { jsonToTs, unflatten, writeIfChanged } from './utils/writer.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -43,15 +45,6 @@ type Theme = { darkThemeV2: Record; }; -function resolveVariablesTs() { - const raw = readFileSync(VARIABLES_PATH, { encoding: 'utf-8' }); - const withoutExport = raw.replace(/export /g, ''); - const func = new Function( - `${withoutExport}; return { lightThemeV2, darkThemeV2 };` - ); - return func() as Theme; -} - type Change = { new: Record; removed: Record; @@ -238,13 +231,18 @@ async function main() { '// ⚠️ Do not modify this file directly!', '', ]; + + const nestedLightTheme = unflatten(lightTheme); + const nestedDarkTheme = unflatten(darkTheme); + const code = await jsonToTs({ lightThemeV2: { value: lightTheme, prefixLines: doNotModify }, darkThemeV2: { value: darkTheme }, + nestedLightTheme: { value: nestedLightTheme, asConst: true }, + nestedDarkTheme: { value: nestedDarkTheme, asConst: true }, }); - const previous = resolveVariablesTs(); - const { md } = generateThemeChangeLog(previous, { + const { md } = generateThemeChangeLog(prevTheme, { lightThemeV2: lightTheme, darkThemeV2: darkTheme, }); diff --git a/scripts/src/utils/writer.ts b/scripts/src/utils/writer.ts index ea8d29d..075c3ba 100644 --- a/scripts/src/utils/writer.ts +++ b/scripts/src/utils/writer.ts @@ -1,7 +1,8 @@ -import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; -import { dirname, join } from 'path'; +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; +import { dirname, join } from 'node:path'; +import { fileURLToPath } from 'node:url'; + import prettier from 'prettier'; -import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); @@ -15,7 +16,7 @@ const prettierConfig = JSON.parse( * @returns `true` if the file was written, `false` otherwise. */ export const writeIfChanged = (path: string, content: string) => { - const folder = path.split('/').slice(0, -1).join('/'); + const folder = dirname(path); if (!existsSync(folder)) mkdirSync(folder); const old = existsSync(path) ? readFileSync(path, { encoding: 'utf-8' }) : ''; if (old && old === content) return false; @@ -31,6 +32,7 @@ export const jsonToTs = async ( export?: boolean; prefixLines?: string[]; suffixLines?: string[]; + asConst?: boolean; } > ) => { @@ -40,6 +42,7 @@ export const jsonToTs = async ( export: exportVar = true, prefixLines = [], suffixLines = [], + asConst = false, } = options ?? {}; if (prefixLines.length) { @@ -47,7 +50,7 @@ export const jsonToTs = async ( } code += `${exportVar ? 'export ' : ''}const ${varName} = ${JSON.stringify( value - )};`; + )}${asConst ? ' as const' : ''};`; if (suffixLines.length) { code += '\n' + suffixLines.join('\n'); } @@ -58,3 +61,22 @@ export const jsonToTs = async ( ...prettierConfig, }); }; + +// { 'a/b/c': 1, 'a/b/d': 2, 'a/e': 3 } => { a: { b: { c: 1, d: 2 }, e: 3 } } +export const unflatten = (obj: Record) => { + const result: Record = {}; + for (const [key, value] of Object.entries(obj)) { + const keys = key.split('/'); + let cursor = result; + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + if (i === keys.length - 1) { + cursor[k] = value; + } else { + cursor[k] ??= {}; + cursor = cursor[k]; + } + } + } + return result; +};