vite-plugin-lib 4.0.0 → 4.0.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.d.ts → index.d.mts} +1 -1
- package/dist/index.d.mts.map +1 -0
- package/dist/{index.js → index.mjs} +4 -3
- package/dist/index.mjs.map +1 -0
- package/package.json +29 -29
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -46,4 +46,4 @@ declare function library(options?: Partial<LibraryOptions>): Plugin[];
|
|
|
46
46
|
declare function cleanup(options?: Partial<CommonOptions>): Plugin;
|
|
47
47
|
//#endregion
|
|
48
48
|
export { BundleOptions, CommonOptions, LibraryOptions, TSConfigPathsOptions, cleanup, dts, library, tsconfigPaths };
|
|
49
|
-
//# sourceMappingURL=index.d.
|
|
49
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;;UAkBiB,aAAA;;AAAjB;AAQiB,UAAA,oBAAA,SAA6B,aAAA,CAAA;EAU9C;EA2BA,QAAiB,EAAA,MAAA;;AAIP,UA/BO,aAAA,CA+BP;EAEC;EAN6B,OAAA,EAAA,OAAA;EAAA;EA8BxC,YAAgB,EAAA,OAAA;EAA+B;EAAR,eAAA,EAAA,OAAA;EAAqC;EAAA,gBAAA,EAAA,OAAA;EA4M5E;EAAyC,OAAA,EAAA,CAAA,MAAA,GA3PpB,MA2PoB,CAAA,EAAA;EAAR;EAA+B,OAAA,EAAA,CAAA,MAAA,GAzP3C,MAyP2C,CAAA,EAAA;EAAA;EA8EhE,WAAgB,EAAA,OAAA;;AAAiB,UAxThB,cAAA,SAAuB,oBAwTP,CAAA;EAA8B;EAAA,KAAA,EAAA,MAAA;;UApTrD,QAAQ;;WAEP;;;;;;;iBAwBK,aAAA,WAAuB,QAAQ,wBAA6B;iBA4M5D,OAAA,WAAiB,QAAQ,kBAAuB;;;;iBA8EhD,OAAA,WAAiB,QAAQ,iBAAsB"}
|
|
@@ -25,7 +25,7 @@ async function generateMTSDeclarations(typesDir$1, deleteSourceFiles, verbose) {
|
|
|
25
25
|
const files = await collectFiles(typesDir$1);
|
|
26
26
|
for (const file of files) {
|
|
27
27
|
await createMTSImports(file, verbose);
|
|
28
|
-
if (deleteSourceFiles) unlink(file);
|
|
28
|
+
if (deleteSourceFiles) await unlink(file);
|
|
29
29
|
}
|
|
30
30
|
log(`Generated ${files.length} MTS declarations.`);
|
|
31
31
|
}
|
|
@@ -292,7 +292,8 @@ function includesESFormat(formats) {
|
|
|
292
292
|
return formats?.includes("es") ?? true;
|
|
293
293
|
}
|
|
294
294
|
function getErrorMessage(error) {
|
|
295
|
-
|
|
295
|
+
if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") return error.message;
|
|
296
|
+
return String(error);
|
|
296
297
|
}
|
|
297
298
|
/**
|
|
298
299
|
* Remove any temporary `vite.config.ts.timestamp-*` files.
|
|
@@ -316,4 +317,4 @@ function cleanup(options = {}) {
|
|
|
316
317
|
|
|
317
318
|
//#endregion
|
|
318
319
|
export { cleanup, dts, library, tsconfigPaths };
|
|
319
|
-
//# sourceMappingURL=index.
|
|
320
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["typesDir","dts"],"sources":["../src/logger.ts","../src/es-declarations.ts","../src/index.ts"],"sourcesContent":["import c from 'picocolors'\n\nexport function log(text: string): void {\n console.log(`${c.cyan('[vite:lib]')} ${text}`)\n}\n\nexport function logWarn(text: string): void {\n console.warn(`${c.yellow('[vite:lib]')} ${text}`)\n}\n\nexport function logError(text: string): void {\n console.error(`${c.red('[vite:lib]')} ${text}`)\n}\n","import { existsSync } from 'node:fs'\nimport { readFile, readdir, unlink, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { normalizePath } from 'vite'\n\nimport { log } from './logger'\n\nexport async function generateMTSDeclarations(\n typesDir: string,\n deleteSourceFiles: boolean,\n verbose: boolean | undefined,\n): Promise<void> {\n const files = await collectFiles(typesDir)\n for (const file of files) {\n await createMTSImports(file, verbose)\n if (deleteSourceFiles) {\n await unlink(file)\n }\n }\n log(`Generated ${files.length} MTS declarations.`)\n}\n\nasync function collectFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, {\n recursive: false, // does not provide full path to nested files\n withFileTypes: true,\n })\n const files = entries.filter((entry) => entry.isFile())\n const nestedFiles = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => collectFiles(normalizePath(path.join(dir, entry.name)))),\n )\n return files.map((file) => normalizePath(path.join(dir, file.name))).concat(...nestedFiles)\n}\n\nasync function createMTSImports(file: string, verbose: boolean | undefined) {\n const content = await readFile(file, 'utf-8')\n const lines = content.split('\\n')\n const modified = lines.map((line) => transformLine(file, line, verbose))\n const targetFile = file.replace('.d.ts', '.d.mts')\n await writeFile(targetFile, modified.join('\\n'))\n}\n\nfunction transformLine(file: string, line: string, verbose: boolean | undefined) {\n return (\n transformStaticImport(file, line, \"'\", verbose) ??\n transformStaticImport(file, line, '\"', verbose) ??\n transformExport(file, line, \"'\", verbose) ??\n transformExport(file, line, '\"', verbose) ??\n line\n )\n}\n\nfunction transformStaticImport(\n file: string,\n line: string,\n quote: string,\n verbose: boolean | undefined,\n) {\n const importPathMarker = `from ${quote}`\n const isStaticImport = line.includes('import ') && line.includes(`${importPathMarker}.`)\n if (!isStaticImport) {\n return undefined\n }\n\n const importStartIndex = line.lastIndexOf(importPathMarker)\n const importPath = line.substring(importStartIndex + importPathMarker.length, line.length - 2)\n const resolvedImport = path.resolve(path.dirname(file), importPath)\n if (existsSync(resolvedImport)) {\n if (verbose) {\n log(`got index import ${resolvedImport}`)\n }\n return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n }\n\n return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n\nfunction transformExport(file: string, line: string, quote: string, verbose: boolean | undefined) {\n const exportPathMarker = ` from ${quote}`\n const isStaticExport = line.includes('export ') && line.includes(`${exportPathMarker}.`)\n if (!isStaticExport) {\n return undefined\n }\n\n const exportStartIndex = line.lastIndexOf(exportPathMarker)\n const exportPath = line.substring(exportStartIndex + exportPathMarker.length, line.length - 2)\n const resolvedExport = path.resolve(path.dirname(file), exportPath)\n if (existsSync(resolvedExport)) {\n if (verbose) {\n log(`got index export ${resolvedExport}`)\n }\n return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n }\n\n return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n","import { existsSync, readFileSync, readdirSync, rmSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { builtinModules } from 'node:module'\nimport path from 'node:path'\n\nimport c from 'picocolors'\nimport type { CompilerOptions } from 'typescript'\nimport ts from 'typescript'\nimport type { Alias, AliasOptions, LibraryFormats, Plugin, UserConfig } from 'vite'\nimport dts from 'vite-plugin-dts'\n\nimport { generateMTSDeclarations } from './es-declarations'\nimport { log, logError, logWarn } from './logger'\n\nexport * as dts from 'vite-plugin-dts'\n\nconst typesDir = 'dist/types'\n\nexport interface CommonOptions {\n verbose: boolean\n}\n\nconst COMMON_DEFAULTS = {\n verbose: false,\n} satisfies Partial<CommonOptions>\n\nexport interface TSConfigPathsOptions extends CommonOptions {\n /** Path to the tsconfig file (relative to the project root). Defaults to `./tsconfig.json` */\n tsconfig: string\n}\n\nconst TS_CONFIG_PATHS_OPTIONS = {\n ...COMMON_DEFAULTS,\n tsconfig: './tsconfig.json',\n} satisfies Partial<TSConfigPathsOptions>\n\nexport interface BundleOptions {\n /** If `false`, all builtin modules will be externalized. Defaults to `false`. */\n builtin: boolean\n /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n dependencies: boolean\n /** If `false`, all devDependencies will be externalized. Defaults to `true`. */\n devDependencies: boolean\n /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n peerDependencies: boolean\n /** List of packages or modules to externalize. Defaults to `[]`. */\n exclude: (string | RegExp)[]\n /** List of packages or modules to bundle. Acts as an override and defaults to `[]`. */\n include: (string | RegExp)[]\n /** If `false`, all direct imports from `node_modules` will be externalized. Defaults to `false`. */\n nodeModules: boolean\n}\n\nconst BUNDLE_DEFAULTS = {\n builtin: false,\n dependencies: false,\n devDependencies: true,\n peerDependencies: false,\n exclude: [],\n include: [],\n nodeModules: false,\n} satisfies BundleOptions\n\nexport interface LibraryOptions extends TSConfigPathsOptions {\n /** Defaults to `src/index.ts`. */\n entry: string\n /** Bundle configuration for packages and modules. See {@link BundleOptions} for defaults. */\n bundle: Partial<BundleOptions>\n /** Defaults to `['es']`. */\n formats: LibraryFormats[]\n /** Defaults to `package.json`. */\n manifest: string\n name?: string\n /** Remove any temporary build files. Defaults to `true`. */\n cleanup: boolean\n}\n\nconst LIBRARY_DEFAULTS = {\n ...TS_CONFIG_PATHS_OPTIONS,\n cleanup: true,\n entry: 'src/index.ts',\n bundle: {},\n formats: ['es'],\n manifest: 'package.json',\n} satisfies Partial<LibraryOptions>\n\nfunction mergeWithDefaults(options: Partial<LibraryOptions>): LibraryOptions {\n return {\n ...LIBRARY_DEFAULTS,\n ...options,\n }\n}\n\nexport function tsconfigPaths(options: Partial<TSConfigPathsOptions> = {}): Plugin {\n const tsconfig = options.tsconfig ?? TS_CONFIG_PATHS_OPTIONS.tsconfig\n const verbose = options.verbose ?? TS_CONFIG_PATHS_OPTIONS.verbose\n return {\n name: 'vite-plugin-lib:alias',\n enforce: 'pre',\n config: async (config) => {\n const tsconfigPath = path.resolve(config.root ?? '.', tsconfig)\n const { baseUrl, paths } = await readConfig(tsconfigPath)\n if (!baseUrl || !paths) {\n log(`No paths found in ${tsconfig}.`)\n return config\n }\n const pathToAlias = pathToAliasFactory(tsconfigPath, baseUrl, verbose)\n const aliasOptions = Object.entries(paths)\n .map(pathToAlias)\n .filter((alias) => alias !== undefined)\n if (aliasOptions.length > 0) {\n logInjectedAliases(aliasOptions, config, verbose)\n }\n const existingAlias = transformExistingAlias(config.resolve?.alias)\n return {\n ...config,\n resolve: {\n ...config.resolve,\n alias: [...existingAlias, ...aliasOptions],\n },\n }\n },\n }\n}\n\nfunction buildConfig({ entry, formats, manifest, name, bundle, verbose }: LibraryOptions): Plugin {\n const bundleWithDefaults = { ...BUNDLE_DEFAULTS, ...bundle }\n const packagesToExternalize = [\n ...getBuiltinModules(bundleWithDefaults),\n ...getDependencies(manifest, bundleWithDefaults, verbose),\n ...bundleWithDefaults.exclude,\n ]\n if (!bundleWithDefaults.nodeModules) {\n packagesToExternalize.push(/node_modules/)\n if (verbose) {\n log(`Externalized node_modules.`)\n }\n }\n return {\n name: 'vite-plugin-lib:build',\n enforce: 'pre',\n apply: 'build',\n config: async (config) => {\n return {\n ...config,\n build: {\n ...config.build,\n lib: {\n ...config.build?.lib,\n entry: path.resolve(config.root ?? '.', entry),\n formats,\n name,\n fileName: (format: string) => formatToFileName(entry, format),\n },\n rollupOptions: {\n external: (source: string, _importer: string | undefined, _isResolved: boolean) => {\n const shouldBeExternalized = packagesToExternalize.some((rule) =>\n matchesRule(source, rule),\n )\n const shouldBeBundled = bundleWithDefaults.include.some((rule) =>\n matchesRule(source, rule),\n )\n return shouldBeExternalized && !shouldBeBundled\n },\n },\n },\n }\n },\n }\n}\n\nfunction matchesRule(source: string, rule: string | RegExp) {\n return typeof rule === 'string' ? rule === source : rule.test(source)\n}\n\nfunction getDependencies(manifest: string, bundle: BundleOptions, verbose: boolean): string[] {\n try {\n const content = readFileSync(manifest, { encoding: 'utf-8' })\n const { dependencies = {}, devDependencies = {}, peerDependencies = {} } = JSON.parse(content)\n const dependenciesToExternalize: string[] = []\n if (!bundle.dependencies) {\n const names = Object.keys(dependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} dependencies.`)\n }\n }\n if (!bundle.devDependencies) {\n const names = Object.keys(devDependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} devDependencies.`)\n }\n }\n if (!bundle.peerDependencies) {\n const names = Object.keys(peerDependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} peerDependencies.`)\n }\n }\n return dependenciesToExternalize\n } catch (error) {\n const message = getErrorMessage(error)\n logError(`Could not read ${c.green(manifest)}: ${message}`)\n throw error\n }\n}\n\nfunction getBuiltinModules(bundle: BundleOptions) {\n if (bundle.builtin) {\n return []\n }\n log('Externalized builtin modules.')\n return [...builtinModules, /node:/, /bun:/, /deno:/]\n}\n\nfunction logInjectedAliases(aliasOptions: Alias[], config: UserConfig, verbose?: boolean) {\n log(`Injected ${c.green(aliasOptions.length)} aliases.`)\n if (!verbose) {\n return\n }\n const base = `${path.resolve(config.root ?? '.')}/`\n aliasOptions\n .map(\n ({ find, replacement }) =>\n ` ${c.gray('>')} ${c.green(find.toString())} ${c.gray(\n c.bold('->'),\n )} ${c.green(replacement.replace(base, ''))}`,\n )\n .forEach(log)\n}\n\nfunction pathToAliasFactory(\n tsconfigPath: string,\n baseUrl: string,\n verbose?: boolean,\n): (path: [string, string[]]) => Alias | undefined {\n return ([alias, replacements]) => {\n if (replacements.length === 0) {\n if (verbose) {\n logWarn(`No replacements for alias ${c.green(alias)}.`)\n }\n return undefined\n }\n if (verbose && replacements.length > 1) {\n logWarn(`Found more than one replacement for alias ${c.green(alias)}.`)\n logWarn('Using the first existing replacement.')\n }\n const find = alias.replace('/*', '')\n const replacement = getFirstExistingReplacement(tsconfigPath, baseUrl, replacements, find)\n if (!replacement) {\n if (verbose) {\n logWarn(`No replacement found for alias ${c.green(alias)}.`)\n }\n return undefined\n }\n return {\n find,\n replacement,\n }\n }\n}\n\nfunction getFirstExistingReplacement(\n tsconfigPath: string,\n baseUrl: string,\n replacements: string[],\n find: string,\n verbose?: boolean,\n): string | undefined {\n for (const replacement of replacements) {\n const resolvedReplacement = path.resolve(\n tsconfigPath,\n baseUrl,\n replacement.replace('/*', '') ?? find,\n )\n if (existsSync(resolvedReplacement)) {\n return resolvedReplacement\n } else if (verbose) {\n logWarn(`Path ${c.green(replacement)} does not exist.`)\n }\n }\n return undefined\n}\n\nfunction formatToFileName(entry: string, format: string): string {\n const entryFileName = entry.substring(entry.lastIndexOf('/') + 1, entry.lastIndexOf('.'))\n if (format === 'es') {\n return `${entryFileName}.mjs`\n }\n if (format === 'cjs') {\n return `${entryFileName}.cjs`\n }\n return `${entryFileName}.${format}.js`\n}\n\nexport function library(options: Partial<LibraryOptions> = {}): Plugin[] {\n const mergedOptions = mergeWithDefaults(options)\n const plugins = [\n tsconfigPaths(mergedOptions),\n buildConfig(mergedOptions),\n dts({\n cleanVueFileName: true,\n copyDtsFiles: true,\n include: `${path.resolve(mergedOptions.entry, '..')}/**`,\n outDir: typesDir,\n staticImport: true,\n tsconfigPath: mergedOptions.tsconfig,\n afterBuild: async () => {\n if (includesESFormat(mergedOptions.formats)) {\n await generateMTSDeclarations(\n typesDir,\n mergedOptions.formats?.length === 1,\n options.verbose,\n )\n }\n },\n }),\n ]\n\n if (mergedOptions.cleanup) {\n plugins.push(cleanup(mergedOptions))\n }\n\n return plugins\n}\n\nfunction transformExistingAlias(alias: AliasOptions | undefined): Alias[] {\n if (!alias) {\n return []\n }\n if (Array.isArray(alias)) {\n return alias\n }\n return Object.entries(alias).map(([find, replacement]) => ({\n find,\n replacement,\n }))\n}\n\nasync function readConfig(configPath: string): Promise<CompilerOptions> {\n try {\n const configFileText = await readFile(configPath, { encoding: 'utf-8' })\n\n const { config } = ts.parseConfigFileTextToJson(configPath, configFileText)\n\n const { options } = ts.parseJsonConfigFileContent(config, ts.sys, path.dirname(configPath))\n return options\n } catch (error: any) {\n const message = getErrorMessage(error)\n logError(`Could not read ${configPath}: ${message}`)\n throw error\n }\n}\n\nfunction includesESFormat(formats?: LibraryFormats[]) {\n return formats?.includes('es') ?? true\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof error.message === 'string'\n ) {\n return error.message\n }\n return String(error)\n}\n\n/**\n * Remove any temporary `vite.config.ts.timestamp-*` files.\n */\nexport function cleanup(options: Partial<CommonOptions> = {}): Plugin {\n const verbose = options.verbose ?? COMMON_DEFAULTS.verbose\n return {\n name: 'vite-plugin-lib:cleanup',\n enforce: 'post',\n closeBundle: () => {\n let deletedCount = 0\n readdirSync('.').forEach((file) => {\n if (!file.startsWith('vite.config.ts.timestamp-')) {\n return\n }\n rmSync(`./${file}`)\n deletedCount++\n })\n if (verbose) {\n log(`Removed ${deletedCount} temporary files.`)\n }\n },\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-lib",
|
|
3
|
-
"
|
|
4
|
-
"version": "4.0.0",
|
|
3
|
+
"version": "4.0.2",
|
|
5
4
|
"description": "Vite plugin for build configuration, automatic aliases, and type declarations.",
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
"keywords": [
|
|
6
|
+
"aliases",
|
|
7
|
+
"declarations",
|
|
8
|
+
"library",
|
|
9
|
+
"vite-plugin"
|
|
10
|
+
],
|
|
9
11
|
"homepage": "https://github.com/DerYeger/yeger/tree/main/packages/vite-plugin-lib",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/DerYeger/yeger/issues"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"author": "Jan Müller <janmueller3698@gmail.com>",
|
|
10
17
|
"repository": {
|
|
11
18
|
"type": "git",
|
|
12
19
|
"url": "git+https://github.com/DerYeger/yeger.git",
|
|
13
20
|
"directory": "packages/vite-plugin-lib"
|
|
14
21
|
},
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"vite-plugin",
|
|
20
|
-
"declarations",
|
|
21
|
-
"library",
|
|
22
|
-
"aliases"
|
|
22
|
+
"funding": "https://github.com/sponsors/DerYeger",
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"LICENSE"
|
|
23
26
|
],
|
|
27
|
+
"type": "module",
|
|
28
|
+
"types": "dist/index.d.mts",
|
|
24
29
|
"exports": {
|
|
25
30
|
".": {
|
|
26
31
|
"import": {
|
|
27
|
-
"types": "./dist/index.d.
|
|
28
|
-
"default": "./dist/index.
|
|
32
|
+
"types": "./dist/index.d.mts",
|
|
33
|
+
"default": "./dist/index.mjs"
|
|
29
34
|
}
|
|
30
35
|
}
|
|
31
36
|
},
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
"LICENSE",
|
|
35
|
-
"dist"
|
|
36
|
-
],
|
|
37
|
-
"peerDependencies": {
|
|
38
|
-
"typescript": "*",
|
|
39
|
-
"vite": "2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
40
39
|
},
|
|
41
40
|
"dependencies": {
|
|
42
41
|
"picocolors": "1.1.1",
|
|
43
42
|
"vite-plugin-dts": "4.5.4"
|
|
44
43
|
},
|
|
45
44
|
"devDependencies": {
|
|
46
|
-
"
|
|
45
|
+
"publint": "0.3.17",
|
|
46
|
+
"tsdown": "0.19.0",
|
|
47
47
|
"typescript": "5.9.3",
|
|
48
|
-
"vite": "7.1
|
|
48
|
+
"vite": "7.3.1",
|
|
49
49
|
"@yeger/tsconfig": "2.1.2"
|
|
50
50
|
},
|
|
51
|
-
"
|
|
52
|
-
"
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"typescript": "*",
|
|
53
|
+
"vite": "2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
|
|
53
54
|
},
|
|
54
55
|
"scripts": {
|
|
55
56
|
"build": "tsdown",
|
|
56
57
|
"check:publish": "publint run --strict",
|
|
57
|
-
"check:tsc": "tsc"
|
|
58
|
-
"lint": "yeger-lint"
|
|
58
|
+
"check:tsc": "tsc"
|
|
59
59
|
}
|
|
60
60
|
}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";;;;UAwBiB,aAAA;;AAAjB;AAQiB,UAAA,oBAAA,SAA6B,aAAA,CAAA;EAU9C;EA2BA,QAAiB,EAAA,MAAA;;AAIP,UA/BO,aAAA,CA+BP;EAEC;EAN6B,OAAA,EAAA,OAAA;EAAA;EA8BxC,YAAgB,EAAA,OAAA;EAA+B;EAAR,eAAA,EAAA,OAAA;EAAqC;EAAA,gBAAA,EAAA,OAAA;EA2N5E;EAAyC,OAAA,EAAA,CAAA,MAAA,GA1QpB,MA0QoB,CAAA,EAAA;EAAR;EAA+B,OAAA,EAAA,CAAA,MAAA,GAxQ3C,MAwQ2C,CAAA,EAAA;EAAA;EA4EhE,WAAgB,EAAA,OAAA;;AAAiB,UArUhB,cAAA,SAAuB,oBAqUP,CAAA;EAA8B;EAAA,KAAA,EAAA,MAAA;;UAjUrD,QAAQ;;WAEP;;;;;;;iBAwBK,aAAA,WAAuB,QAAQ,wBAA6B;iBA2N5D,OAAA,WAAiB,QAAQ,kBAAuB;;;;iBA4EhD,OAAA,WAAiB,QAAQ,iBAAsB"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["typesDir","dependenciesToExternalize: string[]","dts","error: any"],"sources":["../src/logger.ts","../src/es-declarations.ts","../src/index.ts"],"sourcesContent":["import c from 'picocolors'\n\nexport function log(text: string): void {\n // eslint-disable-next-line no-console\n console.log(`${c.cyan('[vite:lib]')} ${text}`)\n}\n\nexport function logWarn(text: string): void {\n console.warn(`${c.yellow('[vite:lib]')} ${text}`)\n}\n\nexport function logError(text: string): void {\n console.error(`${c.red('[vite:lib]')} ${text}`)\n}\n","import { existsSync } from 'node:fs'\nimport { readFile, readdir, unlink, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nimport { normalizePath } from 'vite'\n\nimport { log } from './logger'\n\nexport async function generateMTSDeclarations(\n typesDir: string,\n deleteSourceFiles: boolean,\n verbose: boolean | undefined,\n): Promise<void> {\n const files = await collectFiles(typesDir)\n for (const file of files) {\n await createMTSImports(file, verbose)\n if (deleteSourceFiles) {\n unlink(file)\n }\n }\n log(`Generated ${files.length} MTS declarations.`)\n}\n\nasync function collectFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, {\n recursive: false, // does not provide full path to nested files\n withFileTypes: true,\n })\n const files = entries.filter((entry) => entry.isFile())\n const nestedFiles = await Promise.all(\n entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => collectFiles(normalizePath(path.join(dir, entry.name)))),\n )\n return files\n .map((file) => normalizePath(path.join(dir, file.name)))\n .concat(...nestedFiles)\n}\n\nasync function createMTSImports(file: string, verbose: boolean | undefined) {\n const content = await readFile(file, 'utf-8')\n const lines = content.split('\\n')\n const modified = lines.map((line) => transformLine(file, line, verbose))\n const targetFile = file.replace('.d.ts', '.d.mts')\n await writeFile(targetFile, modified.join('\\n'))\n}\n\nfunction transformLine(\n file: string,\n line: string,\n verbose: boolean | undefined,\n) {\n return (\n // eslint-disable-next-line style/quotes\n transformStaticImport(file, line, \"'\", verbose) ??\n transformStaticImport(file, line, '\"', verbose) ??\n // eslint-disable-next-line style/quotes\n transformExport(file, line, \"'\", verbose) ??\n transformExport(file, line, '\"', verbose) ??\n line\n )\n}\n\nfunction transformStaticImport(\n file: string,\n line: string,\n quote: string,\n verbose: boolean | undefined,\n) {\n const importPathMarker = `from ${quote}`\n const isStaticImport =\n line.includes('import ') && line.includes(`${importPathMarker}.`)\n if (!isStaticImport) {\n return undefined\n }\n\n const importStartIndex = line.lastIndexOf(importPathMarker)\n const importPath = line.substring(\n importStartIndex + importPathMarker.length,\n line.length - 2,\n )\n const resolvedImport = path.resolve(path.dirname(file), importPath)\n if (existsSync(resolvedImport)) {\n if (verbose) {\n log(`got index import ${resolvedImport}`)\n }\n return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n }\n\n return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n\nfunction transformExport(\n file: string,\n line: string,\n quote: string,\n verbose: boolean | undefined,\n) {\n const exportPathMarker = ` from ${quote}`\n const isStaticExport =\n line.includes('export ') && line.includes(`${exportPathMarker}.`)\n if (!isStaticExport) {\n return undefined\n }\n\n const exportStartIndex = line.lastIndexOf(exportPathMarker)\n const exportPath = line.substring(\n exportStartIndex + exportPathMarker.length,\n line.length - 2,\n )\n const resolvedExport = path.resolve(path.dirname(file), exportPath)\n if (existsSync(resolvedExport)) {\n if (verbose) {\n log(`got index export ${resolvedExport}`)\n }\n return `${line.substring(0, line.length - 2)}/index.mjs${quote};`\n }\n\n return `${line.substring(0, line.length - 2)}.mjs${quote};`\n}\n","import { existsSync, readFileSync, readdirSync, rmSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport { builtinModules } from 'node:module'\nimport path from 'node:path'\n\nimport c from 'picocolors'\nimport type { CompilerOptions } from 'typescript'\nimport ts from 'typescript'\nimport type {\n Alias,\n AliasOptions,\n LibraryFormats,\n Plugin,\n UserConfig,\n} from 'vite'\nimport dts from 'vite-plugin-dts'\n\nimport { generateMTSDeclarations } from './es-declarations'\nimport { log, logError, logWarn } from './logger'\n\nexport * as dts from 'vite-plugin-dts'\n\nconst typesDir = 'dist/types'\n\nexport interface CommonOptions {\n verbose: boolean\n}\n\nconst COMMON_DEFAULTS = {\n verbose: false,\n} satisfies Partial<CommonOptions>\n\nexport interface TSConfigPathsOptions extends CommonOptions {\n /** Path to the tsconfig file (relative to the project root). Defaults to `./tsconfig.json` */\n tsconfig: string\n}\n\nconst TS_CONFIG_PATHS_OPTIONS = {\n ...COMMON_DEFAULTS,\n tsconfig: './tsconfig.json',\n} satisfies Partial<TSConfigPathsOptions>\n\nexport interface BundleOptions {\n /** If `false`, all builtin modules will be externalized. Defaults to `false`. */\n builtin: boolean\n /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n dependencies: boolean\n /** If `false`, all devDependencies will be externalized. Defaults to `true`. */\n devDependencies: boolean\n /** If `false`, all dependencies will be externalized. Defaults to `false`. */\n peerDependencies: boolean\n /** List of packages or modules to externalize. Defaults to `[]`. */\n exclude: (string | RegExp)[]\n /** List of packages or modules to bundle. Acts as an override and defaults to `[]`. */\n include: (string | RegExp)[]\n /** If `false`, all direct imports from `node_modules` will be externalized. Defaults to `false`. */\n nodeModules: boolean\n}\n\nconst BUNDLE_DEFAULTS = {\n builtin: false,\n dependencies: false,\n devDependencies: true,\n peerDependencies: false,\n exclude: [],\n include: [],\n nodeModules: false,\n} satisfies BundleOptions\n\nexport interface LibraryOptions extends TSConfigPathsOptions {\n /** Defaults to `src/index.ts`. */\n entry: string\n /** Bundle configuration for packages and modules. See {@link BundleOptions} for defaults. */\n bundle: Partial<BundleOptions>\n /** Defaults to `['es']`. */\n formats: LibraryFormats[]\n /** Defaults to `package.json`. */\n manifest: string\n name?: string\n /** Remove any temporary build files. Defaults to `true`. */\n cleanup: boolean\n}\n\nconst LIBRARY_DEFAULTS = {\n ...TS_CONFIG_PATHS_OPTIONS,\n cleanup: true,\n entry: 'src/index.ts',\n bundle: {},\n formats: ['es'],\n manifest: 'package.json',\n} satisfies Partial<LibraryOptions>\n\nfunction mergeWithDefaults(options: Partial<LibraryOptions>): LibraryOptions {\n return {\n ...LIBRARY_DEFAULTS,\n ...options,\n }\n}\n\nexport function tsconfigPaths(options: Partial<TSConfigPathsOptions> = {}): Plugin {\n const tsconfig = options.tsconfig ?? TS_CONFIG_PATHS_OPTIONS.tsconfig\n const verbose = options.verbose ?? TS_CONFIG_PATHS_OPTIONS.verbose\n return {\n name: 'vite-plugin-lib:alias',\n enforce: 'pre',\n config: async (config) => {\n const tsconfigPath = path.resolve(config.root ?? '.', tsconfig)\n const { baseUrl, paths } = await readConfig(tsconfigPath)\n if (!baseUrl || !paths) {\n log(`No paths found in ${tsconfig}.`)\n return config\n }\n const pathToAlias = pathToAliasFactory(tsconfigPath, baseUrl, verbose)\n const aliasOptions = Object.entries(paths)\n .map(pathToAlias)\n .filter((alias) => alias !== undefined)\n if (aliasOptions.length > 0) {\n logInjectedAliases(aliasOptions, config, verbose)\n }\n const existingAlias = transformExistingAlias(config.resolve?.alias)\n return {\n ...config,\n resolve: {\n ...config.resolve,\n alias: [...existingAlias, ...aliasOptions],\n },\n }\n },\n }\n}\n\nfunction buildConfig({\n entry,\n formats,\n manifest,\n name,\n bundle,\n verbose,\n}: LibraryOptions): Plugin {\n const bundleWithDefaults = { ...BUNDLE_DEFAULTS, ...bundle }\n const packagesToExternalize = [\n ...getBuiltinModules(bundleWithDefaults),\n ...getDependencies(manifest, bundleWithDefaults, verbose),\n ...bundleWithDefaults.exclude,\n ]\n if (!bundleWithDefaults.nodeModules) {\n packagesToExternalize.push(/node_modules/)\n if (verbose) {\n log(`Externalized node_modules.`)\n }\n }\n return {\n name: 'vite-plugin-lib:build',\n enforce: 'pre',\n apply: 'build',\n config: async (config) => {\n return {\n ...config,\n build: {\n ...config.build,\n lib: {\n ...config.build?.lib,\n entry: path.resolve(config.root ?? '.', entry),\n formats,\n name,\n fileName: (format: string) => formatToFileName(entry, format),\n },\n rollupOptions: {\n external: (source: string, _importer: string | undefined, _isResolved: boolean) => {\n const shouldBeExternalized = packagesToExternalize.some((rule) => matchesRule(source, rule))\n const shouldBeBundled = bundleWithDefaults.include.some((rule) => matchesRule(source, rule))\n return shouldBeExternalized && !shouldBeBundled\n },\n },\n },\n }\n },\n }\n}\n\nfunction matchesRule(source: string, rule: string | RegExp) {\n return typeof rule === 'string' ? rule === source : rule.test(source)\n}\n\nfunction getDependencies(manifest: string, bundle: BundleOptions, verbose: boolean): string[] {\n try {\n const content = readFileSync(manifest, { encoding: 'utf-8' })\n const { dependencies = {}, devDependencies = {}, peerDependencies = {} } = JSON.parse(content)\n const dependenciesToExternalize: string[] = []\n if (!bundle.dependencies) {\n const names = Object.keys(dependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} dependencies.`)\n }\n }\n if (!bundle.devDependencies) {\n const names = Object.keys(devDependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} devDependencies.`)\n }\n }\n if (!bundle.peerDependencies) {\n const names = Object.keys(peerDependencies)\n dependenciesToExternalize.push(...names)\n if (verbose) {\n log(`Externalized ${names.length} peerDependencies.`)\n }\n }\n return dependenciesToExternalize\n } catch (error) {\n const message = getErrorMessage(error)\n logError(`Could not read ${c.green(manifest)}: ${message}`)\n throw error\n }\n}\n\nfunction getBuiltinModules(bundle: BundleOptions) {\n if (bundle.builtin) {\n return []\n }\n log('Externalized builtin modules.')\n return [...builtinModules, /node:/, /bun:/, /deno:/]\n}\n\nfunction logInjectedAliases(\n aliasOptions: Alias[],\n config: UserConfig,\n verbose?: boolean,\n) {\n log(`Injected ${c.green(aliasOptions.length)} aliases.`)\n if (!verbose) {\n return\n }\n const base = `${path.resolve(config.root ?? '.')}/`\n aliasOptions\n .map(\n ({ find, replacement }) =>\n ` ${c.gray('>')} ${c.green(find.toString())} ${c.gray(\n c.bold('->'),\n )} ${c.green(replacement.replace(base, ''))}`,\n )\n .forEach(log)\n}\n\nfunction pathToAliasFactory(\n tsconfigPath: string,\n baseUrl: string,\n verbose?: boolean,\n): (path: [string, string[]]) => Alias | undefined {\n return ([alias, replacements]) => {\n if (replacements.length === 0) {\n if (verbose) {\n logWarn(`No replacements for alias ${c.green(alias)}.`)\n }\n return undefined\n }\n if (verbose && replacements.length > 1) {\n logWarn(`Found more than one replacement for alias ${c.green(alias)}.`)\n logWarn('Using the first existing replacement.')\n }\n const find = alias.replace('/*', '')\n const replacement = getFirstExistingReplacement(\n tsconfigPath,\n baseUrl,\n replacements,\n find,\n )\n if (!replacement) {\n if (verbose) {\n logWarn(`No replacement found for alias ${c.green(alias)}.`)\n }\n return undefined\n }\n return {\n find,\n replacement,\n }\n }\n}\n\nfunction getFirstExistingReplacement(\n tsconfigPath: string,\n baseUrl: string,\n replacements: string[],\n find: string,\n verbose?: boolean,\n): string | undefined {\n for (const replacement of replacements) {\n const resolvedReplacement = path.resolve(\n tsconfigPath,\n baseUrl,\n replacement.replace('/*', '') ?? find,\n )\n if (existsSync(resolvedReplacement)) {\n return resolvedReplacement\n } else if (verbose) {\n logWarn(`Path ${c.green(replacement)} does not exist.`)\n }\n }\n return undefined\n}\n\nfunction formatToFileName(entry: string, format: string): string {\n const entryFileName = entry.substring(\n entry.lastIndexOf('/') + 1,\n entry.lastIndexOf('.'),\n )\n if (format === 'es') {\n return `${entryFileName}.mjs`\n }\n if (format === 'cjs') {\n return `${entryFileName}.cjs`\n }\n return `${entryFileName}.${format}.js`\n}\n\nexport function library(options: Partial<LibraryOptions> = {}): Plugin[] {\n const mergedOptions = mergeWithDefaults(options)\n const plugins = [\n tsconfigPaths(mergedOptions),\n buildConfig(mergedOptions),\n dts({\n cleanVueFileName: true,\n copyDtsFiles: true,\n include: `${path.resolve(mergedOptions.entry, '..')}/**`,\n outDir: typesDir,\n staticImport: true,\n tsconfigPath: mergedOptions.tsconfig,\n afterBuild: async () => {\n if (includesESFormat(mergedOptions.formats)) {\n await generateMTSDeclarations(\n typesDir,\n mergedOptions.formats?.length === 1,\n options.verbose,\n )\n }\n },\n }),\n ]\n\n if (mergedOptions.cleanup) {\n plugins.push(cleanup(mergedOptions))\n }\n\n return plugins\n}\n\nfunction transformExistingAlias(alias: AliasOptions | undefined): Alias[] {\n if (!alias) {\n return []\n }\n if (Array.isArray(alias)) {\n return alias\n }\n return Object.entries(alias).map(([find, replacement]) => ({\n find,\n replacement,\n }))\n}\n\nasync function readConfig(configPath: string): Promise<CompilerOptions> {\n try {\n const configFileText = await readFile(configPath, { encoding: 'utf-8' })\n\n const { config } = ts.parseConfigFileTextToJson(configPath, configFileText)\n\n const { options } = ts.parseJsonConfigFileContent(\n config,\n ts.sys,\n path.dirname(configPath),\n )\n return options\n } catch (error: any) {\n const message = getErrorMessage(error)\n logError(`Could not read ${configPath}: ${message}`)\n throw error\n }\n}\n\nfunction includesESFormat(formats?: LibraryFormats[]) {\n return formats?.includes('es') ?? true\n}\n\nfunction getErrorMessage(error: unknown) {\n const isObject =\n typeof error === 'object' && error !== null && 'message' in error\n return isObject ? error.message : String(error)\n}\n\n/**\n * Remove any temporary `vite.config.ts.timestamp-*` files.\n */\nexport function cleanup(options: Partial<CommonOptions> = {}): Plugin {\n const verbose = options.verbose ?? COMMON_DEFAULTS.verbose\n return {\n name: 'vite-plugin-lib:cleanup',\n enforce: 'post',\n closeBundle: () => {\n let deletedCount = 0\n readdirSync('.').forEach((file) => {\n if (!file.startsWith('vite.config.ts.timestamp-')) {\n return\n }\n rmSync(`./${file}`)\n deletedCount++\n })\n if (verbose) {\n log(`Removed ${deletedCount} temporary files.`)\n }\n },\n }\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAAgB,IAAI,MAAoB;AAEtC,SAAQ,IAAI,GAAG,EAAE,KAAK,aAAa,CAAC,GAAG,OAAO;;AAGhD,SAAgB,QAAQ,MAAoB;AAC1C,SAAQ,KAAK,GAAG,EAAE,OAAO,aAAa,CAAC,GAAG,OAAO;;AAGnD,SAAgB,SAAS,MAAoB;AAC3C,SAAQ,MAAM,GAAG,EAAE,IAAI,aAAa,CAAC,GAAG,OAAO;;;;;ACJjD,eAAsB,wBACpB,YACA,mBACA,SACe;CACf,MAAM,QAAQ,MAAM,aAAaA,WAAS;AAC1C,MAAK,MAAM,QAAQ,OAAO;AACxB,QAAM,iBAAiB,MAAM,QAAQ;AACrC,MAAI,kBACF,QAAO,KAAK;;AAGhB,KAAI,aAAa,MAAM,OAAO,oBAAoB;;AAGpD,eAAe,aAAa,KAAgC;CAC1D,MAAM,UAAU,MAAM,QAAQ,KAAK;EACjC,WAAW;EACX,eAAe;EAChB,CAAC;CACF,MAAM,QAAQ,QAAQ,QAAQ,UAAU,MAAM,QAAQ,CAAC;CACvD,MAAM,cAAc,MAAM,QAAQ,IAChC,QACG,QAAQ,UAAU,MAAM,aAAa,CAAC,CACtC,KAAK,UAAU,aAAa,cAAc,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC,CAAC,CAAC,CAC3E;AACD,QAAO,MACJ,KAAK,SAAS,cAAc,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,CACvD,OAAO,GAAG,YAAY;;AAG3B,eAAe,iBAAiB,MAAc,SAA8B;CAG1E,MAAM,YAFU,MAAM,SAAS,MAAM,QAAQ,EACvB,MAAM,KAAK,CACV,KAAK,SAAS,cAAc,MAAM,MAAM,QAAQ,CAAC;AAExE,OAAM,UADa,KAAK,QAAQ,SAAS,SAAS,EACtB,SAAS,KAAK,KAAK,CAAC;;AAGlD,SAAS,cACP,MACA,MACA,SACA;AACA,QAEE,sBAAsB,MAAM,MAAM,KAAK,QAAQ,IAC/C,sBAAsB,MAAM,MAAM,MAAK,QAAQ,IAE/C,gBAAgB,MAAM,MAAM,KAAK,QAAQ,IACzC,gBAAgB,MAAM,MAAM,MAAK,QAAQ,IACzC;;AAIJ,SAAS,sBACP,MACA,MACA,OACA,SACA;CACA,MAAM,mBAAmB,QAAQ;AAGjC,KAAI,EADF,KAAK,SAAS,UAAU,IAAI,KAAK,SAAS,GAAG,iBAAiB,GAAG,EAEjE;CAGF,MAAM,mBAAmB,KAAK,YAAY,iBAAiB;CAC3D,MAAM,aAAa,KAAK,UACtB,mBAAmB,iBAAiB,QACpC,KAAK,SAAS,EACf;CACD,MAAM,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,KAAK,EAAE,WAAW;AACnE,KAAI,WAAW,eAAe,EAAE;AAC9B,MAAI,QACF,KAAI,oBAAoB,iBAAiB;AAE3C,SAAO,GAAG,KAAK,UAAU,GAAG,KAAK,SAAS,EAAE,CAAC,YAAY,MAAM;;AAGjE,QAAO,GAAG,KAAK,UAAU,GAAG,KAAK,SAAS,EAAE,CAAC,MAAM,MAAM;;AAG3D,SAAS,gBACP,MACA,MACA,OACA,SACA;CACA,MAAM,mBAAmB,SAAS;AAGlC,KAAI,EADF,KAAK,SAAS,UAAU,IAAI,KAAK,SAAS,GAAG,iBAAiB,GAAG,EAEjE;CAGF,MAAM,mBAAmB,KAAK,YAAY,iBAAiB;CAC3D,MAAM,aAAa,KAAK,UACtB,mBAAmB,iBAAiB,QACpC,KAAK,SAAS,EACf;CACD,MAAM,iBAAiB,KAAK,QAAQ,KAAK,QAAQ,KAAK,EAAE,WAAW;AACnE,KAAI,WAAW,eAAe,EAAE;AAC9B,MAAI,QACF,KAAI,oBAAoB,iBAAiB;AAE3C,SAAO,GAAG,KAAK,UAAU,GAAG,KAAK,SAAS,EAAE,CAAC,YAAY,MAAM;;AAGjE,QAAO,GAAG,KAAK,UAAU,GAAG,KAAK,SAAS,EAAE,CAAC,MAAM,MAAM;;;;;AChG3D,MAAM,WAAW;AAMjB,MAAM,kBAAkB,EACtB,SAAS,OACV;AAOD,MAAM,0BAA0B;CAC9B,GAAG;CACH,UAAU;CACX;AAmBD,MAAM,kBAAkB;CACtB,SAAS;CACT,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,SAAS,EAAE;CACX,SAAS,EAAE;CACX,aAAa;CACd;AAgBD,MAAM,mBAAmB;CACvB,GAAG;CACH,SAAS;CACT,OAAO;CACP,QAAQ,EAAE;CACV,SAAS,CAAC,KAAK;CACf,UAAU;CACX;AAED,SAAS,kBAAkB,SAAkD;AAC3E,QAAO;EACL,GAAG;EACH,GAAG;EACJ;;AAGH,SAAgB,cAAc,UAAyC,EAAE,EAAU;CACjF,MAAM,WAAW,QAAQ,YAAY,wBAAwB;CAC7D,MAAM,UAAU,QAAQ,WAAW,wBAAwB;AAC3D,QAAO;EACL,MAAM;EACN,SAAS;EACT,QAAQ,OAAO,WAAW;GACxB,MAAM,eAAe,KAAK,QAAQ,OAAO,QAAQ,KAAK,SAAS;GAC/D,MAAM,EAAE,SAAS,UAAU,MAAM,WAAW,aAAa;AACzD,OAAI,CAAC,WAAW,CAAC,OAAO;AACtB,QAAI,qBAAqB,SAAS,GAAG;AACrC,WAAO;;GAET,MAAM,cAAc,mBAAmB,cAAc,SAAS,QAAQ;GACtE,MAAM,eAAe,OAAO,QAAQ,MAAM,CACvC,IAAI,YAAY,CAChB,QAAQ,UAAU,UAAU,OAAU;AACzC,OAAI,aAAa,SAAS,EACxB,oBAAmB,cAAc,QAAQ,QAAQ;GAEnD,MAAM,gBAAgB,uBAAuB,OAAO,SAAS,MAAM;AACnE,UAAO;IACL,GAAG;IACH,SAAS;KACP,GAAG,OAAO;KACV,OAAO,CAAC,GAAG,eAAe,GAAG,aAAa;KAC3C;IACF;;EAEJ;;AAGH,SAAS,YAAY,EACnB,OACA,SACA,UACA,MACA,QACA,WACyB;CACzB,MAAM,qBAAqB;EAAE,GAAG;EAAiB,GAAG;EAAQ;CAC5D,MAAM,wBAAwB;EAC5B,GAAG,kBAAkB,mBAAmB;EACxC,GAAG,gBAAgB,UAAU,oBAAoB,QAAQ;EACzD,GAAG,mBAAmB;EACvB;AACD,KAAI,CAAC,mBAAmB,aAAa;AACnC,wBAAsB,KAAK,eAAe;AAC1C,MAAI,QACF,KAAI,6BAA6B;;AAGrC,QAAO;EACL,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ,OAAO,WAAW;AACxB,UAAO;IACL,GAAG;IACH,OAAO;KACL,GAAG,OAAO;KACV,KAAK;MACH,GAAG,OAAO,OAAO;MACjB,OAAO,KAAK,QAAQ,OAAO,QAAQ,KAAK,MAAM;MAC9C;MACA;MACA,WAAW,WAAmB,iBAAiB,OAAO,OAAO;MAC9D;KACD,eAAe,EACb,WAAW,QAAgB,WAA+B,gBAAyB;MACjF,MAAM,uBAAuB,sBAAsB,MAAM,SAAS,YAAY,QAAQ,KAAK,CAAC;MAC5F,MAAM,kBAAkB,mBAAmB,QAAQ,MAAM,SAAS,YAAY,QAAQ,KAAK,CAAC;AAC5F,aAAO,wBAAwB,CAAC;QAEnC;KACF;IACF;;EAEJ;;AAGH,SAAS,YAAY,QAAgB,MAAuB;AAC1D,QAAO,OAAO,SAAS,WAAW,SAAS,SAAS,KAAK,KAAK,OAAO;;AAGvE,SAAS,gBAAgB,UAAkB,QAAuB,SAA4B;AAC5F,KAAI;EACF,MAAM,UAAU,aAAa,UAAU,EAAE,UAAU,SAAS,CAAC;EAC7D,MAAM,EAAE,eAAe,EAAE,EAAE,kBAAkB,EAAE,EAAE,mBAAmB,EAAE,KAAK,KAAK,MAAM,QAAQ;EAC9F,MAAMC,4BAAsC,EAAE;AAC9C,MAAI,CAAC,OAAO,cAAc;GACxB,MAAM,QAAQ,OAAO,KAAK,aAAa;AACvC,6BAA0B,KAAK,GAAG,MAAM;AACxC,OAAI,QACF,KAAI,gBAAgB,MAAM,OAAO,gBAAgB;;AAGrD,MAAI,CAAC,OAAO,iBAAiB;GAC3B,MAAM,QAAQ,OAAO,KAAK,gBAAgB;AAC1C,6BAA0B,KAAK,GAAG,MAAM;AACxC,OAAI,QACF,KAAI,gBAAgB,MAAM,OAAO,mBAAmB;;AAGxD,MAAI,CAAC,OAAO,kBAAkB;GAC5B,MAAM,QAAQ,OAAO,KAAK,iBAAiB;AAC3C,6BAA0B,KAAK,GAAG,MAAM;AACxC,OAAI,QACF,KAAI,gBAAgB,MAAM,OAAO,oBAAoB;;AAGzD,SAAO;UACA,OAAO;EACd,MAAM,UAAU,gBAAgB,MAAM;AACtC,WAAS,kBAAkB,EAAE,MAAM,SAAS,CAAC,IAAI,UAAU;AAC3D,QAAM;;;AAIV,SAAS,kBAAkB,QAAuB;AAChD,KAAI,OAAO,QACT,QAAO,EAAE;AAEX,KAAI,gCAAgC;AACpC,QAAO;EAAC,GAAG;EAAgB;EAAS;EAAQ;EAAQ;;AAGtD,SAAS,mBACP,cACA,QACA,SACA;AACA,KAAI,YAAY,EAAE,MAAM,aAAa,OAAO,CAAC,WAAW;AACxD,KAAI,CAAC,QACH;CAEF,MAAM,OAAO,GAAG,KAAK,QAAQ,OAAO,QAAQ,IAAI,CAAC;AACjD,cACG,KACE,EAAE,MAAM,kBACP,KAAK,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,GAAG,EAAE,KAChD,EAAE,KAAK,KAAK,CACb,CAAC,GAAG,EAAE,MAAM,YAAY,QAAQ,MAAM,GAAG,CAAC,GAC9C,CACA,QAAQ,IAAI;;AAGjB,SAAS,mBACP,cACA,SACA,SACiD;AACjD,SAAQ,CAAC,OAAO,kBAAkB;AAChC,MAAI,aAAa,WAAW,GAAG;AAC7B,OAAI,QACF,SAAQ,6BAA6B,EAAE,MAAM,MAAM,CAAC,GAAG;AAEzD;;AAEF,MAAI,WAAW,aAAa,SAAS,GAAG;AACtC,WAAQ,6CAA6C,EAAE,MAAM,MAAM,CAAC,GAAG;AACvE,WAAQ,wCAAwC;;EAElD,MAAM,OAAO,MAAM,QAAQ,MAAM,GAAG;EACpC,MAAM,cAAc,4BAClB,cACA,SACA,cACA,KACD;AACD,MAAI,CAAC,aAAa;AAChB,OAAI,QACF,SAAQ,kCAAkC,EAAE,MAAM,MAAM,CAAC,GAAG;AAE9D;;AAEF,SAAO;GACL;GACA;GACD;;;AAIL,SAAS,4BACP,cACA,SACA,cACA,MACA,SACoB;AACpB,MAAK,MAAM,eAAe,cAAc;EACtC,MAAM,sBAAsB,KAAK,QAC/B,cACA,SACA,YAAY,QAAQ,MAAM,GAAG,IAAI,KAClC;AACD,MAAI,WAAW,oBAAoB,CACjC,QAAO;WACE,QACT,SAAQ,QAAQ,EAAE,MAAM,YAAY,CAAC,kBAAkB;;;AAM7D,SAAS,iBAAiB,OAAe,QAAwB;CAC/D,MAAM,gBAAgB,MAAM,UAC1B,MAAM,YAAY,IAAI,GAAG,GACzB,MAAM,YAAY,IAAI,CACvB;AACD,KAAI,WAAW,KACb,QAAO,GAAG,cAAc;AAE1B,KAAI,WAAW,MACb,QAAO,GAAG,cAAc;AAE1B,QAAO,GAAG,cAAc,GAAG,OAAO;;AAGpC,SAAgB,QAAQ,UAAmC,EAAE,EAAY;CACvE,MAAM,gBAAgB,kBAAkB,QAAQ;CAChD,MAAM,UAAU;EACd,cAAc,cAAc;EAC5B,YAAY,cAAc;EAC1BC,MAAI;GACF,kBAAkB;GAClB,cAAc;GACd,SAAS,GAAG,KAAK,QAAQ,cAAc,OAAO,KAAK,CAAC;GACpD,QAAQ;GACR,cAAc;GACd,cAAc,cAAc;GAC5B,YAAY,YAAY;AACtB,QAAI,iBAAiB,cAAc,QAAQ,CACzC,OAAM,wBACJ,UACA,cAAc,SAAS,WAAW,GAClC,QAAQ,QACT;;GAGN,CAAC;EACH;AAED,KAAI,cAAc,QAChB,SAAQ,KAAK,QAAQ,cAAc,CAAC;AAGtC,QAAO;;AAGT,SAAS,uBAAuB,OAA0C;AACxE,KAAI,CAAC,MACH,QAAO,EAAE;AAEX,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO;AAET,QAAO,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,kBAAkB;EACzD;EACA;EACD,EAAE;;AAGL,eAAe,WAAW,YAA8C;AACtE,KAAI;EACF,MAAM,iBAAiB,MAAM,SAAS,YAAY,EAAE,UAAU,SAAS,CAAC;EAExE,MAAM,EAAE,WAAW,GAAG,0BAA0B,YAAY,eAAe;EAE3E,MAAM,EAAE,YAAY,GAAG,2BACrB,QACA,GAAG,KACH,KAAK,QAAQ,WAAW,CACzB;AACD,SAAO;UACAC,OAAY;AAEnB,WAAS,kBAAkB,WAAW,IADtB,gBAAgB,MAAM,GACc;AACpD,QAAM;;;AAIV,SAAS,iBAAiB,SAA4B;AACpD,QAAO,SAAS,SAAS,KAAK,IAAI;;AAGpC,SAAS,gBAAgB,OAAgB;AAGvC,QADE,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa,QAC5C,MAAM,UAAU,OAAO,MAAM;;;;;AAMjD,SAAgB,QAAQ,UAAkC,EAAE,EAAU;CACpE,MAAM,UAAU,QAAQ,WAAW,gBAAgB;AACnD,QAAO;EACL,MAAM;EACN,SAAS;EACT,mBAAmB;GACjB,IAAI,eAAe;AACnB,eAAY,IAAI,CAAC,SAAS,SAAS;AACjC,QAAI,CAAC,KAAK,WAAW,4BAA4B,CAC/C;AAEF,WAAO,KAAK,OAAO;AACnB;KACA;AACF,OAAI,QACF,KAAI,WAAW,aAAa,mBAAmB;;EAGpD"}
|