@konomi-app/k2 3.3.0 → 3.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/plugin.js +125 -184
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -257,9 +257,6 @@ async function buildSingleEntry(params) {
|
|
|
257
257
|
const config = createViteConfig({
|
|
258
258
|
...viteConfig,
|
|
259
259
|
mode,
|
|
260
|
-
esbuild: {
|
|
261
|
-
target: "es2022"
|
|
262
|
-
},
|
|
263
260
|
build: {
|
|
264
261
|
...viteConfig.build,
|
|
265
262
|
lib: {
|
|
@@ -271,6 +268,7 @@ async function buildSingleEntry(params) {
|
|
|
271
268
|
rollupOptions: {
|
|
272
269
|
...viteConfig.build?.rollupOptions,
|
|
273
270
|
output: {
|
|
271
|
+
format: "iife",
|
|
274
272
|
assetFileNames: `${name}.[ext]`,
|
|
275
273
|
// 外部ライブラリのソースマップを無視して警告を抑制
|
|
276
274
|
sourcemapIgnoreList: (relativeSourcePath) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/build.ts","../src/lib/constants.ts","../src/commands/build-tailwind.ts","../src/lib/import.ts","../src/lib/tailwind.ts","../src/lib/k2.ts","../src/lib/vite.ts","../src/commands/dev/index.ts","../src/commands/dev/tailwind.ts","../src/lib/exec.ts","../src/lib/cert.ts","../src/commands/genkey.ts","../src/commands/genkey-base.ts","../src/commands/build-esbuild.ts","../src/commands/lint.ts","../src/lib/lint.ts"],"sourcesContent":["#!/usr/bin/env node\r\nimport { program } from 'commander';\r\nimport build from './commands/build.js';\r\nimport dev from './commands/dev/index.js';\r\nimport genkey from './commands/genkey.js';\r\nimport esbuildBuild from './commands/build-esbuild.js';\r\nimport lint from './commands/lint.js';\r\n\r\nprogram.name('k2').version('1.12.0').description('k2 - 🍳 kintone kitchen 🍳');\r\n\r\nbuild();\r\nesbuildBuild();\r\ndev();\r\ngenkey();\r\nlint();\r\n\r\nprogram.parse(process.argv);\r\n","import { program } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\nimport { buildTailwind } from './build-tailwind.js';\nimport { importK2Config } from '../lib/import.js';\nimport { getDefaultK2Config } from '../lib/k2.js';\nimport { buildEntriesWithVite, getEntryPointsFromDir } from '../lib/vite.js';\n\nexport default function command() {\n program\n .command('build')\n .option('-o, --outdir <outdir>', 'Output directory.', path.join(WORKSPACE_DIRECTORY, 'prod'))\n .option('-i, --input <input>', 'Input directory.', path.join('src', 'apps'))\n .option('--config <config>', 'k2 config file path')\n .description('Build the project for production with Vite.')\n .action(action);\n}\n\nexport async function action(options: { outdir: string; input: string; config?: string }) {\n console.group('🍳 Build the project for production');\n\n try {\n const { outdir, input, config } = options;\n const outDir = path.resolve(outdir);\n\n const entries = getEntryPointsFromDir(path.resolve(input));\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n const k2Config = config ? await importK2Config(config) : getDefaultK2Config();\n const fullConfig: K2.FullConfig = { ...k2Config, outDir };\n\n // 出力ディレクトリをクリア\n // await fs.emptyDir(outDir);\n\n const results = await Promise.allSettled([\n buildEntriesWithVite({\n entries,\n outDir,\n mode: 'production',\n sourcemap: false,\n minify: true,\n }),\n buildTailwind(fullConfig),\n ]);\n for (const result of results) {\n if (result.status === 'rejected') {\n throw result.reason;\n }\n }\n console.log('✨ Build success.');\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import path from 'path';\n\nexport const WORKSPACE_DIRECTORY = '.k2';\nexport const DEVELOPMENT_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'dev');\nexport const PRODUCTION_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'prod');\n\nexport const CONFIG_FILE_NAME = 'k2.config.mjs';\nexport const PLUGIN_CONFIG_FILE_NAME = 'plugin.config.mjs';\n\n/** kintoneプラグインの一時ファイルを管理するフォルダ */\nexport const PLUGIN_WORKSPACE_DIRECTORY = '.plugin';\n/** kintoneプラグインのcontents.zipに格納するファイルを管理するフォルダ */\nexport const PLUGIN_CONTENTS_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'contents');\n/** kintoneプラグインの開発時、ローカルサーバーに反映するファイルを管理するフォルダ */\nexport const PLUGIN_DEVELOPMENT_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'dev');\n/** kintoneプラグインの本番ビルド出力ディレクトリ */\nexport const PLUGIN_PRODUCTION_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'prod');\n\n/** ローカルサーバーのデフォルトポート番号 */\nexport const DEFAULT_PORT = 32767;\n","import path from 'path';\nimport { esmImport } from '../lib/import.js';\nimport { outputCss } from '../lib/tailwind.js';\n\nexport const buildTailwind = async (config: K2.FullConfig) => {\n if (!config.tailwind?.css || !config.tailwind?.config) {\n return;\n }\n const tailwindConfig = (await esmImport(path.resolve(config.tailwind.config))).default;\n\n const inputPath = path.resolve(config.tailwind.css);\n\n const fileName = config.tailwind.fileName ?? 'tailwind.css';\n\n await outputCss({\n inputPath,\n outputPath: path.join(config.outDir, fileName),\n config: tailwindConfig,\n minify: true,\n });\n console.log(`✨ Built ${fileName}`);\n};\n","import { pathToFileURL } from 'url';\nimport { CONFIG_FILE_NAME, PLUGIN_CONFIG_FILE_NAME } from './constants.js';\nimport path from 'path';\n\nexport const esmImport = (path: string) => {\n if (process.platform === 'win32') {\n return import(pathToFileURL(path).toString());\n } else {\n return import(path);\n }\n};\n\nexport const importK2Config = async (configFileName?: string): Promise<K2.Config> => {\n return (await esmImport(path.resolve(configFileName ?? CONFIG_FILE_NAME))).default;\n};\n\nexport const importK2PluginConfig = async (\n configFileName?: string\n): Promise<Plugin.Meta.Config> => {\n return (await esmImport(path.resolve(configFileName ?? PLUGIN_CONFIG_FILE_NAME))).default;\n};\n","import chokidar from 'chokidar';\nimport cssnanoPlugin from 'cssnano';\nimport fs from 'fs-extra';\nimport { glob } from 'glob';\nimport path from 'path';\nimport postcss from 'postcss';\nimport { debounce } from 'remeda';\nimport tailwindcss, { type Config as TailwindConfig } from 'tailwindcss';\nimport invariant from 'tiny-invariant';\nimport { esmImport } from './import.js';\n\nexport const getTailwindConfigFromK2Config = async (\n k2Config: K2.Config['tailwind']\n): Promise<TailwindConfig> => {\n invariant(k2Config?.config, 'tailwind.config is required');\n const config = (await esmImport(path.resolve(k2Config?.config))).default;\n return config;\n};\n\nexport const getTailwindInputCss = (\n config: Plugin.Meta.Config['tailwind']\n): { desktop: string; config: string } => {\n invariant(config?.css, 'tailwind.css is required');\n const { css } = config;\n if (typeof css === 'string') {\n const resolved = path.resolve(css);\n return { desktop: resolved, config: resolved };\n }\n return {\n desktop: path.resolve(css.desktop),\n config: path.resolve(css.config),\n };\n};\n\nexport const getTailwindConfig = async (\n config: Plugin.Meta.Config['tailwind']\n): Promise<{\n desktop: TailwindConfig;\n config: TailwindConfig;\n}> => {\n invariant(config?.config, 'tailwind.config is required');\n\n const { config: configPath } = config;\n\n const configPathForDesktop = typeof configPath === 'string' ? configPath : configPath.desktop;\n const configPathForConfig = typeof configPath === 'string' ? configPath : configPath.config;\n\n const desktopConfig = (await esmImport(path.resolve(configPathForDesktop))).default;\n const configConfig = (await esmImport(path.resolve(configPathForConfig))).default;\n\n return { desktop: desktopConfig, config: configConfig };\n};\n\nexport const outputCss = async (params: {\n inputPath: string;\n outputPath: string;\n config: TailwindConfig;\n minify?: boolean;\n}) => {\n const { inputPath, outputPath, config, minify = false } = params;\n\n const css = await fs.readFile(inputPath, 'utf8');\n\n const result = await postcss([tailwindcss(config), ...(minify ? [cssnanoPlugin()] : [])]).process(\n css,\n {\n from: inputPath,\n to: outputPath,\n }\n );\n\n await fs.writeFile(outputPath, result.css);\n\n if (result.map) {\n await fs.writeFile(`${outputPath}.map`, result.map.toString());\n }\n};\n\ntype WatchType = 'init' | 'add' | 'change' | 'unlink';\n\nexport const watchTailwindCSS = async (params: {\n /** input path */\n input: string;\n /** output path */\n output: string;\n /** tailwindcss config file */\n config: TailwindConfig;\n /** callback function */\n onChanges?: (params: { input: string; output: string; type: WatchType }) => void;\n}) => {\n const { input, output, config } = params;\n\n const content = (config.content as string[] | undefined) ?? ['./src/**/*.{ts,tsx}'];\n\n const files = await glob([...content, input], { ignore: ['**/node_modules/**'] });\n\n const watcher = chokidar.watch(files, {\n persistent: true,\n ignoreInitial: true,\n });\n\n let isInitialized = false;\n\n const processChanges = async (type: WatchType) => {\n try {\n await outputCss({ inputPath: input, outputPath: output, config });\n params.onChanges?.({ input, output, type });\n } catch (error) {\n console.error('Error building Tailwind CSS:', error);\n }\n };\n\n const debouncedProcessChanges = debounce(processChanges, { waitMs: 1000 });\n\n watcher.on('ready', async () => {\n if (!isInitialized) {\n isInitialized = true;\n await processChanges('init');\n }\n });\n\n watcher.on('error', (error) => {\n console.error('Error watching Tailwind CSS:', error);\n });\n\n watcher.on('add', (path) => {\n debouncedProcessChanges.call('add');\n });\n watcher.on('change', (path) => {\n debouncedProcessChanges.call('change');\n });\n watcher.on('unlink', (path) => {\n debouncedProcessChanges.call('unlink');\n });\n watcher.on('unlinkDir', (path) => {\n debouncedProcessChanges.call('unlink');\n });\n\n return watcher;\n};\n","export const getDefaultK2Config = (): K2.Config => {\n return {\n version: 1,\n server: {\n port: 32768,\n },\n };\n};\n","import chalk from 'chalk';\nimport fs from 'fs-extra';\nimport os from 'os';\nimport path from 'path';\nimport type { InlineConfig } from 'vite';\nimport { build as viteBuild } from 'vite';\n\n/** 同時ビルド数のデフォルト値(CPU数に基づく) */\nconst DEFAULT_CONCURRENCY = Math.max(1, os.cpus().length - 1);\n\n/**\n * 並列実行を制限するためのユーティリティ\n * @param items 処理するアイテムの配列\n * @param concurrency 同時実行数の上限\n * @param fn 各アイテムに適用する非同期関数\n */\nasync function parallelLimit<T, R>(\n items: T[],\n concurrency: number,\n fn: (item: T) => Promise<R>\n): Promise<R[]> {\n const results: R[] = [];\n const executing: Promise<void>[] = [];\n\n for (const item of items) {\n const promise = fn(item).then((result) => {\n results.push(result);\n });\n\n const e = promise.then(() => {\n executing.splice(executing.indexOf(e), 1);\n });\n executing.push(e);\n\n if (executing.length >= concurrency) {\n await Promise.race(executing);\n }\n }\n\n await Promise.all(executing);\n return results;\n}\n\n/**\n * Vite設定を生成する\n */\nexport const createViteConfig = (config: Partial<InlineConfig> = {}): InlineConfig => {\n const plugins: InlineConfig['plugins'] = [...(config.plugins ?? [])];\n\n // vite-tsconfig-pathsがインストールされている場合は自動で追加\n try {\n const tsconfigPaths = require('vite-tsconfig-paths');\n plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());\n } catch {\n // vite-tsconfig-paths is optional\n }\n\n const mode = config.mode ?? 'production';\n\n return {\n ...config,\n configFile: false,\n // ソースマップ関連のエラーメッセージを抑制\n logLevel: config.logLevel ?? 'warn',\n // ブラウザ向けにNode.js固有のオブジェクトをビルド時に解決\n define: {\n 'process.env.NODE_ENV': JSON.stringify(mode),\n 'process.env': JSON.stringify({}),\n ...config.define,\n },\n build: {\n ...config.build,\n // ブラウザ向けターゲット\n target: config.build?.target ?? 'es2020',\n cssCodeSplit: false,\n rollupOptions: {\n ...config.build?.rollupOptions,\n onwarn: (warning, warn) => {\n // \"use client\"などのディレクティブ警告を無視\n if (['MODULE_LEVEL_DIRECTIVE'].includes(warning.code ?? '')) {\n return;\n }\n // ソースマップ関連の警告を無視\n if (warning.message?.includes('sourcemap') || warning.code === 'SOURCEMAP_ERROR') {\n return;\n }\n warn(warning);\n },\n },\n },\n plugins,\n resolve: {\n ...config.resolve,\n alias: {\n '@': path.resolve(process.cwd(), 'src'),\n ...config.resolve?.alias,\n },\n },\n };\n};\n\n/**\n * 各エントリーポイントを個別にビルドする(chunksを作らないため)\n * パフォーマンス最適化: 並列ビルドを実行(同時実行数を制限)\n */\nexport async function buildEntriesWithVite(params: {\n entries: Record<string, string>;\n outDir: string;\n mode?: 'development' | 'production';\n sourcemap?: boolean | 'inline';\n minify?: boolean;\n viteConfig?: Partial<InlineConfig>;\n /** 同時ビルド数(デフォルト: CPU数 - 1) */\n concurrency?: number;\n}): Promise<void> {\n const {\n entries,\n outDir,\n mode = 'production',\n sourcemap = false,\n minify = true,\n viteConfig = {},\n concurrency = DEFAULT_CONCURRENCY,\n } = params;\n\n const entryNames = Object.keys(entries);\n\n // 単一エントリーの場合は直接ビルド\n if (entryNames.length === 1) {\n const name = entryNames[0];\n await buildSingleEntry({\n name,\n entryPath: entries[name],\n outDir,\n mode,\n sourcemap,\n minify,\n viteConfig,\n });\n return;\n }\n\n // 複数エントリーの場合は並列ビルド(同時実行数を制限)\n await parallelLimit(entryNames, concurrency, async (name) => {\n await buildSingleEntry({\n name,\n entryPath: entries[name],\n outDir,\n mode,\n sourcemap,\n minify,\n viteConfig,\n });\n });\n}\n\n/**\n * 単一のエントリーポイントをビルドする内部関数\n */\nasync function buildSingleEntry(params: {\n name: string;\n entryPath: string;\n outDir: string;\n mode: 'development' | 'production';\n sourcemap: boolean | 'inline';\n minify: boolean;\n viteConfig: Partial<InlineConfig>;\n}): Promise<void> {\n const { name, entryPath, outDir, mode, sourcemap, minify, viteConfig } = params;\n\n // ハイフンなどを含む名前を有効なJS識別子に変換(例: \"chatgpt-log\" → \"chatgptLog\")\n const safeName = name\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[^a-zA-Z0-9_$]/g, '_');\n\n const config = createViteConfig({\n ...viteConfig,\n mode,\n esbuild: {\n target: 'es2022',\n },\n build: {\n ...viteConfig.build,\n lib: {\n entry: entryPath,\n name: safeName,\n fileName: () => `${name}.js`,\n formats: ['iife'],\n },\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n output: {\n assetFileNames: `${name}.[ext]`,\n // 外部ライブラリのソースマップを無視して警告を抑制\n sourcemapIgnoreList: (relativeSourcePath) => {\n return relativeSourcePath.includes('node_modules');\n },\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir,\n emptyOutDir: false,\n sourcemap,\n minify,\n cssCodeSplit: false,\n },\n });\n\n await viteBuild(config);\n}\n\n/** エントリーポイントファイル名の候補 */\nconst ENTRY_FILE_NAMES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs'];\n\n/**\n * ディレクトリからエントリーポイントを取得する\n */\nexport function getEntryPointsFromDir(inputDir: string): Record<string, string> {\n const entries: Record<string, string> = {};\n\n if (!fs.existsSync(inputDir)) {\n throw new Error(`Input directory not found: ${inputDir}`);\n }\n\n const dirs = fs.readdirSync(inputDir, { withFileTypes: true });\n\n for (const dirent of dirs) {\n if (!dirent.isDirectory()) continue;\n\n const dirName = dirent.name;\n const dirPath = path.join(inputDir, dirName);\n\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(dirPath, filename);\n if (fs.existsSync(entryPath)) {\n entries[dirName] = entryPath;\n break;\n }\n }\n }\n\n return entries;\n}\n\n/**\n * エントリーポイントを探す(単一ディレクトリまたはファイル)\n */\nexport function findEntryPoint(basePath: string): string | null {\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(basePath, filename);\n if (fs.existsSync(entryPath)) {\n return entryPath;\n }\n }\n // ディレクトリではなく直接ファイルが指定された場合\n if (fs.existsSync(basePath) && fs.statSync(basePath).isFile()) {\n return basePath;\n }\n return null;\n}\n\n/**\n * プラグイン用エントリーポイントを取得する\n */\nexport function getPluginEntryPoints(options: {\n configEntry: string;\n desktopEntry: string;\n}): Record<string, string> {\n const entries: Record<string, string> = {};\n\n const configPath = findEntryPoint(options.configEntry);\n if (configPath) {\n entries['config'] = configPath;\n } else {\n console.log(chalk.yellow(` ⚠ Config entry not found: ${options.configEntry}`));\n }\n\n const desktopPath = findEntryPoint(options.desktopEntry);\n if (desktopPath) {\n entries['desktop'] = desktopPath;\n } else {\n console.log(chalk.yellow(` ⚠ Desktop entry not found: ${options.desktopEntry}`));\n }\n\n return entries;\n}\n\nexport type { InlineConfig };\n","import { program } from 'commander';\nimport { createServer } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {\n CONFIG_FILE_NAME,\n DEFAULT_PORT,\n DEVELOPMENT_DIRECTORY,\n WORKSPACE_DIRECTORY,\n} from '../../lib/constants.js';\nimport { importK2Config } from '../../lib/import.js';\nimport { watchCss } from './tailwind.js';\nimport { generateCert, hasCertificates, loadCertificates } from '../../lib/cert.js';\nimport { createViteConfig, buildEntriesWithVite, getEntryPointsFromDir } from '../../lib/vite.js';\n\nexport default function command() {\n program\n .command('dev')\n .description('Start development server with Vite.')\n .option('-i, --input <input>', 'Input directory', 'src/apps')\n .option('-o, --outdir <outdir>', 'Output directory.', DEVELOPMENT_DIRECTORY)\n .option('-c, --certdir <certdir>', 'Certificate directory', WORKSPACE_DIRECTORY)\n .option('--config <config>', 'k2 config file path')\n .option('-p, --port <port>', 'Port number')\n .action(action);\n}\n\nexport async function action(options: {\n outdir: string;\n certdir: string;\n port?: string;\n config?: string;\n input: string;\n}) {\n const { certdir, outdir, config, port: specifiedPort, input } = options;\n console.group('🍳 Start development server');\n try {\n console.log(`📂 Output directory: ${outdir}`);\n console.log(`🔑 Certificate directory: ${certdir}`);\n\n let k2Config: null | K2.Config = null;\n try {\n k2Config = await importK2Config(config);\n } catch (error) {\n console.log(`⚙ ${CONFIG_FILE_NAME} not found. use default settings.`);\n }\n\n const port = Number(specifiedPort ?? k2Config?.server?.port ?? DEFAULT_PORT);\n const certDirPath = path.resolve(certdir);\n const outputDir = path.resolve(outdir);\n const inputDir = path.resolve(input);\n\n // SSL証明書の確認\n if (!hasCertificates(certDirPath)) {\n console.log(chalk.yellow('📜 SSL certificates not found. Generating...'));\n try {\n await generateCert(certDirPath);\n console.log(chalk.green('✅ SSL certificates generated successfully'));\n } catch (error) {\n console.log(\n chalk.red('❌ Failed to generate SSL certificates. Make sure mkcert is installed.')\n );\n console.log(chalk.gray(' Install mkcert: https://github.com/FiloSottile/mkcert'));\n throw error;\n }\n }\n\n const entries = getEntryPointsFromDir(inputDir);\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n await fs.emptyDir(outputDir);\n\n const { key, cert } = loadCertificates(certDirPath);\n\n // 初回ビルド\n console.log(chalk.gray(' Building...'));\n await buildEntriesWithVite({\n entries,\n outDir: outputDir,\n mode: 'development',\n sourcemap: 'inline',\n minify: false,\n });\n\n // 開発サーバー起動\n const serverConfig = createViteConfig({\n root: outputDir,\n server: {\n port,\n https: { key, cert },\n },\n });\n\n const server = await createServer(serverConfig);\n await server.listen();\n\n console.log(chalk.green(`\\n✨ Development server ready!`));\n console.log(chalk.cyan(` Local: https://localhost:${port}`));\n console.log(chalk.gray(` Output: ${outputDir}`));\n console.log(chalk.gray('\\n Watching for changes...\\n'));\n\n // ファイル監視してビルド\n const chokidar = await import('chokidar');\n // chokidar v4ではディレクトリを直接監視\n const watchDirs = [inputDir, path.resolve('src', 'lib')].filter((dir) => fs.existsSync(dir));\n\n console.log(chalk.gray(` Watching directories: ${watchDirs.join(', ')}`));\n\n const watcher = chokidar.watch(watchDirs, {\n ignored: /node_modules/,\n persistent: true,\n ignoreInitial: true,\n });\n\n // 監視対象の拡張子\n const watchExtensions = ['.ts', '.tsx', '.js', '.jsx', '.css', '.scss'];\n const shouldRebuild = (filePath: string) => {\n const ext = path.extname(filePath).toLowerCase();\n return watchExtensions.includes(ext);\n };\n\n const rebuild = async () => {\n console.log(chalk.gray(` ${new Date().toLocaleTimeString()} Rebuilding...`));\n await buildEntriesWithVite({\n entries,\n outDir: outputDir,\n mode: 'development',\n sourcemap: 'inline',\n minify: false,\n });\n console.log(chalk.gray(` ${new Date().toLocaleTimeString()} Rebuild complete`));\n };\n\n watcher.on('ready', () => {\n console.log(chalk.green(' ✓ File watcher ready'));\n });\n\n watcher.on('change', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [change] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('add', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [add] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('unlink', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [unlink] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('error', (error) => {\n console.error(chalk.red(` Watcher error: ${error}`));\n });\n\n // TailwindCSS監視\n if (k2Config) {\n await watchCss({ k2Config, outdir });\n }\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import path from 'path';\nimport chalk from 'chalk';\nimport { getTailwindConfigFromK2Config, watchTailwindCSS } from '../../lib/tailwind.js';\nimport fs from 'fs-extra';\n\nexport const watchCss = async (params: { k2Config: K2.Config; outdir: string }) => {\n const { k2Config, outdir } = params;\n if (!k2Config.tailwind?.css || !k2Config.tailwind?.config) {\n console.log('🚫 missing tailwind config. Skip watching css.');\n return;\n }\n\n const tailwindConfig = await getTailwindConfigFromK2Config(k2Config.tailwind);\n\n const input = path.resolve(k2Config.tailwind.css);\n const output = path.join(outdir, 'tailwind.css');\n\n if (!(await fs.pathExists(output))) {\n await fs.outputFile(output, '');\n }\n\n return watchTailwindCSS({\n input,\n output: path.join(outdir, 'tailwind.css'),\n config: tailwindConfig,\n onChanges: ({ output, type }) => {\n const outputFileName = path.basename(output);\n console.log(\n chalk.hex('#e5e7eb')(`${new Date().toLocaleTimeString()} `) +\n chalk.cyan(`[css] `) +\n outputFileName +\n (type === 'init' ? ' init' : ` rebuilt(${type})`)\n );\n },\n });\n};\n","import { exec as defaultExec } from 'child_process';\nimport { promisify } from 'util';\n\nexport const exec = promisify(defaultExec);\n","import { exec } from './exec.js';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/** SSL証明書のファイル名 */\nexport const CERT_KEY_FILENAME = 'localhost-key.pem';\nexport const CERT_FILENAME = 'localhost-cert.pem';\n\n/**\n * mkcertを使用してSSL証明書を生成する\n * @param outDir 証明書の出力先ディレクトリ\n */\nexport const generateCert = async (outDir: string): Promise<{ stdout: string }> => {\n await fs.ensureDir(outDir);\n const { stdout } = await exec(`mkcert localhost 127.0.0.1 ::1`);\n [\n { input: 'localhost+2.pem', output: CERT_FILENAME },\n { input: 'localhost+2-key.pem', output: CERT_KEY_FILENAME },\n ].forEach(({ input, output }) => {\n if (fs.existsSync(input)) {\n fs.moveSync(`./${input}`, path.join(outDir, output), {\n overwrite: true,\n });\n }\n });\n return { stdout };\n};\n\n/**\n * SSL証明書が存在するか確認する\n * @param certDir 証明書のディレクトリ\n */\nexport function hasCertificates(certDir: string): boolean {\n return (\n fs.existsSync(path.join(certDir, CERT_KEY_FILENAME)) &&\n fs.existsSync(path.join(certDir, CERT_FILENAME))\n );\n}\n\n/**\n * SSL証明書を読み込む\n * @param certDir 証明書のディレクトリ\n */\nexport function loadCertificates(certDir: string): { key: Buffer; cert: Buffer } {\n return {\n key: fs.readFileSync(path.join(certDir, CERT_KEY_FILENAME)),\n cert: fs.readFileSync(path.join(certDir, CERT_FILENAME)),\n };\n}\n","import { program } from 'commander';\nimport base from './genkey-base.js';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\n\nexport default function command() {\n program\n .command('genkey')\n .description('Generate SSL key for localhost. (Require mkcert)')\n .option('-o, --output <output>', 'Output directory.', WORKSPACE_DIRECTORY)\n .action(action);\n}\n\nexport async function action(options: { output: string }) {\n await base(options);\n}\n","import { generateCert } from '../lib/cert.js';\n\nexport default async function action(options: { output: string }) {\n const { output } = options;\n\n console.group('🍳 Generate SSL key for localhost');\n try {\n const { stdout } = await generateCert(output);\n if (stdout) {\n console.log(stdout);\n }\n console.log(`🔑 key generation success. Output to ./${output}`);\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import { program } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\nimport { importK2Config } from '../lib/import.js';\nimport { getDefaultK2Config } from '../lib/k2.js';\nimport { buildTailwind } from './build-tailwind.js';\nimport { buildEntriesWithVite, getEntryPointsFromDir } from '../lib/vite.js';\n\nexport default function command() {\n program\n .command('esbuild-build')\n .option('-o, --outdir <outdir>', 'Output directory.', path.join(WORKSPACE_DIRECTORY, 'prod'))\n .option('-i, --input <input>', 'Input directory.', path.join('src', 'apps'))\n .option('--config <config>', 'k2 config file path')\n .description('Build the project for production with Vite. (Legacy command name, now uses Vite)')\n .action(action);\n}\n\nexport async function action(options: { outdir: string; input: string; config?: string }) {\n console.group('🍳 Build the project for production');\n\n try {\n const { outdir, input, config } = options;\n const outDir = path.resolve(outdir);\n\n const entries = getEntryPointsFromDir(path.resolve(input));\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n // 出力ディレクトリをクリア\n // await fs.emptyDir(outDir);\n\n const k2Config = config ? await importK2Config(config) : getDefaultK2Config();\n const fullConfig: K2.FullConfig = { ...k2Config, outDir };\n\n const results = await Promise.allSettled([\n buildEntriesWithVite({\n entries,\n outDir,\n mode: 'production',\n sourcemap: false,\n minify: true,\n }),\n buildTailwind(fullConfig),\n ]);\n\n for (const result of results) {\n if (result.status === 'rejected') {\n throw result.reason;\n }\n }\n\n console.log('✨ Build success.');\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import { program } from 'commander';\nimport { lint } from '../lib/lint.js';\n\nexport default function command() {\n program\n .command('lint')\n .description('Lint source files')\n .option('-c, --config <config>', 'Config file path')\n .action(action);\n}\n\nexport async function action(options: {\n outdir: string;\n certdir: string;\n port: string;\n input: string;\n}) {\n try {\n lint();\n } catch (error) {\n throw error;\n } finally {\n }\n}\n","import { ESLint } from 'eslint';\nimport globals from 'globals';\nimport pluginJs from '@eslint/js';\nimport tseslint from 'typescript-eslint';\nimport pluginReact from 'eslint-plugin-react';\n\nexport async function lint() {\n const eslint = new ESLint({\n baseConfig: [\n { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },\n { languageOptions: { globals: globals.browser } },\n pluginJs.configs.recommended,\n // ...tseslint.configs.recommended,\n ...(pluginReact.configs.flat?.recommended ? [pluginReact.configs.flat.recommended] : []),\n ],\n });\n\n const results = await eslint.lintFiles(['src/**/*.{ts,tsx?}']);\n\n const formatter = await eslint.loadFormatter('stylish');\n const resultText = formatter.format(results);\n\n console.group('👕 Lint Results');\n console.log(resultText);\n console.groupEnd();\n\n const hasErrors = results.some((result) => result.errorCount > 0);\n if (hasErrors) {\n console.error('🚨 Lint errors found');\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["program","path","chalk","path","path","path","path","path","path","fs","path","path","chalk","program","fs","path","chalk","path","chalk","fs","path","output","chalk","fs","path","command","program","action","path","chalk","fs","chokidar","program","action","command","program","action","program","path","chalk","command","program","path","action","chalk","program","command","program","action","program","command"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/build.ts","../src/lib/constants.ts","../src/commands/build-tailwind.ts","../src/lib/import.ts","../src/lib/tailwind.ts","../src/lib/k2.ts","../src/lib/vite.ts","../src/commands/dev/index.ts","../src/commands/dev/tailwind.ts","../src/lib/exec.ts","../src/lib/cert.ts","../src/commands/genkey.ts","../src/commands/genkey-base.ts","../src/commands/build-esbuild.ts","../src/commands/lint.ts","../src/lib/lint.ts"],"sourcesContent":["#!/usr/bin/env node\r\nimport { program } from 'commander';\r\nimport build from './commands/build.js';\r\nimport dev from './commands/dev/index.js';\r\nimport genkey from './commands/genkey.js';\r\nimport esbuildBuild from './commands/build-esbuild.js';\r\nimport lint from './commands/lint.js';\r\n\r\nprogram.name('k2').version('1.12.0').description('k2 - 🍳 kintone kitchen 🍳');\r\n\r\nbuild();\r\nesbuildBuild();\r\ndev();\r\ngenkey();\r\nlint();\r\n\r\nprogram.parse(process.argv);\r\n","import { program } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\nimport { buildTailwind } from './build-tailwind.js';\nimport { importK2Config } from '../lib/import.js';\nimport { getDefaultK2Config } from '../lib/k2.js';\nimport { buildEntriesWithVite, getEntryPointsFromDir } from '../lib/vite.js';\n\nexport default function command() {\n program\n .command('build')\n .option('-o, --outdir <outdir>', 'Output directory.', path.join(WORKSPACE_DIRECTORY, 'prod'))\n .option('-i, --input <input>', 'Input directory.', path.join('src', 'apps'))\n .option('--config <config>', 'k2 config file path')\n .description('Build the project for production with Vite.')\n .action(action);\n}\n\nexport async function action(options: { outdir: string; input: string; config?: string }) {\n console.group('🍳 Build the project for production');\n\n try {\n const { outdir, input, config } = options;\n const outDir = path.resolve(outdir);\n\n const entries = getEntryPointsFromDir(path.resolve(input));\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n const k2Config = config ? await importK2Config(config) : getDefaultK2Config();\n const fullConfig: K2.FullConfig = { ...k2Config, outDir };\n\n // 出力ディレクトリをクリア\n // await fs.emptyDir(outDir);\n\n const results = await Promise.allSettled([\n buildEntriesWithVite({\n entries,\n outDir,\n mode: 'production',\n sourcemap: false,\n minify: true,\n }),\n buildTailwind(fullConfig),\n ]);\n for (const result of results) {\n if (result.status === 'rejected') {\n throw result.reason;\n }\n }\n console.log('✨ Build success.');\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import path from 'path';\n\nexport const WORKSPACE_DIRECTORY = '.k2';\nexport const DEVELOPMENT_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'dev');\nexport const PRODUCTION_DIRECTORY = path.join(WORKSPACE_DIRECTORY, 'prod');\n\nexport const CONFIG_FILE_NAME = 'k2.config.mjs';\nexport const PLUGIN_CONFIG_FILE_NAME = 'plugin.config.mjs';\n\n/** kintoneプラグインの一時ファイルを管理するフォルダ */\nexport const PLUGIN_WORKSPACE_DIRECTORY = '.plugin';\n/** kintoneプラグインのcontents.zipに格納するファイルを管理するフォルダ */\nexport const PLUGIN_CONTENTS_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'contents');\n/** kintoneプラグインの開発時、ローカルサーバーに反映するファイルを管理するフォルダ */\nexport const PLUGIN_DEVELOPMENT_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'dev');\n/** kintoneプラグインの本番ビルド出力ディレクトリ */\nexport const PLUGIN_PRODUCTION_DIRECTORY = path.join(PLUGIN_WORKSPACE_DIRECTORY, 'prod');\n\n/** ローカルサーバーのデフォルトポート番号 */\nexport const DEFAULT_PORT = 32767;\n","import path from 'path';\nimport { esmImport } from '../lib/import.js';\nimport { outputCss } from '../lib/tailwind.js';\n\nexport const buildTailwind = async (config: K2.FullConfig) => {\n if (!config.tailwind?.css || !config.tailwind?.config) {\n return;\n }\n const tailwindConfig = (await esmImport(path.resolve(config.tailwind.config))).default;\n\n const inputPath = path.resolve(config.tailwind.css);\n\n const fileName = config.tailwind.fileName ?? 'tailwind.css';\n\n await outputCss({\n inputPath,\n outputPath: path.join(config.outDir, fileName),\n config: tailwindConfig,\n minify: true,\n });\n console.log(`✨ Built ${fileName}`);\n};\n","import { pathToFileURL } from 'url';\nimport { CONFIG_FILE_NAME, PLUGIN_CONFIG_FILE_NAME } from './constants.js';\nimport path from 'path';\n\nexport const esmImport = (path: string) => {\n if (process.platform === 'win32') {\n return import(pathToFileURL(path).toString());\n } else {\n return import(path);\n }\n};\n\nexport const importK2Config = async (configFileName?: string): Promise<K2.Config> => {\n return (await esmImport(path.resolve(configFileName ?? CONFIG_FILE_NAME))).default;\n};\n\nexport const importK2PluginConfig = async (\n configFileName?: string\n): Promise<Plugin.Meta.Config> => {\n return (await esmImport(path.resolve(configFileName ?? PLUGIN_CONFIG_FILE_NAME))).default;\n};\n","import chokidar from 'chokidar';\nimport cssnanoPlugin from 'cssnano';\nimport fs from 'fs-extra';\nimport { glob } from 'glob';\nimport path from 'path';\nimport postcss from 'postcss';\nimport { debounce } from 'remeda';\nimport tailwindcss, { type Config as TailwindConfig } from 'tailwindcss';\nimport invariant from 'tiny-invariant';\nimport { esmImport } from './import.js';\n\nexport const getTailwindConfigFromK2Config = async (\n k2Config: K2.Config['tailwind']\n): Promise<TailwindConfig> => {\n invariant(k2Config?.config, 'tailwind.config is required');\n const config = (await esmImport(path.resolve(k2Config?.config))).default;\n return config;\n};\n\nexport const getTailwindInputCss = (\n config: Plugin.Meta.Config['tailwind']\n): { desktop: string; config: string } => {\n invariant(config?.css, 'tailwind.css is required');\n const { css } = config;\n if (typeof css === 'string') {\n const resolved = path.resolve(css);\n return { desktop: resolved, config: resolved };\n }\n return {\n desktop: path.resolve(css.desktop),\n config: path.resolve(css.config),\n };\n};\n\nexport const getTailwindConfig = async (\n config: Plugin.Meta.Config['tailwind']\n): Promise<{\n desktop: TailwindConfig;\n config: TailwindConfig;\n}> => {\n invariant(config?.config, 'tailwind.config is required');\n\n const { config: configPath } = config;\n\n const configPathForDesktop = typeof configPath === 'string' ? configPath : configPath.desktop;\n const configPathForConfig = typeof configPath === 'string' ? configPath : configPath.config;\n\n const desktopConfig = (await esmImport(path.resolve(configPathForDesktop))).default;\n const configConfig = (await esmImport(path.resolve(configPathForConfig))).default;\n\n return { desktop: desktopConfig, config: configConfig };\n};\n\nexport const outputCss = async (params: {\n inputPath: string;\n outputPath: string;\n config: TailwindConfig;\n minify?: boolean;\n}) => {\n const { inputPath, outputPath, config, minify = false } = params;\n\n const css = await fs.readFile(inputPath, 'utf8');\n\n const result = await postcss([tailwindcss(config), ...(minify ? [cssnanoPlugin()] : [])]).process(\n css,\n {\n from: inputPath,\n to: outputPath,\n }\n );\n\n await fs.writeFile(outputPath, result.css);\n\n if (result.map) {\n await fs.writeFile(`${outputPath}.map`, result.map.toString());\n }\n};\n\ntype WatchType = 'init' | 'add' | 'change' | 'unlink';\n\nexport const watchTailwindCSS = async (params: {\n /** input path */\n input: string;\n /** output path */\n output: string;\n /** tailwindcss config file */\n config: TailwindConfig;\n /** callback function */\n onChanges?: (params: { input: string; output: string; type: WatchType }) => void;\n}) => {\n const { input, output, config } = params;\n\n const content = (config.content as string[] | undefined) ?? ['./src/**/*.{ts,tsx}'];\n\n const files = await glob([...content, input], { ignore: ['**/node_modules/**'] });\n\n const watcher = chokidar.watch(files, {\n persistent: true,\n ignoreInitial: true,\n });\n\n let isInitialized = false;\n\n const processChanges = async (type: WatchType) => {\n try {\n await outputCss({ inputPath: input, outputPath: output, config });\n params.onChanges?.({ input, output, type });\n } catch (error) {\n console.error('Error building Tailwind CSS:', error);\n }\n };\n\n const debouncedProcessChanges = debounce(processChanges, { waitMs: 1000 });\n\n watcher.on('ready', async () => {\n if (!isInitialized) {\n isInitialized = true;\n await processChanges('init');\n }\n });\n\n watcher.on('error', (error) => {\n console.error('Error watching Tailwind CSS:', error);\n });\n\n watcher.on('add', (path) => {\n debouncedProcessChanges.call('add');\n });\n watcher.on('change', (path) => {\n debouncedProcessChanges.call('change');\n });\n watcher.on('unlink', (path) => {\n debouncedProcessChanges.call('unlink');\n });\n watcher.on('unlinkDir', (path) => {\n debouncedProcessChanges.call('unlink');\n });\n\n return watcher;\n};\n","export const getDefaultK2Config = (): K2.Config => {\n return {\n version: 1,\n server: {\n port: 32768,\n },\n };\n};\n","import chalk from 'chalk';\nimport fs from 'fs-extra';\nimport os from 'os';\nimport path from 'path';\nimport type { InlineConfig, Plugin } from 'vite';\nimport { build as viteBuild } from 'vite';\n\n/**\n * 出力コード全体をIIFEでラップするプラグイン\n * esbuildが生成するヘルパー関数もラップ対象に含める\n */\nfunction wrapIIFE(): Plugin {\n return {\n name: 'wrap-iife',\n apply: 'build',\n renderChunk(code) {\n return {\n code: `(function() {\\n${code}\\n})();`,\n map: null,\n };\n },\n };\n}\n\n/** 同時ビルド数のデフォルト値(CPU数に基づく) */\nconst DEFAULT_CONCURRENCY = Math.max(1, os.cpus().length - 1);\n\n/**\n * 並列実行を制限するためのユーティリティ\n * @param items 処理するアイテムの配列\n * @param concurrency 同時実行数の上限\n * @param fn 各アイテムに適用する非同期関数\n */\nasync function parallelLimit<T, R>(\n items: T[],\n concurrency: number,\n fn: (item: T) => Promise<R>\n): Promise<R[]> {\n const results: R[] = [];\n const executing: Promise<void>[] = [];\n\n for (const item of items) {\n const promise = fn(item).then((result) => {\n results.push(result);\n });\n\n const e = promise.then(() => {\n executing.splice(executing.indexOf(e), 1);\n });\n executing.push(e);\n\n if (executing.length >= concurrency) {\n await Promise.race(executing);\n }\n }\n\n await Promise.all(executing);\n return results;\n}\n\n/**\n * Vite設定を生成する\n */\nexport const createViteConfig = (config: Partial<InlineConfig> = {}): InlineConfig => {\n const plugins: InlineConfig['plugins'] = [...(config.plugins ?? [])];\n\n // vite-tsconfig-pathsがインストールされている場合は自動で追加\n try {\n const tsconfigPaths = require('vite-tsconfig-paths');\n plugins.push(tsconfigPaths.default ? tsconfigPaths.default() : tsconfigPaths());\n } catch {\n // vite-tsconfig-paths is optional\n }\n\n const mode = config.mode ?? 'production';\n\n return {\n ...config,\n configFile: false,\n // ソースマップ関連のエラーメッセージを抑制\n logLevel: config.logLevel ?? 'warn',\n // ブラウザ向けにNode.js固有のオブジェクトをビルド時に解決\n define: {\n 'process.env.NODE_ENV': JSON.stringify(mode),\n 'process.env': JSON.stringify({}),\n ...config.define,\n },\n build: {\n ...config.build,\n // ブラウザ向けターゲット\n target: config.build?.target ?? 'es2020',\n cssCodeSplit: false,\n rollupOptions: {\n ...config.build?.rollupOptions,\n onwarn: (warning, warn) => {\n // \"use client\"などのディレクティブ警告を無視\n if (['MODULE_LEVEL_DIRECTIVE'].includes(warning.code ?? '')) {\n return;\n }\n // ソースマップ関連の警告を無視\n if (warning.message?.includes('sourcemap') || warning.code === 'SOURCEMAP_ERROR') {\n return;\n }\n warn(warning);\n },\n },\n },\n plugins,\n resolve: {\n ...config.resolve,\n alias: {\n '@': path.resolve(process.cwd(), 'src'),\n ...config.resolve?.alias,\n },\n },\n };\n};\n\n/**\n * 各エントリーポイントを個別にビルドする(chunksを作らないため)\n * パフォーマンス最適化: 並列ビルドを実行(同時実行数を制限)\n */\nexport async function buildEntriesWithVite(params: {\n entries: Record<string, string>;\n outDir: string;\n mode?: 'development' | 'production';\n sourcemap?: boolean | 'inline';\n minify?: boolean;\n viteConfig?: Partial<InlineConfig>;\n /** 同時ビルド数(デフォルト: CPU数 - 1) */\n concurrency?: number;\n}): Promise<void> {\n const {\n entries,\n outDir,\n mode = 'production',\n sourcemap = false,\n minify = true,\n viteConfig = {},\n concurrency = DEFAULT_CONCURRENCY,\n } = params;\n\n const entryNames = Object.keys(entries);\n\n // 単一エントリーの場合は直接ビルド\n if (entryNames.length === 1) {\n const name = entryNames[0];\n await buildSingleEntry({\n name,\n entryPath: entries[name],\n outDir,\n mode,\n sourcemap,\n minify,\n viteConfig,\n });\n return;\n }\n\n // 複数エントリーの場合は並列ビルド(同時実行数を制限)\n await parallelLimit(entryNames, concurrency, async (name) => {\n await buildSingleEntry({\n name,\n entryPath: entries[name],\n outDir,\n mode,\n sourcemap,\n minify,\n viteConfig,\n });\n });\n}\n\n/**\n * 単一のエントリーポイントをビルドする内部関数\n */\nasync function buildSingleEntry(params: {\n name: string;\n entryPath: string;\n outDir: string;\n mode: 'development' | 'production';\n sourcemap: boolean | 'inline';\n minify: boolean;\n viteConfig: Partial<InlineConfig>;\n}): Promise<void> {\n const { name, entryPath, outDir, mode, sourcemap, minify, viteConfig } = params;\n\n // ハイフンなどを含む名前を有効なJS識別子に変換(例: \"chatgpt-log\" → \"chatgptLog\")\n const safeName = name\n .replace(/-([a-z])/g, (_, c) => c.toUpperCase())\n .replace(/[^a-zA-Z0-9_$]/g, '_');\n\n const config = createViteConfig({\n ...viteConfig,\n mode,\n build: {\n ...viteConfig.build,\n lib: {\n entry: entryPath,\n name: safeName,\n fileName: () => `${name}.js`,\n formats: ['iife'],\n },\n rollupOptions: {\n ...viteConfig.build?.rollupOptions,\n output: {\n format: 'iife',\n assetFileNames: `${name}.[ext]`,\n // 外部ライブラリのソースマップを無視して警告を抑制\n sourcemapIgnoreList: (relativeSourcePath) => {\n return relativeSourcePath.includes('node_modules');\n },\n ...viteConfig.build?.rollupOptions?.output,\n },\n },\n outDir,\n emptyOutDir: false,\n sourcemap,\n minify,\n cssCodeSplit: false,\n },\n });\n\n await viteBuild(config);\n}\n\n/** エントリーポイントファイル名の候補 */\nconst ENTRY_FILE_NAMES = ['index.ts', 'index.tsx', 'index.js', 'index.jsx', 'index.mjs'];\n\n/**\n * ディレクトリからエントリーポイントを取得する\n */\nexport function getEntryPointsFromDir(inputDir: string): Record<string, string> {\n const entries: Record<string, string> = {};\n\n if (!fs.existsSync(inputDir)) {\n throw new Error(`Input directory not found: ${inputDir}`);\n }\n\n const dirs = fs.readdirSync(inputDir, { withFileTypes: true });\n\n for (const dirent of dirs) {\n if (!dirent.isDirectory()) continue;\n\n const dirName = dirent.name;\n const dirPath = path.join(inputDir, dirName);\n\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(dirPath, filename);\n if (fs.existsSync(entryPath)) {\n entries[dirName] = entryPath;\n break;\n }\n }\n }\n\n return entries;\n}\n\n/**\n * エントリーポイントを探す(単一ディレクトリまたはファイル)\n */\nexport function findEntryPoint(basePath: string): string | null {\n for (const filename of ENTRY_FILE_NAMES) {\n const entryPath = path.join(basePath, filename);\n if (fs.existsSync(entryPath)) {\n return entryPath;\n }\n }\n // ディレクトリではなく直接ファイルが指定された場合\n if (fs.existsSync(basePath) && fs.statSync(basePath).isFile()) {\n return basePath;\n }\n return null;\n}\n\n/**\n * プラグイン用エントリーポイントを取得する\n */\nexport function getPluginEntryPoints(options: {\n configEntry: string;\n desktopEntry: string;\n}): Record<string, string> {\n const entries: Record<string, string> = {};\n\n const configPath = findEntryPoint(options.configEntry);\n if (configPath) {\n entries['config'] = configPath;\n } else {\n console.log(chalk.yellow(` ⚠ Config entry not found: ${options.configEntry}`));\n }\n\n const desktopPath = findEntryPoint(options.desktopEntry);\n if (desktopPath) {\n entries['desktop'] = desktopPath;\n } else {\n console.log(chalk.yellow(` ⚠ Desktop entry not found: ${options.desktopEntry}`));\n }\n\n return entries;\n}\n\nexport type { InlineConfig };\n","import { program } from 'commander';\nimport { createServer } from 'vite';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport {\n CONFIG_FILE_NAME,\n DEFAULT_PORT,\n DEVELOPMENT_DIRECTORY,\n WORKSPACE_DIRECTORY,\n} from '../../lib/constants.js';\nimport { importK2Config } from '../../lib/import.js';\nimport { watchCss } from './tailwind.js';\nimport { generateCert, hasCertificates, loadCertificates } from '../../lib/cert.js';\nimport { createViteConfig, buildEntriesWithVite, getEntryPointsFromDir } from '../../lib/vite.js';\n\nexport default function command() {\n program\n .command('dev')\n .description('Start development server with Vite.')\n .option('-i, --input <input>', 'Input directory', 'src/apps')\n .option('-o, --outdir <outdir>', 'Output directory.', DEVELOPMENT_DIRECTORY)\n .option('-c, --certdir <certdir>', 'Certificate directory', WORKSPACE_DIRECTORY)\n .option('--config <config>', 'k2 config file path')\n .option('-p, --port <port>', 'Port number')\n .action(action);\n}\n\nexport async function action(options: {\n outdir: string;\n certdir: string;\n port?: string;\n config?: string;\n input: string;\n}) {\n const { certdir, outdir, config, port: specifiedPort, input } = options;\n console.group('🍳 Start development server');\n try {\n console.log(`📂 Output directory: ${outdir}`);\n console.log(`🔑 Certificate directory: ${certdir}`);\n\n let k2Config: null | K2.Config = null;\n try {\n k2Config = await importK2Config(config);\n } catch (error) {\n console.log(`⚙ ${CONFIG_FILE_NAME} not found. use default settings.`);\n }\n\n const port = Number(specifiedPort ?? k2Config?.server?.port ?? DEFAULT_PORT);\n const certDirPath = path.resolve(certdir);\n const outputDir = path.resolve(outdir);\n const inputDir = path.resolve(input);\n\n // SSL証明書の確認\n if (!hasCertificates(certDirPath)) {\n console.log(chalk.yellow('📜 SSL certificates not found. Generating...'));\n try {\n await generateCert(certDirPath);\n console.log(chalk.green('✅ SSL certificates generated successfully'));\n } catch (error) {\n console.log(\n chalk.red('❌ Failed to generate SSL certificates. Make sure mkcert is installed.')\n );\n console.log(chalk.gray(' Install mkcert: https://github.com/FiloSottile/mkcert'));\n throw error;\n }\n }\n\n const entries = getEntryPointsFromDir(inputDir);\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n await fs.emptyDir(outputDir);\n\n const { key, cert } = loadCertificates(certDirPath);\n\n // 初回ビルド\n console.log(chalk.gray(' Building...'));\n await buildEntriesWithVite({\n entries,\n outDir: outputDir,\n mode: 'development',\n sourcemap: 'inline',\n minify: false,\n });\n\n // 開発サーバー起動\n const serverConfig = createViteConfig({\n root: outputDir,\n server: {\n port,\n https: { key, cert },\n },\n });\n\n const server = await createServer(serverConfig);\n await server.listen();\n\n console.log(chalk.green(`\\n✨ Development server ready!`));\n console.log(chalk.cyan(` Local: https://localhost:${port}`));\n console.log(chalk.gray(` Output: ${outputDir}`));\n console.log(chalk.gray('\\n Watching for changes...\\n'));\n\n // ファイル監視してビルド\n const chokidar = await import('chokidar');\n // chokidar v4ではディレクトリを直接監視\n const watchDirs = [inputDir, path.resolve('src', 'lib')].filter((dir) => fs.existsSync(dir));\n\n console.log(chalk.gray(` Watching directories: ${watchDirs.join(', ')}`));\n\n const watcher = chokidar.watch(watchDirs, {\n ignored: /node_modules/,\n persistent: true,\n ignoreInitial: true,\n });\n\n // 監視対象の拡張子\n const watchExtensions = ['.ts', '.tsx', '.js', '.jsx', '.css', '.scss'];\n const shouldRebuild = (filePath: string) => {\n const ext = path.extname(filePath).toLowerCase();\n return watchExtensions.includes(ext);\n };\n\n const rebuild = async () => {\n console.log(chalk.gray(` ${new Date().toLocaleTimeString()} Rebuilding...`));\n await buildEntriesWithVite({\n entries,\n outDir: outputDir,\n mode: 'development',\n sourcemap: 'inline',\n minify: false,\n });\n console.log(chalk.gray(` ${new Date().toLocaleTimeString()} Rebuild complete`));\n };\n\n watcher.on('ready', () => {\n console.log(chalk.green(' ✓ File watcher ready'));\n });\n\n watcher.on('change', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [change] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('add', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [add] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('unlink', (filePath) => {\n if (shouldRebuild(filePath)) {\n console.log(chalk.cyan(` [unlink] ${filePath}`));\n rebuild();\n }\n });\n\n watcher.on('error', (error) => {\n console.error(chalk.red(` Watcher error: ${error}`));\n });\n\n // TailwindCSS監視\n if (k2Config) {\n await watchCss({ k2Config, outdir });\n }\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import path from 'path';\nimport chalk from 'chalk';\nimport { getTailwindConfigFromK2Config, watchTailwindCSS } from '../../lib/tailwind.js';\nimport fs from 'fs-extra';\n\nexport const watchCss = async (params: { k2Config: K2.Config; outdir: string }) => {\n const { k2Config, outdir } = params;\n if (!k2Config.tailwind?.css || !k2Config.tailwind?.config) {\n console.log('🚫 missing tailwind config. Skip watching css.');\n return;\n }\n\n const tailwindConfig = await getTailwindConfigFromK2Config(k2Config.tailwind);\n\n const input = path.resolve(k2Config.tailwind.css);\n const output = path.join(outdir, 'tailwind.css');\n\n if (!(await fs.pathExists(output))) {\n await fs.outputFile(output, '');\n }\n\n return watchTailwindCSS({\n input,\n output: path.join(outdir, 'tailwind.css'),\n config: tailwindConfig,\n onChanges: ({ output, type }) => {\n const outputFileName = path.basename(output);\n console.log(\n chalk.hex('#e5e7eb')(`${new Date().toLocaleTimeString()} `) +\n chalk.cyan(`[css] `) +\n outputFileName +\n (type === 'init' ? ' init' : ` rebuilt(${type})`)\n );\n },\n });\n};\n","import { exec as defaultExec } from 'child_process';\nimport { promisify } from 'util';\n\nexport const exec = promisify(defaultExec);\n","import { exec } from './exec.js';\nimport fs from 'fs-extra';\nimport path from 'path';\n\n/** SSL証明書のファイル名 */\nexport const CERT_KEY_FILENAME = 'localhost-key.pem';\nexport const CERT_FILENAME = 'localhost-cert.pem';\n\n/**\n * mkcertを使用してSSL証明書を生成する\n * @param outDir 証明書の出力先ディレクトリ\n */\nexport const generateCert = async (outDir: string): Promise<{ stdout: string }> => {\n await fs.ensureDir(outDir);\n const { stdout } = await exec(`mkcert localhost 127.0.0.1 ::1`);\n [\n { input: 'localhost+2.pem', output: CERT_FILENAME },\n { input: 'localhost+2-key.pem', output: CERT_KEY_FILENAME },\n ].forEach(({ input, output }) => {\n if (fs.existsSync(input)) {\n fs.moveSync(`./${input}`, path.join(outDir, output), {\n overwrite: true,\n });\n }\n });\n return { stdout };\n};\n\n/**\n * SSL証明書が存在するか確認する\n * @param certDir 証明書のディレクトリ\n */\nexport function hasCertificates(certDir: string): boolean {\n return (\n fs.existsSync(path.join(certDir, CERT_KEY_FILENAME)) &&\n fs.existsSync(path.join(certDir, CERT_FILENAME))\n );\n}\n\n/**\n * SSL証明書を読み込む\n * @param certDir 証明書のディレクトリ\n */\nexport function loadCertificates(certDir: string): { key: Buffer; cert: Buffer } {\n return {\n key: fs.readFileSync(path.join(certDir, CERT_KEY_FILENAME)),\n cert: fs.readFileSync(path.join(certDir, CERT_FILENAME)),\n };\n}\n","import { program } from 'commander';\nimport base from './genkey-base.js';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\n\nexport default function command() {\n program\n .command('genkey')\n .description('Generate SSL key for localhost. (Require mkcert)')\n .option('-o, --output <output>', 'Output directory.', WORKSPACE_DIRECTORY)\n .action(action);\n}\n\nexport async function action(options: { output: string }) {\n await base(options);\n}\n","import { generateCert } from '../lib/cert.js';\n\nexport default async function action(options: { output: string }) {\n const { output } = options;\n\n console.group('🍳 Generate SSL key for localhost');\n try {\n const { stdout } = await generateCert(output);\n if (stdout) {\n console.log(stdout);\n }\n console.log(`🔑 key generation success. Output to ./${output}`);\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import { program } from 'commander';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport chalk from 'chalk';\nimport { WORKSPACE_DIRECTORY } from '../lib/constants.js';\nimport { importK2Config } from '../lib/import.js';\nimport { getDefaultK2Config } from '../lib/k2.js';\nimport { buildTailwind } from './build-tailwind.js';\nimport { buildEntriesWithVite, getEntryPointsFromDir } from '../lib/vite.js';\n\nexport default function command() {\n program\n .command('esbuild-build')\n .option('-o, --outdir <outdir>', 'Output directory.', path.join(WORKSPACE_DIRECTORY, 'prod'))\n .option('-i, --input <input>', 'Input directory.', path.join('src', 'apps'))\n .option('--config <config>', 'k2 config file path')\n .description('Build the project for production with Vite. (Legacy command name, now uses Vite)')\n .action(action);\n}\n\nexport async function action(options: { outdir: string; input: string; config?: string }) {\n console.group('🍳 Build the project for production');\n\n try {\n const { outdir, input, config } = options;\n const outDir = path.resolve(outdir);\n\n const entries = getEntryPointsFromDir(path.resolve(input));\n const entryNames = Object.keys(entries);\n\n if (entryNames.length === 0) {\n throw new Error(`No entry points found in ${input}`);\n }\n\n console.log(chalk.gray(` Entry points: ${entryNames.join(', ')}`));\n\n // 出力ディレクトリをクリア\n // await fs.emptyDir(outDir);\n\n const k2Config = config ? await importK2Config(config) : getDefaultK2Config();\n const fullConfig: K2.FullConfig = { ...k2Config, outDir };\n\n const results = await Promise.allSettled([\n buildEntriesWithVite({\n entries,\n outDir,\n mode: 'production',\n sourcemap: false,\n minify: true,\n }),\n buildTailwind(fullConfig),\n ]);\n\n for (const result of results) {\n if (result.status === 'rejected') {\n throw result.reason;\n }\n }\n\n console.log('✨ Build success.');\n } catch (error) {\n throw error;\n } finally {\n console.groupEnd();\n }\n}\n","import { program } from 'commander';\nimport { lint } from '../lib/lint.js';\n\nexport default function command() {\n program\n .command('lint')\n .description('Lint source files')\n .option('-c, --config <config>', 'Config file path')\n .action(action);\n}\n\nexport async function action(options: {\n outdir: string;\n certdir: string;\n port: string;\n input: string;\n}) {\n try {\n lint();\n } catch (error) {\n throw error;\n } finally {\n }\n}\n","import { ESLint } from 'eslint';\nimport globals from 'globals';\nimport pluginJs from '@eslint/js';\nimport tseslint from 'typescript-eslint';\nimport pluginReact from 'eslint-plugin-react';\n\nexport async function lint() {\n const eslint = new ESLint({\n baseConfig: [\n { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },\n { languageOptions: { globals: globals.browser } },\n pluginJs.configs.recommended,\n // ...tseslint.configs.recommended,\n ...(pluginReact.configs.flat?.recommended ? [pluginReact.configs.flat.recommended] : []),\n ],\n });\n\n const results = await eslint.lintFiles(['src/**/*.{ts,tsx?}']);\n\n const formatter = await eslint.loadFormatter('stylish');\n const resultText = formatter.format(results);\n\n console.group('👕 Lint Results');\n console.log(resultText);\n console.groupEnd();\n\n const hasErrors = results.some((result) => result.errorCount > 0);\n if (hasErrors) {\n console.error('🚨 Lint errors found');\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;;;;AACA,SAAS,WAAAA,gBAAe;;;ACDxB,SAAS,eAAe;AACxB,OAAe;AACf,OAAOC,WAAU;AACjB,OAAOC,YAAW;;;ACHlB,OAAO,UAAU;AAEV,IAAM,sBAAsB;AAC5B,IAAM,wBAAwB,KAAK,KAAK,qBAAqB,KAAK;AAClE,IAAM,uBAAuB,KAAK,KAAK,qBAAqB,MAAM;AAElE,IAAM,mBAAmB;AAIzB,IAAM,6BAA6B;AAEnC,IAAM,4BAA4B,KAAK,KAAK,4BAA4B,UAAU;AAElF,IAAM,+BAA+B,KAAK,KAAK,4BAA4B,KAAK;AAEhF,IAAM,8BAA8B,KAAK,KAAK,4BAA4B,MAAM;AAGhF,IAAM,eAAe;;;ACnB5B,OAAOC,WAAU;;;ACAjB,SAAS,qBAAqB;AAE9B,OAAOC,WAAU;AAEV,IAAM,YAAY,CAACA,WAAiB;AACzC,MAAI,QAAQ,aAAa,SAAS;AAChC,WAAO,OAAO,cAAcA,MAAI,EAAE,SAAS;AAAA,EAC7C,OAAO;AACL,WAAO,OAAOA;AAAA,EAChB;AACF;AAEO,IAAM,iBAAiB,OAAO,mBAAgD;AACnF,UAAQ,MAAM,UAAUA,MAAK,QAAQ,kBAAkB,gBAAgB,CAAC,GAAG;AAC7E;;;ACdA,OAAO,cAAc;AACrB,OAAO,mBAAmB;AAC1B,OAAO,QAAQ;AACf,SAAS,YAAY;AACrB,OAAOC,WAAU;AACjB,OAAO,aAAa;AACpB,SAAS,gBAAgB;AACzB,OAAO,iBAAoD;AAC3D,OAAO,eAAe;AAGf,IAAM,gCAAgC,OAC3C,aAC4B;AAC5B,YAAU,UAAU,QAAQ,6BAA6B;AACzD,QAAM,UAAU,MAAM,UAAUC,MAAK,QAAQ,UAAU,MAAM,CAAC,GAAG;AACjE,SAAO;AACT;AAoCO,IAAM,YAAY,OAAO,WAK1B;AACJ,QAAM,EAAE,WAAW,YAAY,QAAQ,SAAS,MAAM,IAAI;AAE1D,QAAM,MAAM,MAAM,GAAG,SAAS,WAAW,MAAM;AAE/C,QAAM,SAAS,MAAM,QAAQ,CAAC,YAAY,MAAM,GAAG,GAAI,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAE,CAAC,EAAE;AAAA,IACxF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,IAAI;AAAA,IACN;AAAA,EACF;AAEA,QAAM,GAAG,UAAU,YAAY,OAAO,GAAG;AAEzC,MAAI,OAAO,KAAK;AACd,UAAM,GAAG,UAAU,GAAG,UAAU,QAAQ,OAAO,IAAI,SAAS,CAAC;AAAA,EAC/D;AACF;AAIO,IAAM,mBAAmB,OAAO,WASjC;AACJ,QAAM,EAAE,OAAO,QAAQ,OAAO,IAAI;AAElC,QAAM,UAAW,OAAO,WAAoC,CAAC,qBAAqB;AAElF,QAAM,QAAQ,MAAM,KAAK,CAAC,GAAG,SAAS,KAAK,GAAG,EAAE,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAEhF,QAAM,UAAU,SAAS,MAAM,OAAO;AAAA,IACpC,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB,CAAC;AAED,MAAI,gBAAgB;AAEpB,QAAM,iBAAiB,OAAO,SAAoB;AAChD,QAAI;AACF,YAAM,UAAU,EAAE,WAAW,OAAO,YAAY,QAAQ,OAAO,CAAC;AAChE,aAAO,YAAY,EAAE,OAAO,QAAQ,KAAK,CAAC;AAAA,IAC5C,SAAS,OAAO;AACd,cAAQ,MAAM,gCAAgC,KAAK;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,0BAA0B,SAAS,gBAAgB,EAAE,QAAQ,IAAK,CAAC;AAEzE,UAAQ,GAAG,SAAS,YAAY;AAC9B,QAAI,CAAC,eAAe;AAClB,sBAAgB;AAChB,YAAM,eAAe,MAAM;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,UAAQ,GAAG,SAAS,CAAC,UAAU;AAC7B,YAAQ,MAAM,gCAAgC,KAAK;AAAA,EACrD,CAAC;AAED,UAAQ,GAAG,OAAO,CAACC,WAAS;AAC1B,4BAAwB,KAAK,KAAK;AAAA,EACpC,CAAC;AACD,UAAQ,GAAG,UAAU,CAACA,WAAS;AAC7B,4BAAwB,KAAK,QAAQ;AAAA,EACvC,CAAC;AACD,UAAQ,GAAG,UAAU,CAACA,WAAS;AAC7B,4BAAwB,KAAK,QAAQ;AAAA,EACvC,CAAC;AACD,UAAQ,GAAG,aAAa,CAACA,WAAS;AAChC,4BAAwB,KAAK,QAAQ;AAAA,EACvC,CAAC;AAED,SAAO;AACT;;;AFvIO,IAAM,gBAAgB,OAAO,WAA0B;AAC5D,MAAI,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,UAAU,QAAQ;AACrD;AAAA,EACF;AACA,QAAM,kBAAkB,MAAM,UAAUC,MAAK,QAAQ,OAAO,SAAS,MAAM,CAAC,GAAG;AAE/E,QAAM,YAAYA,MAAK,QAAQ,OAAO,SAAS,GAAG;AAElD,QAAM,WAAW,OAAO,SAAS,YAAY;AAE7C,QAAM,UAAU;AAAA,IACd;AAAA,IACA,YAAYA,MAAK,KAAK,OAAO,QAAQ,QAAQ;AAAA,IAC7C,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AACD,UAAQ,IAAI,gBAAW,QAAQ,EAAE;AACnC;;;AGrBO,IAAM,qBAAqB,MAAiB;AACjD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACPA,OAAO,WAAW;AAClB,OAAOC,SAAQ;AACf,OAAO,QAAQ;AACf,OAAOC,WAAU;AAEjB,SAAS,SAAS,iBAAiB;AAoBnC,IAAM,sBAAsB,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,SAAS,CAAC;AAQ5D,eAAe,cACb,OACA,aACA,IACc;AACd,QAAM,UAAe,CAAC;AACtB,QAAM,YAA6B,CAAC;AAEpC,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,GAAG,IAAI,EAAE,KAAK,CAAC,WAAW;AACxC,cAAQ,KAAK,MAAM;AAAA,IACrB,CAAC;AAED,UAAM,IAAI,QAAQ,KAAK,MAAM;AAC3B,gBAAU,OAAO,UAAU,QAAQ,CAAC,GAAG,CAAC;AAAA,IAC1C,CAAC;AACD,cAAU,KAAK,CAAC;AAEhB,QAAI,UAAU,UAAU,aAAa;AACnC,YAAM,QAAQ,KAAK,SAAS;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,QAAQ,IAAI,SAAS;AAC3B,SAAO;AACT;AAKO,IAAM,mBAAmB,CAAC,SAAgC,CAAC,MAAoB;AACpF,QAAM,UAAmC,CAAC,GAAI,OAAO,WAAW,CAAC,CAAE;AAGnE,MAAI;AACF,UAAM,gBAAgB,UAAQ,qBAAqB;AACnD,YAAQ,KAAK,cAAc,UAAU,cAAc,QAAQ,IAAI,cAAc,CAAC;AAAA,EAChF,QAAQ;AAAA,EAER;AAEA,QAAM,OAAO,OAAO,QAAQ;AAE5B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY;AAAA;AAAA,IAEZ,UAAU,OAAO,YAAY;AAAA;AAAA,IAE7B,QAAQ;AAAA,MACN,wBAAwB,KAAK,UAAU,IAAI;AAAA,MAC3C,eAAe,KAAK,UAAU,CAAC,CAAC;AAAA,MAChC,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,OAAO;AAAA,MACL,GAAG,OAAO;AAAA;AAAA,MAEV,QAAQ,OAAO,OAAO,UAAU;AAAA,MAChC,cAAc;AAAA,MACd,eAAe;AAAA,QACb,GAAG,OAAO,OAAO;AAAA,QACjB,QAAQ,CAAC,SAAS,SAAS;AAEzB,cAAI,CAAC,wBAAwB,EAAE,SAAS,QAAQ,QAAQ,EAAE,GAAG;AAC3D;AAAA,UACF;AAEA,cAAI,QAAQ,SAAS,SAAS,WAAW,KAAK,QAAQ,SAAS,mBAAmB;AAChF;AAAA,UACF;AACA,eAAK,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACL,KAAKC,MAAK,QAAQ,QAAQ,IAAI,GAAG,KAAK;AAAA,QACtC,GAAG,OAAO,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AACF;AAMA,eAAsB,qBAAqB,QASzB;AAChB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,aAAa,CAAC;AAAA,IACd,cAAc;AAAA,EAChB,IAAI;AAEJ,QAAM,aAAa,OAAO,KAAK,OAAO;AAGtC,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,OAAO,WAAW,CAAC;AACzB,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,WAAW,QAAQ,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD;AAAA,EACF;AAGA,QAAM,cAAc,YAAY,aAAa,OAAO,SAAS;AAC3D,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,WAAW,QAAQ,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;AAKA,eAAe,iBAAiB,QAQd;AAChB,QAAM,EAAE,MAAM,WAAW,QAAQ,MAAM,WAAW,QAAQ,WAAW,IAAI;AAGzE,QAAM,WAAW,KACd,QAAQ,aAAa,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,EAC9C,QAAQ,mBAAmB,GAAG;AAEjC,QAAM,SAAS,iBAAiB;AAAA,IAC9B,GAAG;AAAA,IACH;AAAA,IACA,OAAO;AAAA,MACL,GAAG,WAAW;AAAA,MACd,KAAK;AAAA,QACH,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU,MAAM,GAAG,IAAI;AAAA,QACvB,SAAS,CAAC,MAAM;AAAA,MAClB;AAAA,MACA,eAAe;AAAA,QACb,GAAG,WAAW,OAAO;AAAA,QACrB,QAAQ;AAAA,UACN,QAAQ;AAAA,UACR,gBAAgB,GAAG,IAAI;AAAA;AAAA,UAEvB,qBAAqB,CAAC,uBAAuB;AAC3C,mBAAO,mBAAmB,SAAS,cAAc;AAAA,UACnD;AAAA,UACA,GAAG,WAAW,OAAO,eAAe;AAAA,QACtC;AAAA,MACF;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM;AACxB;AAGA,IAAM,mBAAmB,CAAC,YAAY,aAAa,YAAY,aAAa,WAAW;AAKhF,SAAS,sBAAsB,UAA0C;AAC9E,QAAM,UAAkC,CAAC;AAEzC,MAAI,CAACC,IAAG,WAAW,QAAQ,GAAG;AAC5B,UAAM,IAAI,MAAM,8BAA8B,QAAQ,EAAE;AAAA,EAC1D;AAEA,QAAM,OAAOA,IAAG,YAAY,UAAU,EAAE,eAAe,KAAK,CAAC;AAE7D,aAAW,UAAU,MAAM;AACzB,QAAI,CAAC,OAAO,YAAY,EAAG;AAE3B,UAAM,UAAU,OAAO;AACvB,UAAM,UAAUD,MAAK,KAAK,UAAU,OAAO;AAE3C,eAAW,YAAY,kBAAkB;AACvC,YAAM,YAAYA,MAAK,KAAK,SAAS,QAAQ;AAC7C,UAAIC,IAAG,WAAW,SAAS,GAAG;AAC5B,gBAAQ,OAAO,IAAI;AACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ANvPe,SAAR,UAA2B;AAChC,UACG,QAAQ,OAAO,EACf,OAAO,yBAAyB,qBAAqBC,MAAK,KAAK,qBAAqB,MAAM,CAAC,EAC3F,OAAO,uBAAuB,oBAAoBA,MAAK,KAAK,OAAO,MAAM,CAAC,EAC1E,OAAO,qBAAqB,qBAAqB,EACjD,YAAY,6CAA6C,EACzD,OAAO,MAAM;AAClB;AAEA,eAAsB,OAAO,SAA6D;AACxF,UAAQ,MAAM,4CAAqC;AAEnD,MAAI;AACF,UAAM,EAAE,QAAQ,OAAO,OAAO,IAAI;AAClC,UAAM,SAASA,MAAK,QAAQ,MAAM;AAElC,UAAM,UAAU,sBAAsBA,MAAK,QAAQ,KAAK,CAAC;AACzD,UAAM,aAAa,OAAO,KAAK,OAAO;AAEtC,QAAI,WAAW,WAAW,GAAG;AAC3B,YAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,IACrD;AAEA,YAAQ,IAAIC,OAAM,KAAK,mBAAmB,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAElE,UAAM,WAAW,SAAS,MAAM,eAAe,MAAM,IAAI,mBAAmB;AAC5E,UAAM,aAA4B,EAAE,GAAG,UAAU,OAAO;AAKxD,UAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,MACvC,qBAAqB;AAAA,QACnB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,cAAc,UAAU;AAAA,IAC1B,CAAC;AACD,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,WAAW,YAAY;AAChC,cAAM,OAAO;AAAA,MACf;AAAA,IACF;AACA,YAAQ,IAAI,uBAAkB;AAAA,EAChC,SAAS,OAAO;AACd,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,SAAS;AAAA,EACnB;AACF;;;AO/DA,SAAS,WAAAC,gBAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,YAAW;;;ACJlB,OAAOC,WAAU;AACjB,OAAOC,YAAW;AAElB,OAAOC,SAAQ;AAER,IAAM,WAAW,OAAO,WAAoD;AACjF,QAAM,EAAE,UAAU,OAAO,IAAI;AAC7B,MAAI,CAAC,SAAS,UAAU,OAAO,CAAC,SAAS,UAAU,QAAQ;AACzD,YAAQ,IAAI,uDAAgD;AAC5D;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM,8BAA8B,SAAS,QAAQ;AAE5E,QAAM,QAAQC,MAAK,QAAQ,SAAS,SAAS,GAAG;AAChD,QAAM,SAASA,MAAK,KAAK,QAAQ,cAAc;AAE/C,MAAI,CAAE,MAAMD,IAAG,WAAW,MAAM,GAAI;AAClC,UAAMA,IAAG,WAAW,QAAQ,EAAE;AAAA,EAChC;AAEA,SAAO,iBAAiB;AAAA,IACtB;AAAA,IACA,QAAQC,MAAK,KAAK,QAAQ,cAAc;AAAA,IACxC,QAAQ;AAAA,IACR,WAAW,CAAC,EAAE,QAAAC,SAAQ,KAAK,MAAM;AAC/B,YAAM,iBAAiBD,MAAK,SAASC,OAAM;AAC3C,cAAQ;AAAA,QACNC,OAAM,IAAI,SAAS,EAAE,IAAG,oBAAI,KAAK,GAAE,mBAAmB,CAAC,GAAG,IACxDA,OAAM,KAAK,QAAQ,IACnB,kBACC,SAAS,SAAS,UAAU,YAAY,IAAI;AAAA,MACjD;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ACnCA,SAAS,QAAQ,mBAAmB;AACpC,SAAS,iBAAiB;AAEnB,IAAM,OAAO,UAAU,WAAW;;;ACFzC,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAGV,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;AAMtB,IAAM,eAAe,OAAO,WAAgD;AACjF,QAAMD,IAAG,UAAU,MAAM;AACzB,QAAM,EAAE,OAAO,IAAI,MAAM,KAAK,gCAAgC;AAC9D;AAAA,IACE,EAAE,OAAO,mBAAmB,QAAQ,cAAc;AAAA,IAClD,EAAE,OAAO,uBAAuB,QAAQ,kBAAkB;AAAA,EAC5D,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAO,MAAM;AAC/B,QAAIA,IAAG,WAAW,KAAK,GAAG;AACxB,MAAAA,IAAG,SAAS,KAAK,KAAK,IAAIC,MAAK,KAAK,QAAQ,MAAM,GAAG;AAAA,QACnD,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACD,SAAO,EAAE,OAAO;AAClB;AAMO,SAAS,gBAAgB,SAA0B;AACxD,SACED,IAAG,WAAWC,MAAK,KAAK,SAAS,iBAAiB,CAAC,KACnDD,IAAG,WAAWC,MAAK,KAAK,SAAS,aAAa,CAAC;AAEnD;AAMO,SAAS,iBAAiB,SAAgD;AAC/E,SAAO;AAAA,IACL,KAAKD,IAAG,aAAaC,MAAK,KAAK,SAAS,iBAAiB,CAAC;AAAA,IAC1D,MAAMD,IAAG,aAAaC,MAAK,KAAK,SAAS,aAAa,CAAC;AAAA,EACzD;AACF;;;AHhCe,SAARC,WAA2B;AAChC,EAAAC,SACG,QAAQ,KAAK,EACb,YAAY,qCAAqC,EACjD,OAAO,uBAAuB,mBAAmB,UAAU,EAC3D,OAAO,yBAAyB,qBAAqB,qBAAqB,EAC1E,OAAO,2BAA2B,yBAAyB,mBAAmB,EAC9E,OAAO,qBAAqB,qBAAqB,EACjD,OAAO,qBAAqB,aAAa,EACzC,OAAOC,OAAM;AAClB;AAEA,eAAsBA,QAAO,SAM1B;AACD,QAAM,EAAE,SAAS,QAAQ,QAAQ,MAAM,eAAe,MAAM,IAAI;AAChE,UAAQ,MAAM,oCAA6B;AAC3C,MAAI;AACF,YAAQ,IAAI,+BAAwB,MAAM,EAAE;AAC5C,YAAQ,IAAI,oCAA6B,OAAO,EAAE;AAElD,QAAI,WAA6B;AACjC,QAAI;AACF,iBAAW,MAAM,eAAe,MAAM;AAAA,IACxC,SAAS,OAAO;AACd,cAAQ,IAAI,UAAK,gBAAgB,mCAAmC;AAAA,IACtE;AAEA,UAAM,OAAO,OAAO,iBAAiB,UAAU,QAAQ,QAAQ,YAAY;AAC3E,UAAM,cAAcC,MAAK,QAAQ,OAAO;AACxC,UAAM,YAAYA,MAAK,QAAQ,MAAM;AACrC,UAAM,WAAWA,MAAK,QAAQ,KAAK;AAGnC,QAAI,CAAC,gBAAgB,WAAW,GAAG;AACjC,cAAQ,IAAIC,OAAM,OAAO,qDAA8C,CAAC;AACxE,UAAI;AACF,cAAM,aAAa,WAAW;AAC9B,gBAAQ,IAAIA,OAAM,MAAM,gDAA2C,CAAC;AAAA,MACtE,SAAS,OAAO;AACd,gBAAQ;AAAA,UACNA,OAAM,IAAI,4EAAuE;AAAA,QACnF;AACA,gBAAQ,IAAIA,OAAM,KAAK,0DAA0D,CAAC;AAClF,cAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,UAAU,sBAAsB,QAAQ;AAC9C,UAAM,aAAa,OAAO,KAAK,OAAO;AAEtC,QAAI,WAAW,WAAW,GAAG;AAC3B,YAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,IACrD;AAEA,YAAQ,IAAIA,OAAM,KAAK,mBAAmB,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAElE,UAAMC,IAAG,SAAS,SAAS;AAE3B,UAAM,EAAE,KAAK,KAAK,IAAI,iBAAiB,WAAW;AAGlD,YAAQ,IAAID,OAAM,KAAK,eAAe,CAAC;AACvC,UAAM,qBAAqB;AAAA,MACzB;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAGD,UAAM,eAAe,iBAAiB;AAAA,MACpC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,QACA,OAAO,EAAE,KAAK,KAAK;AAAA,MACrB;AAAA,IACF,CAAC;AAED,UAAM,SAAS,MAAM,aAAa,YAAY;AAC9C,UAAM,OAAO,OAAO;AAEpB,YAAQ,IAAIA,OAAM,MAAM;AAAA,iCAA+B,CAAC;AACxD,YAAQ,IAAIA,OAAM,KAAK,+BAA+B,IAAI,EAAE,CAAC;AAC7D,YAAQ,IAAIA,OAAM,KAAK,cAAc,SAAS,EAAE,CAAC;AACjD,YAAQ,IAAIA,OAAM,KAAK,gCAAgC,CAAC;AAGxD,UAAME,YAAW,MAAM,OAAO,UAAU;AAExC,UAAM,YAAY,CAAC,UAAUH,MAAK,QAAQ,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQE,IAAG,WAAW,GAAG,CAAC;AAE3F,YAAQ,IAAID,OAAM,KAAK,2BAA2B,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC;AAEzE,UAAM,UAAUE,UAAS,MAAM,WAAW;AAAA,MACxC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,IACjB,CAAC;AAGD,UAAM,kBAAkB,CAAC,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO;AACtE,UAAM,gBAAgB,CAAC,aAAqB;AAC1C,YAAM,MAAMH,MAAK,QAAQ,QAAQ,EAAE,YAAY;AAC/C,aAAO,gBAAgB,SAAS,GAAG;AAAA,IACrC;AAEA,UAAM,UAAU,YAAY;AAC1B,cAAQ,IAAIC,OAAM,KAAK,MAAK,oBAAI,KAAK,GAAE,mBAAmB,CAAC,gBAAgB,CAAC;AAC5E,YAAM,qBAAqB;AAAA,QACzB;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,MACV,CAAC;AACD,cAAQ,IAAIA,OAAM,KAAK,MAAK,oBAAI,KAAK,GAAE,mBAAmB,CAAC,mBAAmB,CAAC;AAAA,IACjF;AAEA,YAAQ,GAAG,SAAS,MAAM;AACxB,cAAQ,IAAIA,OAAM,MAAM,6BAAwB,CAAC;AAAA,IACnD,CAAC;AAED,YAAQ,GAAG,UAAU,CAAC,aAAa;AACjC,UAAI,cAAc,QAAQ,GAAG;AAC3B,gBAAQ,IAAIA,OAAM,KAAK,cAAc,QAAQ,EAAE,CAAC;AAChD,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAED,YAAQ,GAAG,OAAO,CAAC,aAAa;AAC9B,UAAI,cAAc,QAAQ,GAAG;AAC3B,gBAAQ,IAAIA,OAAM,KAAK,WAAW,QAAQ,EAAE,CAAC;AAC7C,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAED,YAAQ,GAAG,UAAU,CAAC,aAAa;AACjC,UAAI,cAAc,QAAQ,GAAG;AAC3B,gBAAQ,IAAIA,OAAM,KAAK,cAAc,QAAQ,EAAE,CAAC;AAChD,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAED,YAAQ,GAAG,SAAS,CAAC,UAAU;AAC7B,cAAQ,MAAMA,OAAM,IAAI,oBAAoB,KAAK,EAAE,CAAC;AAAA,IACtD,CAAC;AAGD,QAAI,UAAU;AACZ,YAAM,SAAS,EAAE,UAAU,OAAO,CAAC;AAAA,IACrC;AAAA,EACF,SAAS,OAAO;AACd,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,SAAS;AAAA,EACnB;AACF;;;AIlLA,SAAS,WAAAG,gBAAe;;;ACExB,eAAOC,QAA8B,SAA6B;AAChE,QAAM,EAAE,OAAO,IAAI;AAEnB,UAAQ,MAAM,0CAAmC;AACjD,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,MAAM,aAAa,MAAM;AAC5C,QAAI,QAAQ;AACV,cAAQ,IAAI,MAAM;AAAA,IACpB;AACA,YAAQ,IAAI,iDAA0C,MAAM,EAAE;AAAA,EAChE,SAAS,OAAO;AACd,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,SAAS;AAAA,EACnB;AACF;;;ADbe,SAARC,WAA2B;AAChC,EAAAC,SACG,QAAQ,QAAQ,EAChB,YAAY,kDAAkD,EAC9D,OAAO,yBAAyB,qBAAqB,mBAAmB,EACxE,OAAOC,OAAM;AAClB;AAEA,eAAsBA,QAAO,SAA6B;AACxD,QAAMA,QAAK,OAAO;AACpB;;;AEdA,SAAS,WAAAC,gBAAe;AACxB,OAAe;AACf,OAAOC,YAAU;AACjB,OAAOC,YAAW;AAOH,SAARC,WAA2B;AAChC,EAAAC,SACG,QAAQ,eAAe,EACvB,OAAO,yBAAyB,qBAAqBC,OAAK,KAAK,qBAAqB,MAAM,CAAC,EAC3F,OAAO,uBAAuB,oBAAoBA,OAAK,KAAK,OAAO,MAAM,CAAC,EAC1E,OAAO,qBAAqB,qBAAqB,EACjD,YAAY,kFAAkF,EAC9F,OAAOC,OAAM;AAClB;AAEA,eAAsBA,QAAO,SAA6D;AACxF,UAAQ,MAAM,4CAAqC;AAEnD,MAAI;AACF,UAAM,EAAE,QAAQ,OAAO,OAAO,IAAI;AAClC,UAAM,SAASD,OAAK,QAAQ,MAAM;AAElC,UAAM,UAAU,sBAAsBA,OAAK,QAAQ,KAAK,CAAC;AACzD,UAAM,aAAa,OAAO,KAAK,OAAO;AAEtC,QAAI,WAAW,WAAW,GAAG;AAC3B,YAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,IACrD;AAEA,YAAQ,IAAIE,OAAM,KAAK,mBAAmB,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAKlE,UAAM,WAAW,SAAS,MAAM,eAAe,MAAM,IAAI,mBAAmB;AAC5E,UAAM,aAA4B,EAAE,GAAG,UAAU,OAAO;AAExD,UAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,MACvC,qBAAqB;AAAA,QACnB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,MACV,CAAC;AAAA,MACD,cAAc,UAAU;AAAA,IAC1B,CAAC;AAED,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,WAAW,YAAY;AAChC,cAAM,OAAO;AAAA,MACf;AAAA,IACF;AAEA,YAAQ,IAAI,uBAAkB;AAAA,EAChC,SAAS,OAAO;AACd,UAAM;AAAA,EACR,UAAE;AACA,YAAQ,SAAS;AAAA,EACnB;AACF;;;ACjEA,SAAS,WAAAC,gBAAe;;;ACAxB,SAAS,cAAc;AACvB,OAAO,aAAa;AACpB,OAAO,cAAc;AACrB,OAAqB;AACrB,OAAO,iBAAiB;AAExB,eAAsB,OAAO;AAC3B,QAAM,SAAS,IAAI,OAAO;AAAA,IACxB,YAAY;AAAA,MACV,EAAE,OAAO,CAAC,8BAA8B,EAAE;AAAA,MAC1C,EAAE,iBAAiB,EAAE,SAAS,QAAQ,QAAQ,EAAE;AAAA,MAChD,SAAS,QAAQ;AAAA;AAAA,MAEjB,GAAI,YAAY,QAAQ,MAAM,cAAc,CAAC,YAAY,QAAQ,KAAK,WAAW,IAAI,CAAC;AAAA,IACxF;AAAA,EACF,CAAC;AAED,QAAM,UAAU,MAAM,OAAO,UAAU,CAAC,oBAAoB,CAAC;AAE7D,QAAM,YAAY,MAAM,OAAO,cAAc,SAAS;AACtD,QAAM,aAAa,UAAU,OAAO,OAAO;AAE3C,UAAQ,MAAM,wBAAiB;AAC/B,UAAQ,IAAI,UAAU;AACtB,UAAQ,SAAS;AAEjB,QAAM,YAAY,QAAQ,KAAK,CAAC,WAAW,OAAO,aAAa,CAAC;AAChE,MAAI,WAAW;AACb,YAAQ,MAAM,6BAAsB;AACpC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;;;AD5Be,SAARC,WAA2B;AAChC,EAAAC,SACG,QAAQ,MAAM,EACd,YAAY,mBAAmB,EAC/B,OAAO,yBAAyB,kBAAkB,EAClD,OAAOC,OAAM;AAClB;AAEA,eAAsBA,QAAO,SAK1B;AACD,MAAI;AACF,SAAK;AAAA,EACP,SAAS,OAAO;AACd,UAAM;AAAA,EACR,UAAE;AAAA,EACF;AACF;;;AffAC,SAAQ,KAAK,IAAI,EAAE,QAAQ,QAAQ,EAAE,YAAY,0CAA4B;AAE7E,QAAM;AACNC,SAAa;AACbA,SAAI;AACJA,SAAO;AACPA,SAAK;AAELD,SAAQ,MAAM,QAAQ,IAAI;","names":["program","path","chalk","path","path","path","path","path","path","fs","path","path","fs","path","chalk","program","fs","path","chalk","path","chalk","fs","path","output","chalk","fs","path","command","program","action","path","chalk","fs","chokidar","program","action","command","program","action","program","path","chalk","command","program","path","action","chalk","program","command","program","action","program","command"]}
|