susee 1.0.4 → 1.5.0

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  <!-- markdownlint-disable MD041 -->
3
3
  <div align="center">
4
4
  <img src="https://susee.phothin.dev/logo/susee.webp" width="160" height="160" alt="susee" />
5
- <h1>susee</h1>
5
+ <h1>Susee</h1>
6
6
  </div>
7
7
  <!-- markdownlint-enable MD033 -->
8
8
 
@@ -10,44 +10,49 @@
10
10
 
11
11
  ## Overview
12
12
 
13
- `susee` is a TypeScript bundler that processes a package's local dependency tree and emits compiled artifacts in multiple module formats. Unlike general-purpose bundlers that target browser environments or bundle `node_modules`, `susee` focuses on library authorship: it collates local TypeScript files, merges them into cohesive bundles, compiles them through the TypeScript compiler, and generates properly formatted outputs for consumption as npm packages.
13
+ Susee is a simple TypeScript bundler for library packages.
14
14
 
15
- ## Key Features
15
+ It reads your project entry points from `susee.config.*`, builds a dependency graph,
16
+ bundles each entry into a single source unit, and compiles outputs to ESM and/or CommonJS
17
+ with declaration files.
16
18
 
17
- 1. **Dependency Tree Resolution** : automatically resolves and collects local TypeScript dependencies starting from specified entry points.
19
+ ### What It Does
18
20
 
19
- 2. **Dual-Format Module Output** : generates outputs for both ESM and CommonJS module systems from a single TypeScript source.
21
+ - Loads config from one of:
22
+ - `susee.config.ts`
23
+ - `susee.config.js`
24
+ - `susee.config.mjs`
25
+ - Resolves dependencies from each configured `entry`.
26
+ - Validates code with TypeScript before bundling.
27
+ - Bundles dependency files + entry file in dependency order.
28
+ - Compiles to:
29
+ - ESM (`.mjs`, `.d.mts`, source maps)
30
+ - CommonJS (`.cjs`, `.d.cts`, source maps)
31
+ - Optionally updates `package.json` fields (`main`, `module`, `types`, `exports`).
20
32
 
21
- 3. **File Extension Conventions** : dual-emit conventions for unambiguous module format identification.
33
+ ### Current Constraints
22
34
 
23
- | Module Format | JavaScript Extension | Type Definition Extension |
24
- | ------------- | -------------------- | ------------------------- |
25
- | ESM | `.mjs` | `.d.mts` |
26
- | CommonJS | `.cjs` | `.d.cts` |
27
-
28
- 4. **Automatic package.json Management** : conditionally updates package.json fields based on compilation outputs, this feature is controlled by the `allowUpdatePackageJson` boolean in `SuSeeConfig`.
35
+ - CommonJS dependencies inside the source graph are rejected unless handled by a plugin.
36
+ - JSX/TSX dependencies are currently rejected.
37
+ - CLI supports only:
38
+ - `susee`
39
+ - `susee --init`
29
40
 
30
41
  ## Installation
31
42
 
32
- Install as a development dependency :
33
-
34
43
  ```bash
35
- npm install susee --save-dev
36
- ```
37
-
38
- Global install:
39
-
40
- ```bash
41
- npm install -g susee
44
+ npm i -D susee typescript
42
45
  ```
43
46
 
44
47
  ## Quick Start
45
48
 
46
- The `susee` CLI binary is exposed through the `bin` field and becomes available immediately after installation.
49
+ 1. Create config:
47
50
 
48
- ### Creating a Minimal Configuration
51
+ ```bash
52
+ npx susee --init
53
+ ```
49
54
 
50
- Create a file named `susee.config.ts` in your project root:
55
+ 1. Edit `susee.config.ts`:
51
56
 
52
57
  ```ts
53
58
  import type { SuSeeConfig } from "susee";
@@ -57,162 +62,111 @@ const config: SuSeeConfig = {
57
62
  {
58
63
  entry: "src/index.ts",
59
64
  exportPath: ".",
60
- format: "both",
65
+ format: ["esm", "commonjs"],
61
66
  },
62
67
  ],
68
+ outDir: "dist",
69
+ allowUpdatePackageJson: true,
63
70
  };
64
71
 
65
72
  export default config;
66
73
  ```
67
74
 
68
- ### Running Your First Build
69
-
70
- Execute the bundler using one of these methods:
71
-
72
- #### CLI Execution
73
-
74
- with `npx` :
75
+ 1. Run build:
75
76
 
76
77
  ```bash
77
78
  npx susee
78
79
  ```
79
80
 
80
- via `package.json` :
81
-
82
- ```json
83
- {
84
- "scripts": {
85
- "build": "susee"
86
- }
87
- }
88
- ```
89
-
90
- ```bash
91
- npm run build
92
- ```
81
+ ## Config Reference
93
82
 
94
- for global :
83
+ `SuSeeConfig`
95
84
 
96
- ```bash
97
- susee
85
+ ```ts
86
+ interface SuSeeConfig {
87
+ entryPoints: EntryPoint[];
88
+ outDir?: string; // default: "dist"
89
+ plugins?: (SuseePlugin | SuseePluginFunction)[]; // default: []
90
+ allowUpdatePackageJson?: boolean; // default: false
91
+ }
98
92
  ```
99
93
 
100
- #### Programmatic Execution
94
+ `EntryPoint`
101
95
 
102
96
  ```ts
103
- import { susee } from "susee";
104
-
105
- await susee();
97
+ type OutputFormat = ("commonjs" | "esm")[];
98
+
99
+ interface EntryPoint {
100
+ entry: string;
101
+ exportPath: "." | `./${string}`;
102
+ format?: OutputFormat; // default: ["esm"]
103
+ tsconfigFilePath?: string;
104
+ renameDuplicates?: boolean; // default: true
105
+ }
106
106
  ```
107
107
 
108
- The `susee()` function is an asynchronous operation that:
109
-
110
- 1. Loads configuration from `susee.config.ts`
111
- 2. Resolves the dependency tree
112
- 3. Bundles local dependencies
113
- 4. Compiles to target formats
114
- 5. Optionally updates `package.json`
115
-
116
- ## Configuration summary
117
-
118
- ### Top-Level Configuration Fields
108
+ ### Entry Validation Rules
119
109
 
120
- #### entryPoints
110
+ - At least one `entryPoint` is required.
111
+ - Duplicate `exportPath` values are rejected.
112
+ - Each `entry` file must exist.
121
113
 
122
- An array of [EntryPoint](#entrypoint-structure) objects defining the files to bundle. Each entry point represents a separate bundling operation with its own entry file, export path, and output configuration. The array must contain at least one entry point.
114
+ ### TypeScript Options Behavior
123
115
 
124
- #### plugins (optional)
116
+ For each entry point, Susee builds compiler options from:
125
117
 
126
- An optional array of plugin instances that provide transformation hooks. Plugins can be objects or factory functions and execute at different stages of the bundling pipeline (dependency, pre-process, post-process). Defaults to `[]` if not specified.
118
+ 1. `tsconfigFilePath` (if provided)
119
+ 2. project `tsconfig.json`
120
+ 3. Susee defaults
127
121
 
128
- #### allowUpdatePackageJson (optional)
122
+ Susee enforces/adjusts key options internally:
129
123
 
130
- Controls whether `susee` automatically updates the `package.json` file with generated `exports`, `main` fields, and `module` fields. When `true`, susee modifies the `package.json` to reflect the bundled outputs. When `false`, `package.json` remains unchanged.
131
- Defaults to `true` if not specified.
124
+ - `moduleResolution: "NodeNext"`
125
+ - `allowJs: true`
126
+ - `outDir` set per entry output path
127
+ - ensures `types` includes `node`
128
+ - ensures `lib` includes `ESNext`
132
129
 
133
- #### outDir (optional)
130
+ ## Plugin Hooks
134
131
 
135
- Specifies the base output directory where compiled files are written. This can be overridden per entry point if needed (though the current implementation uses a global outDir). Defaults to `"dist"` if not specified.
132
+ Susee supports plugin stages used in the pipeline:
136
133
 
137
- ### EntryPoint Structure
134
+ - `dependency`
135
+ - receives resolved dependency files and compiler options
136
+ - can transform dependency metadata/content before bundling
137
+ - `pre-process`
138
+ - receives bundled code (string) before compilation
139
+ - `post-process`
140
+ - receives emitted JS file content per output file
138
141
 
139
- Each entry point in the [entryPoints](#entrypoints) array defines a separate bundling target. The EntryPoint interface specifies the following fields:
142
+ Both sync and async plugins are supported.
140
143
 
141
- **entry**: The file path to the TypeScript entry file. This path is validated during configuration loading to ensure the file exists
144
+ ## Output Behavior
142
145
 
143
- **exportPath**: The package export path where this bundle will be exposed. Use "." for the main package export, or subpath like "./config" for additional exports. Duplicate export paths across entry points are not allowed and will cause validation failure.
146
+ - `format: ["esm"]`
147
+ - emits `.mjs` and `.d.mts`
148
+ - `format: ["commonjs"]`
149
+ - emits `.cjs` and `.d.cts`
150
+ - `format: ["esm", "commonjs"]`
151
+ - emits both sets
144
152
 
145
- **format (optional)**: Determines which module format(s), `commonjs`,`esm` or both `esm`and `commonjs` to generate.
146
- Defaults to `esm` if not specified.
153
+ When `allowUpdatePackageJson` is `true`, Susee can update:
147
154
 
148
- **tsconfigFilePath (optional)**: Optional path to a custom TypeScript configuration file for this specific entry point. If not specified, susee will resolve for TypesScript compiler options as follow :
155
+ - `type` (set to `module`)
156
+ - `main`
157
+ - `module`
158
+ - `types`
159
+ - `exports` (including subpath exports from `exportPath`)
149
160
 
150
- Priority -
151
-
152
- 1. this custom `tsconfig.json`
153
-
154
- 2. `tsconfig.json` at root directory
155
-
156
- 3. default compiler options of `susee`
157
-
158
- Notes: You can control TypesScript compiler options from `tsconfig.json` except , `rootDir` , `outDir`,`module`.
159
-
160
- **renameDuplicates (optional)**: Controls whether susee automatically renames duplicate identifiers during the bundling process to avoid naming conflicts when merging files.(default to `true`).If you want to rename your self set to `false`, process will exit with code-1 and print where duplicate found.
161
-
162
- ## Plugins
163
-
164
- Plugins in the ecosystem have three common types:
165
-
166
- - `dependency` — transform dependency list before bundling
167
- - `pre-process` — modify the joined bundle text before compilation
168
- - `post-process` — modify emitted output files
169
-
170
- Plugins may be provided as objects or factories (functions returning the plugin). They may be synchronous or async — the bundler handles both.
171
-
172
- ## package.json updates
173
-
174
- When `allowUpdatePackageJson` is enabled, susee will:
175
-
176
- - set `type` to `module` (to ensure ESM compatibility)
177
- - add/update `main`, `module`, `types` and `exports` for the main export when building the package root
178
- - merge subpath exports for non-root `exportPath`s without overwriting unrelated exports
179
-
180
- Output file name hints (produced by the compiler):
181
-
182
- - ESM JS -> `.mjs`
183
- - ESM types -> `.d.mts`
184
- - CJS JS -> `.cjs`
185
- - CJS types -> `.d.cts`
186
-
187
- ## Limitations & notes
188
-
189
- - The bundler only processes local TypeScript files and does not bundle `node_modules` packages.
190
- - The entry file should be an ESM-compatible TypeScript file.
191
- - Exports from the entry file are not removed — only dependency exports may be stripped during bundling.
192
-
193
- ## Roadmap
194
-
195
- Current environment support:
196
-
197
- - Node.js only.
198
-
199
- Planned work:
200
-
201
- - [ ] Add first-class support for Deno environments.
202
- - [ ] Add browser-oriented library build support.
203
- - [ ] Improve workflows for building React-related libraries.
204
-
205
- ## Contributing and tests
206
-
207
- See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution workflow, pull request checklist, and development guidelines.
208
-
209
- - Build and run tests with the repo scripts (see `package.json`):
161
+ ## CLI
210
162
 
211
163
  ```bash
212
- npm run build
213
- npm test
164
+ susee
165
+ susee --init
214
166
  ```
215
167
 
168
+ Any other argument combination exits with an error.
169
+
216
170
  ## License
217
171
 
218
172
  [Apache-2.0][license] © [Pho Thin Maung][ptm]
@@ -220,4 +174,4 @@ npm test
220
174
  <!-- markdownlint-disable MD053 -->
221
175
 
222
176
  [license]: LICENSE
223
- [ptm]: https://github.com/phothinmg
177
+ [ptm]: https://github.com/phothinmg
package/bin/index.mjs CHANGED
@@ -1,3 +1,18 @@
1
1
  #!/usr/bin/env node
2
- import {susee} from "../dist/index.mjs";
3
- await susee();
2
+ import process from "node:process";
3
+ import init from "./init.mjs";
4
+ import { susee } from "../dist/index.mjs";
5
+
6
+ async function suseeBuild() {
7
+ const args = process.argv.slice(2);
8
+ if (args.length === 0) {
9
+ await susee();
10
+ } else if (args.length === 1 && args[0] === "--init") {
11
+ await init();
12
+ } else {
13
+ console.error("Unknown CLI usage");
14
+ process.exit(1);
15
+ }
16
+ }
17
+
18
+ await suseeBuild();
package/bin/init.mjs ADDED
@@ -0,0 +1,51 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+
4
+ export default async function init() {
5
+ const configFile = "susee.config.ts";
6
+ const configFilePath = path.resolve(process.cwd(), configFile);
7
+ const fileText = String.raw`
8
+ import type { SuSeeConfig } from "susee";
9
+
10
+ export default {
11
+ // array of entryPoint objects.
12
+ // ----------------------------
13
+ entryPoints: [
14
+ // you can add more entryPoints for different exportPaths
15
+ // NOTE : duplicate export paths are not allow.
16
+ // --------------------------------------------
17
+ {
18
+ // (required) entry file path
19
+ entry: "src/index.ts", // replace with your entry file
20
+ // (required) export path of this entry
21
+ exportPath: ".", // "." stand for main export path , can be set like "./foo","./bar"
22
+ // (optional) output module formats ["commonjs"] or ["esm","commonjs"] , default : ["esm"].
23
+ // Uncomment the following line to edit.
24
+ //format: ["esm"],
25
+ // (optional) replace duplicated declaration , default : true.
26
+ // Uncomment the following line to edit.
27
+ //renameDuplicates: true,
28
+ // (optional) custom tsconfig.json path , default : undefined.
29
+ // Uncomment the following line to edit.
30
+ //tsconfigFilePath: undefined,
31
+ },
32
+ ],
33
+ // NOTE : the following options are effect on all entryPoints
34
+ // ----------------------------------------------------------
35
+ // (optional) out directory , default : dist.
36
+ // Uncomment the following line to edit.
37
+ //outDir: "dist",
38
+ // (optional) array of susee plugins , default : [].
39
+ // Uncomment the following line to edit.
40
+ //plugins: [],
41
+ // (optional) allow susee to update your package.json , default : false.
42
+ // Uncomment the following line to edit.
43
+ //allowUpdatePackageJson: false,
44
+ } as SuSeeConfig;
45
+ `.trim();
46
+ if (fs.existsSync(configFilePath)) {
47
+ await fs.promises.unlink(configFilePath);
48
+ }
49
+ await fs.promises.writeFile(configFilePath, fileText);
50
+ console.info(`Susee config file is created at ${configFilePath}.`);
51
+ }
package/dist/index.cjs CHANGED
@@ -5,4 +5,4 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
5
5
  this file except in compliance with the License. You may obtain a copy of the
6
6
  License at http://www.apache.org/licenses/LICENSE-2.0
7
7
  ***************************************************************************** */
8
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var a=Object.getOwnPropertyDescriptor(t,i);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,a)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var s=e(t),a=0;a<s.length;a++)"default"!==s[a]&&__createBinding(i,t,s[a]);return __setModuleDefault(i,t),i}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.susee=susee;const tsconfig_1=__importDefault(require("@suseejs/tsconfig")),node_fs_1=__importDefault(require("node:fs")),mhaehko_1=__importDefault(require("mhaehko")),node_path_1=__importDefault(require("node:path")),resolves_1=__importDefault(require("@phothinmaung/resolves")),tcolor_1=__importDefault(require("@suseejs/tcolor")),transformer_1=__importDefault(require("@suseejs/transformer")),typescript_1=__importDefault(require("typescript")),node_buffer_1=require("node:buffer"),depHooks=[],preProcessHooks=[];var utilities;!function(e){e.splitCamelCase=function(e){return e.replace(/([a-z])([A-Z])/g,"$1 $2").replace(/(_|-|\/)([a-z] || [A-Z])/g," ").replace(/([A-Z])/g,e=>e.toLowerCase()).replace(/^([a-z])/,e=>e.toUpperCase())},e.wait=e=>new Promise(t=>setTimeout(t,e)),e.checkModuleType=(e,t)=>{let i=0,s=0,a=0;try{let r=!1,n=!1;function o(t){if((typescript_1.default.isImportDeclaration(t)||typescript_1.default.isImportEqualsDeclaration(t)||typescript_1.default.isExportDeclaration(t)||typescript_1.default.isExportSpecifier(t)||typescript_1.default.isExportAssignment(t))&&(r=!0),(typescript_1.default.isVariableStatement(t)||typescript_1.default.isFunctionDeclaration(t)||typescript_1.default.isInterfaceDeclaration(t)||typescript_1.default.isTypeAliasDeclaration(t)||typescript_1.default.isEnumDeclaration(t)||typescript_1.default.isClassDeclaration(t))&&t.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)&&(r=!0),typescript_1.default.isCallExpression(t)&&typescript_1.default.isIdentifier(t.expression)&&"require"===t.expression.text&&t.arguments.length>0&&(n=!0),typescript_1.default.isPropertyAccessExpression(t)){const i=t.getText(e);(i.startsWith("module.exports")||i.startsWith("exports."))&&(n=!0)}typescript_1.default.forEachChild(t,o)}o(e),r&&!n?i++:n&&!r?s++:r&&n&&i++}catch(c){console.error(tcolor_1.default.magenta(`Error checking module format for ${t} : \n ${c}`)),a++}return a>0&&(console.error(tcolor_1.default.magenta("Error checking module format.")),typescript_1.default.sys.exit(1)),{isCommonJs:s>0,isEsm:i>0}},e.isJsxContent=function(e){const t=typescript_1.default.createSourceFile("file.tsx",e,typescript_1.default.ScriptTarget.Latest,!0,typescript_1.default.ScriptKind.TSX);let i=!1;return function e(t){typescript_1.default.isJsxElement(t)||typescript_1.default.isJsxSelfClosingElement(t)||typescript_1.default.isJsxFragment(t)?i=!0:typescript_1.default.forEachChild(t,e)}(t),i},e.writeCompileFile=async function(t,i){const s=typescript_1.default.sys.resolvePath(t),a=node_path_1.default.dirname(s);typescript_1.default.sys.directoryExists(a)||await node_fs_1.default.promises.mkdir(a,{recursive:!0}),await e.wait(500),await node_fs_1.default.promises.writeFile(s,i)},e.isInsideNamespace=e=>{let t=e.parent;for(;t;){if(typescript_1.default.isModuleDeclaration(t)&&t.flags===typescript_1.default.NodeFlags.Namespace)return!0;t=t.parent}return!1},e.clearFolder=async function(e){e=node_path_1.default.resolve(process.cwd(),e);try{const t=await node_fs_1.default.promises.readdir(e,{withFileTypes:!0});await Promise.all(t.map(t=>node_fs_1.default.promises.rm(node_path_1.default.join(e,t.name),{recursive:!0})))}catch(e){if("ENOENT"!==e.code)throw e}}}(utilities||(utilities={}));const getConfigPath=()=>{const e=["susee.config.ts","susee.config.js","susee.config.mjs"];let t;for(const i of e){const e=typescript_1.default.sys.resolvePath(i);if(typescript_1.default.sys.fileExists(e)){t=e;break}}return t};function checkEntries(e){e.length<1&&(console.error(tcolor_1.default.magenta("No entry found in susee.config file, at least one entry required")),typescript_1.default.sys.exit(1));const t={},i=[];for(const s of e){const e=s.exportPath;t[e]?i.push(`"${e}"`):t[e]=!0}i.length>0&&(console.error(tcolor_1.default.magenta(`Duplicate export paths/path (${i.join(",")}) found in your susee.config file , that will error for bundled output`)),typescript_1.default.sys.exit(1));for(const t of e)typescript_1.default.sys.fileExists(typescript_1.default.sys.resolvePath(t.entry))||(console.error(tcolor_1.default.magenta(`Entry file ${t.entry} dose not exists.`)),typescript_1.default.sys.exit(1))}async function finalSuseeConfig(){const e=getConfigPath();void 0===e&&(console.error(tcolor_1.default.magenta('No susee.config file ("susee.config.ts", "susee.config.js", "susee.config.mjs") found')),typescript_1.default.sys.exit(1));const t=(await Promise.resolve(`${e}`).then(e=>__importStar(require(e)))).default,i=(0,resolves_1.default)([[checkEntries,t.entryPoints]]);await i.series(),await utilities.wait(1e3);const s=t.outDir??"dist",a=[];for(const e of t.entryPoints){const t={entry:e.entry,exportPath:e.exportPath,format:e.format??"esm",tsconfigFilePath:e.tsconfigFilePath??void 0,renameDuplicates:e.renameDuplicates??!0,outDirPath:"."===e.exportPath?s:`${s}${e.exportPath.slice(1)}`};a.push(t)}return{points:a,plugins:t.plugins??[],allowUpdatePackageJson:t.allowUpdatePackageJson??!0,outDir:s}}class CompilerOptions{constructor(e){this._point=e,this._options={}}__init(){const e=new tsconfig_1.default(this._point.tsconfigFilePath);e.removeCompilerOption("rootDir"),e.removeCompilerOption("module"),e.editCompilerOptions({moduleResolution:typescript_1.default.ModuleResolutionKind.NodeNext,outDir:this._point.outDirPath,allowJs:!0}),this._options=e.getCompilerOptions()}__init2(){this.__init();let{types:e,lib:t,...i}=this._options;return e?e.includes("node")||(e=["node",...e]):e=["node"],t=t?[...new Set(["ESNext",...t])]:["ESNext"],{types:e,lib:t,...i}}get commonjs(){const e=this.__init2(),{module:t,...i}=e;return{module:typescript_1.default.ModuleKind.CommonJS,...i}}get esm(){const e=this.__init2(),{module:t,...i}=e;return{module:typescript_1.default.ModuleKind.ES2020,...i}}get default(){return this.__init2()}}function compilerOptions(e){return new CompilerOptions(e)}async function fileSizes(e){const t=await node_fs_1.default.promises.stat(e);return{logical:t.size,allocated:null!==t.blocks?512*t.blocks:null}}const checkExport=(e,t)=>!!(e.match(/export default .*/gm)||e.match(/export = .*/gm)&&t.match(/.cts/g));async function generateDependencies(e){const t=(await(0,mhaehko_1.default)(e)).sort(),i=[];for(const e of t){const t=typescript_1.default.sys.resolvePath(e),s=await node_fs_1.default.promises.readFile(t,"utf8"),a=node_path_1.default.extname(t),r=await fileSizes(t),n=s.length,o=checkExport(s,t),c=typescript_1.default.createSourceFile(t,s,typescript_1.default.ScriptTarget.Latest,!0),p=utilities.checkModuleType(c,t).isCommonJs?"cjs":"esm",l={file:t,content:s,length:n,includeDefExport:o,size:{logical:r.logical,allocated:r.allocated,utf8:(new TextEncoder).encode(s).length,buffBytes:node_buffer_1.Buffer.byteLength(s,"utf8")},moduleType:p,fileExt:a,isJsx:utilities.isJsxContent(s)};i.push(l)}return i}function _typesCheck(e,t){if(!t.noCheck){const i=e.map(e=>e.file);let s=!1;const a=typescript_1.default.createProgram(i,t);for(const e of i){const t=a.getSourceFile(e);t||(console.error(tcolor_1.default.magenta(`File not found: ${e}`)),typescript_1.default.sys.exit(1));const i=[...a.getSyntacticDiagnostics(t),...a.getSemanticDiagnostics(t),...a.getDeclarationDiagnostics(t)];if(i.length>0){const e={getCurrentDirectory:()=>process.cwd(),getCanonicalFileName:e=>e,getNewLine:()=>typescript_1.default.sys.newLine};console.error(typescript_1.default.formatDiagnosticsWithColorAndContext(i,e)),s=!0}}if(!s)return!0;typescript_1.default.sys.exit(1)}}async function typeCheck(e,t){const i=(0,resolves_1.default)([[_typesCheck,e,t]]);return(await i.series())[0]}async function depPluginParser(e,t,i){if(t.length)for(const s of t){const t="function"==typeof s?s():s;"dependency"===t.type&&(e=t.async?await t.func(e,i):t.func(e,i))}return e}async function depHookParser(e,t){if(depHooks.length)for(const i of depHooks)e=i.async?await i.func(e,t):i.func(e,t);return e}async function initializer(){console.time(`${tcolor_1.default.cyan("Collected Data")}`);const e=await finalSuseeConfig(),t=e.points,i=e.plugins,s=[];for(const e of t){const t=compilerOptions(e);let a=await generateDependencies(e.entry);await typeCheck(a,t.esm)||typescript_1.default.sys.exit(1),a=await depPluginParser(a,i,t.default),await utilities.wait(1e3),a=await depHookParser(a,t.default),await utilities.wait(1e3);const r={fileName:e.entry,exportPath:e.exportPath,format:e.format,rename:e.renameDuplicates,outDir:e.outDirPath,tsOptions:{cjs:t.commonjs,esm:t.esm,default:t.default},depFiles:a,plugins:i};s.push(r)}return console.timeEnd(`${tcolor_1.default.cyan("Collected Data")}`),{points:s,allowUpdatePackageJson:e.allowUpdatePackageJson}}function uniqueName(){const e=new Map,t={setPrefix({key:i,value:s}){if(e.has(i))throw console.warn(`${i} already exist`),new Error;return e.set(i,[s,0]),t},getName(t,i){const[s,a]=e.get(t)||[],r=s?`${s}${i}_${(a??0)+1}`:`$nyein${i}_${(a??0)+1}`;return e.set(t,[s??"$nyein",(a??0)+1]),r},getPrefix(t){const[i]=e.get(t)||[];return i}};return t}const exportDefaultExportNameMap=[],exportDefaultImportNameMap=[],prefixKey="AnonymousName",genName=uniqueName().setPrefix({key:prefixKey,value:"__anonymous__"});function anonymousCallExpressionHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=a=>{if(typescript_1.default.isCallExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateCallExpression(a,i.createIdentifier(s.newName),a.typeArguments,a.arguments)}}else if(typescript_1.default.isPropertyAccessExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updatePropertyAccessExpression(a,i.createIdentifier(s.newName),a.name)}}else if(typescript_1.default.isNewExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateNewExpression(a,i.createIdentifier(s.newName),a.typeArguments,a.arguments)}}else if(typescript_1.default.isExportSpecifier(a)&&typescript_1.default.isIdentifier(a.name)){const e=a.name.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateExportSpecifier(a,a.isTypeOnly,a.propertyName,i.createIdentifier(s.newName))}return typescript_1.default.visitEachChild(a,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}function anonymousExportHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=r=>{const n=node_path_1.default.basename(t).split(".")[0];if((typescript_1.default.isFunctionDeclaration(r)||typescript_1.default.isClassDeclaration(r))&&void 0===r.name){let e=!1,t=!1;if(r.modifiers?.forEach(i=>{i.kind===typescript_1.default.SyntaxKind.ExportKeyword&&(e=!0),i.kind===typescript_1.default.SyntaxKind.DefaultKeyword&&(t=!0)}),e&&t){const e=genName.getName(prefixKey,n);if(exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),typescript_1.default.isFunctionDeclaration(r))return i.updateFunctionDeclaration(r,r.modifiers,r.asteriskToken,i.createIdentifier(e),r.typeParameters,r.parameters,r.type,r.body);if(typescript_1.default.isClassDeclaration(r))return i.updateClassDeclaration(r,r.modifiers,i.createIdentifier(e),r.typeParameters,r.heritageClauses,r.members)}}else if(typescript_1.default.isExportAssignment(r)&&!r.name&&!r.isExportEquals){if(typescript_1.default.isArrowFunction(r.expression)){const e=genName.getName(prefixKey,n),t=i.createArrowFunction(r.expression.modifiers,r.expression.typeParameters,r.expression.parameters,r.expression.type,r.expression.equalsGreaterThanToken,r.expression.body),s=i.createVariableDeclaration(i.createIdentifier(e),r.expression.exclamationToken,r.expression.type,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),c=i.createVariableStatement(r.expression.modifiers,o),p=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[c,p],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isObjectLiteralExpression(r.expression)){const e=genName.getName(prefixKey,n),t=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,r.expression),s=i.createVariableDeclarationList([t],typescript_1.default.NodeFlags.Const),o=i.createVariableStatement(void 0,s),c=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[o,c],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isArrayLiteralExpression(r.expression)){const e=genName.getName(prefixKey,n),t=i.createArrayLiteralExpression(r.expression.elements,!0),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),c=i.createVariableStatement(void 0,o),p=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[c,p],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isStringLiteral(r.expression)){const e=genName.getName(prefixKey,n),t=i.createStringLiteral(r.expression.text),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),c=i.createVariableStatement(void 0,o),p=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[c,p],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isNumericLiteral(r.expression)){const e=genName.getName(prefixKey,n),t=i.createNumericLiteral(r.expression.text),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),c=i.createVariableStatement(void 0,o),p=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[c,p],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}}return typescript_1.default.visitEachChild(r,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}function anonymousImportHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=r=>{if(typescript_1.default.isImportDeclaration(r)){const e=r.moduleSpecifier.getText(a),s=node_path_1.default.basename(e).split(".")[0].trim();if(r.importClause?.name&&typescript_1.default.isIdentifier(r.importClause.name)){const e=r.importClause.name.text.trim(),a=exportDefaultExportNameMap.find(e=>e.file===s);if(a){exportDefaultImportNameMap.push({base:e,file:t,newName:a.newName,isEd:!0});const s=i.updateImportClause(r.importClause,r.importClause.phaseModifier,i.createIdentifier(a.newName),r.importClause.namedBindings);return i.updateImportDeclaration(r,r.modifiers,s,r.moduleSpecifier,r.attributes)}}}return typescript_1.default.visitEachChild(r,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}const anonymousHandler=async(e,t)=>{const i=(0,resolves_1.default)([[anonymousExportHandler,t],[anonymousImportHandler,t],[anonymousCallExpressionHandler,t]]),s=await i.concurrent();for(const t of s)e=e.map(t);return e};function duplicates(e,t,i){const s=typescript_1.default.createSourceFile(t,e,typescript_1.default.ScriptTarget.Latest,!0),a=new Map;for(const e of s.statements){if(!typescript_1.default.isImportDeclaration(e)||!e.importClause)continue;const t=e.importClause;if(t.name&&typescript_1.default.isIdentifier(t.name)){const e=t.name.text;a.set(e,(a.get(e)||[]).concat({name:e,node:t}))}else if(t.namedBindings&&typescript_1.default.isNamespaceImport(t.namedBindings)&&typescript_1.default.isIdentifier(t.namedBindings.name)){const e=t.namedBindings.name.text;a.set(e,(a.get(e)||[]).concat({name:e,node:t.namedBindings}))}else if(t.namedBindings&&typescript_1.default.isNamedImports(t.namedBindings))for(const e of t.namedBindings.elements)if(typescript_1.default.isIdentifier(e.name)){const t=e.name.text;a.set(t,(a.get(t)||[]).concat({name:t,node:e}))}}const r=new Map,n=uniqueName();n.setPrefix({key:"DuplicateImport",value:"__dup__"});for(const[e,t]of a.entries())if(t.length>1)for(let i=1;i<t.length;i++){const t=n.getName("DuplicateImport",`${e}_`);r.set(`${e}::${i}`,t),r.set(`${e}::occurrence_${i}`,t)}const o=new Map;for(const[e,t]of a.entries())if(t.length>1)for(let i=1;i<t.length;i++){const s=t[i];s?.node&&o.set(s.node.pos,r.get(`${e}::${i}`))}return(0,transformer_1.default)(e=>{const{factory:t}=e,i=s=>{if(typescript_1.default.isImportDeclaration(s)&&s.importClause){const e=s.importClause;let i=!1,a=e;if(e.name&&typescript_1.default.isIdentifier(e.name)){e.pos;const s=o.get(e.pos);s&&(a=t.updateImportClause(e,e.isTypeOnly,t.createIdentifier(s),e.namedBindings),i=!0)}if(e.namedBindings&&typescript_1.default.isNamespaceImport(e.namedBindings)&&typescript_1.default.isIdentifier(e.namedBindings.name)){const s=o.get(e.namedBindings.pos);if(s){const e=t.createNamespaceImport(t.createIdentifier(s));a=t.updateImportClause(a,a.isTypeOnly,a.name,e),i=!0}}if(e.namedBindings&&typescript_1.default.isNamedImports(e.namedBindings)){const s=e.namedBindings.elements.map(e=>{if(typescript_1.default.isIdentifier(e.name)){const s=o.get(e.pos);if(s)return i=!0,t.updateImportSpecifier(e,e.isTypeOnly,e.propertyName,t.createIdentifier(s))}return e});if(i){const e=t.createNamedImports(s);a=t.updateImportClause(a,a.isTypeOnly,a.name,e)}}if(i)return t.updateImportDeclaration(s,s.modifiers,a,s.moduleSpecifier,s.assertClause)}if(typescript_1.default.isIdentifier(s)){const e=s.text;if(!(e=>{const t=e.parent;if(!t)return!1;switch(t.kind){case typescript_1.default.SyntaxKind.ImportSpecifier:case typescript_1.default.SyntaxKind.NamespaceImport:case typescript_1.default.SyntaxKind.ImportClause:case typescript_1.default.SyntaxKind.VariableDeclaration:case typescript_1.default.SyntaxKind.FunctionDeclaration:case typescript_1.default.SyntaxKind.ClassDeclaration:case typescript_1.default.SyntaxKind.InterfaceDeclaration:case typescript_1.default.SyntaxKind.TypeAliasDeclaration:case typescript_1.default.SyntaxKind.EnumDeclaration:case typescript_1.default.SyntaxKind.Parameter:case typescript_1.default.SyntaxKind.PropertyDeclaration:case typescript_1.default.SyntaxKind.MethodDeclaration:case typescript_1.default.SyntaxKind.BindingElement:return!0;default:return!1}})(s)){if(s.parent&&typescript_1.default.isPropertyAccessExpression(s.parent)&&s.parent.name===s)return s;const i=a.get(e);if(i&&i.length>1)for(let s=1;s<i.length;s++){const i=r.get(`${e}::occurrence_${s}`)||r.get(`${e}::${s}`);if(i)return t.createIdentifier(i)}}}return typescript_1.default.visitEachChild(s,i,e)};return e=>typescript_1.default.visitNode(e,i)},s,i)}function mergeImportsStatement(e){const t=new Map,i=new Map,s=new Map,a=new Map,r=new Map;for(const n of e){const e=n.match(/import\s+(?:type\s+)?(?:(.*?)\s+from\s+)?["']([^"']+)["'];?/);if(!e)continue;const[,o,c]=e,p=n.includes("import type"),l=c;if(!o){const e=n.match(/import\s+(?:type\s+)?(\w+)/);if(e){const t=e[1],i=p?a:s;i.has(l)||i.set(l,new Set),i.get(l)?.add(t)}continue}if(o.startsWith("{")){const e=p?i:t;e.has(l)||e.set(l,new Set);o.replace(/[{}]/g,"").split(",").map(e=>e.trim()).filter(Boolean).forEach(t=>e.get(l)?.add(t))}else if(o.startsWith("* as")){const e=o.match(/\*\s+as\s+(\w+)/);if(e){const t=e[1];r.has(l)||r.set(l,new Set),r.get(l)?.add(t)}}else{const e=p?a:s;e.has(l)||e.set(l,new Set),e.get(l)?.add(o.trim())}}const n=[];for(const[e,s]of t){const t=i.get(e)||new Set,a=new Set([...s]);for(const e of t)s.has(e)||a.add(e);if(a.size>0){const t=Array.from(a).sort().join(", ");n.push(`import { ${t} } from "${e}";`)}}for(const[e,s]of i)if(!t.has(e)&&s.size>0){const t=Array.from(s).sort().join(", ");n.push(`import type { ${t} } from "${e}";`)}for(const[e,t]of s){const i=a.get(e)||new Set,s=new Set([...t]);for(const e of i)t.has(e)||s.add(e);if(s.size>0){const t=Array.from(s).join(", ");n.push(`import ${t} from "${e}";`)}}for(const[e,t]of a)if(!s.has(e)&&t.size>0){const i=Array.from(t).join(", ");n.push(`import type ${i} from "${e}";`)}for(const[e,t]of r)if(t.size>0){const i=Array.from(t).join(", ");n.push(`import * as ${i} from "${e}";`)}return n.sort()}function esmExportRemoveHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0);return{file:t,content:(0,transformer_1.default)(e=>{const{factory:t}=e,i=s=>{if(!utilities.isInsideNamespace(s)&&(typescript_1.default.isFunctionDeclaration(s)||typescript_1.default.isClassDeclaration(s)||typescript_1.default.isInterfaceDeclaration(s)||typescript_1.default.isTypeAliasDeclaration(s)||typescript_1.default.isEnumDeclaration(s)||typescript_1.default.isVariableStatement(s))){const e=s.modifiers?.filter(e=>e.kind!==typescript_1.default.SyntaxKind.ExportKeyword&&e.kind!==typescript_1.default.SyntaxKind.DefaultKeyword);if(e?.length!==s.modifiers?.length){if(typescript_1.default.isFunctionDeclaration(s))return t.updateFunctionDeclaration(s,e,s.asteriskToken,s.name,s.typeParameters,s.parameters,s.type,s.body);if(typescript_1.default.isClassDeclaration(s))return t.updateClassDeclaration(s,e,s.name,s.typeParameters,s.heritageClauses,s.members);if(typescript_1.default.isInterfaceDeclaration(s))return t.updateInterfaceDeclaration(s,e,s.name,s.typeParameters,s.heritageClauses,s.members);if(typescript_1.default.isTypeAliasDeclaration(s))return t.updateTypeAliasDeclaration(s,e,s.name,s.typeParameters,s.type);if(typescript_1.default.isEnumDeclaration(s))return t.updateEnumDeclaration(s,e,s.name,s.members);if(typescript_1.default.isVariableStatement(s))return t.updateVariableStatement(s,e,s.declarationList)}}if(typescript_1.default.isExportDeclaration(s))return t.createEmptyStatement();if(typescript_1.default.isExportAssignment(s)){const e=s.expression;if(typescript_1.default.isIdentifier(e))return t.createEmptyStatement()}return typescript_1.default.visitEachChild(s,i,e)};return e=>typescript_1.default.visitNode(e,i)},a,e),...s}}}let properties=[];const typeObj={},typesNames=[];function findProperty(e){const t=[];return typescript_1.default.isPropertyAccessExpression(e)&&typescript_1.default.isIdentifier(e.expression)&&t.push(e.expression.text),e.forEachChild(e=>findProperty(e)),t}function importAllRemoveHandler(e,t){return({file:i,content:s,...a})=>{const r=typescript_1.default.createSourceFile(i,s,typescript_1.default.ScriptTarget.Latest,!0),n=new Set;for(const e of r.statements)if(typescript_1.default.isImportEqualsDeclaration(e)&&e.isTypeOnly){const t=e.moduleReference;typescript_1.default.isExternalModuleReference(t)&&typescript_1.default.isStringLiteral(t.expression)&&n.add(e.name.text)}const o=(0,transformer_1.default)(t=>{const{factory:s}=t,a=o=>{properties=[...properties,...findProperty(o)];const c={isNamespace:!1,isTypeOnly:!1,isTypeNamespace:!1,source:"",importedString:void 0,importedObject:void 0};if(typescript_1.default.isTypeReferenceNode(o)&&typescript_1.default.isQualifiedName(o.typeName)&&typescript_1.default.isIdentifier(o.typeName.left)&&typescript_1.default.isIdentifier(o.typeName.right)){const e=o.typeName.left.text,t=o.typeName.right.text;if(typesNames.push(e),e in typeObj?typeObj[e]?.push(t):typeObj[e]=[t],utilities.checkModuleType(r,i).isCommonJs&&"ts"!==e&&!n.has(e))return s.updateTypeReferenceNode(o,s.createIdentifier(t),void 0)}if(typescript_1.default.isImportDeclaration(o)){const t=o.getText(r);return e.push(t),s.createEmptyStatement()}if(typescript_1.default.isImportEqualsDeclaration(o)){const t=o.name.text,i=o.moduleReference;let a;if(o.isTypeOnly&&(c.isTypeOnly=!0),c.importedString=t,c.isTypeOnly||properties.includes(t)&&(c.isNamespace=!0),typescript_1.default.isExternalModuleReference(i)&&typescript_1.default.isStringLiteral(i.expression)&&(c.source=i.expression.text),c.importedString&&!c.importedObject&&(a=c.isTypeOnly?n.has(c.importedString)?`import type * as ${c.importedString} from "${c.source}";`:typesNames.includes(c.importedString)?`import type { ${typeObj[c.importedString]?.join(",")} } from "${c.source}";`:`import type ${c.importedString} from "${c.source}";`:c.isNamespace&&c.source&&"typescript"!==c.source?`import * as ${c.importedString} from "${c.source}";`:`import ${c.importedString} from "${c.source}";`),!c.importedString&&c.importedObject&&(a=`import { ${c.importedObject.join(", ")} } from "${c.source}";`),a)return e.push(a),s.createEmptyStatement()}if(typescript_1.default.isVariableStatement(o)){const t=o.declarationList.declarations;if(1===t.length){const i=t[0];if(i.initializer&&typescript_1.default.isCallExpression(i.initializer)&&typescript_1.default.isIdentifier(i.initializer.expression)&&"require"===i.initializer.expression.escapedText){const t=i.initializer.arguments[0];if(typescript_1.default.isStringLiteral(t)&&(c.source=t.text),typescript_1.default.isIdentifier(i.name)){const e=i.name.text;c.importedString=e,properties.includes(e)&&(c.isNamespace=!0)}else if(typescript_1.default.isObjectBindingPattern(i.name)){const e=[];for(const t of i.name.elements)typescript_1.default.isIdentifier(t.name)&&e.push(t.name.text);e.length>0&&(c.importedObject=e)}let a;if(c.importedString&&!c.importedObject&&(a=c.isNamespace?`import * as ${c.importedString} from "${c.source}";`:`import ${c.importedString} from "${c.source}";`),!c.importedString&&c.importedObject&&(a=`import { ${c.importedObject.join(", ")} } from "${c.source}";`),a)return e.push(a),s.createEmptyStatement()}}}return typescript_1.default.visitEachChild(o,a,t)};return e=>typescript_1.default.visitNode(e,a)},r,t);return{file:i,content:o,...a}}}const removeHandlers=async(e,t)=>{const i=(0,resolves_1.default)([[importAllRemoveHandler,e,t],[esmExportRemoveHandler,t]]);return await i.series()};function collectBindingNames(e,t){typescript_1.default.isIdentifier(e)?t.push(e.text):(typescript_1.default.isObjectBindingPattern(e)||typescript_1.default.isArrayBindingPattern(e))&&e.elements.forEach(e=>{typescript_1.default.isBindingElement(e)&&e.name&&collectBindingNames(e.name,t)})}function clearUnusedCode(e,t,i,s={treatExportsAsUsed:!0}){const a=typescript_1.default.createSourceFile(t,e,typescript_1.default.ScriptTarget.Latest,!0),r=new Map,n=new Set,o=(e,t=!1)=>{const i=r.get(e);r.set(e,{exported:!!i?.exported||t})},c=e=>{if(typescript_1.default.isImportDeclaration(e)&&e.importClause){const t=e.importClause;t.name&&typescript_1.default.isIdentifier(t.name)&&o(t.name.text,!1),t.namedBindings&&(typescript_1.default.isNamedImports(t.namedBindings)?t.namedBindings.elements.forEach(e=>{typescript_1.default.isImportSpecifier(e)&&typescript_1.default.isIdentifier(e.name)&&o(e.name.text,!1)}):typescript_1.default.isNamespaceImport(t.namedBindings)&&typescript_1.default.isIdentifier(t.namedBindings.name)&&o(t.namedBindings.name.text,!1))}else if(typescript_1.default.isImportEqualsDeclaration(e)&&typescript_1.default.isIdentifier(e.name))o(e.name.text,!1);else if(typescript_1.default.isVariableStatement(e)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;e.declarationList.declarations.forEach(e=>{collectBindingNames(e.name,[]);const i=[];collectBindingNames(e.name,i),i.forEach(e=>o(e,t))})}else if(typescript_1.default.isFunctionDeclaration(e)&&e.name&&typescript_1.default.isIdentifier(e.name)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;o(e.name.text,t)}else if(typescript_1.default.isClassDeclaration(e)&&e.name&&typescript_1.default.isIdentifier(e.name)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;o(e.name.text,t)}if(typescript_1.default.isIdentifier(e)){const t=e.parent;typescript_1.default.isVariableDeclaration(t)&&t.name===e||typescript_1.default.isFunctionDeclaration(t)&&t.name===e||typescript_1.default.isClassDeclaration(t)&&t.name===e||typescript_1.default.isImportClause(t)&&t.name===e||typescript_1.default.isImportSpecifier(t)&&t.name===e||typescript_1.default.isNamespaceImport(t)&&t.name===e||typescript_1.default.isBindingElement(t)&&t.name===e||typescript_1.default.isParameter(t)&&t.name===e||n.add(e.text)}typescript_1.default.forEachChild(e,c)};c(a);const p=new Set;r.forEach((e,t)=>{n.has(t)||s.treatExportsAsUsed&&e.exported||p.add(t)});return(0,transformer_1.default)(e=>{const t=i=>{if(typescript_1.default.isImportDeclaration(i)&&i.importClause){const e=i.importClause,t=e.name&&typescript_1.default.isIdentifier(e.name)?e.name.text:void 0;let s;const a=[];e.namedBindings&&(typescript_1.default.isNamedImports(e.namedBindings)?e.namedBindings.elements.forEach(e=>{typescript_1.default.isImportSpecifier(e)&&typescript_1.default.isIdentifier(e.name)&&a.push(e)}):typescript_1.default.isNamespaceImport(e.namedBindings)&&typescript_1.default.isIdentifier(e.namedBindings.name)&&(s=e.namedBindings.name.text));const r=!!t&&!p.has(t),n=!!s&&!p.has(s),o=a.filter(e=>!p.has(e.name.text));if(!r&&!n&&0===o.length)return typescript_1.default.factory.createNotEmittedStatement(i);if(!r&&!!e.name||void 0!==s&&!n||o.length!==a.length){let e;e=o.length>0?typescript_1.default.factory.createNamedImports(o):n&&s?typescript_1.default.factory.createNamespaceImport(typescript_1.default.factory.createIdentifier(s)):void 0;const a=r&&t?typescript_1.default.factory.createIdentifier(t):void 0,c=typescript_1.default.factory.createImportClause(!1,a,e);return typescript_1.default.factory.updateImportDeclaration(i,i.modifiers,c,i.moduleSpecifier,i.assertClause)}return i}if((typescript_1.default.isFunctionDeclaration(i)||typescript_1.default.isClassDeclaration(i))&&i.name&&typescript_1.default.isIdentifier(i.name))return p.has(i.name.text)?typescript_1.default.factory.createNotEmittedStatement(i):i;if(typescript_1.default.isVariableStatement(i)){const e=[];i.declarationList.declarations.forEach(t=>collectBindingNames(t.name,e));return e.some(e=>!p.has(e))?i:typescript_1.default.factory.createNotEmittedStatement(i)}return typescript_1.default.visitEachChild(i,t,e)};return e=>typescript_1.default.visitNode(e,t)},a,i)}async function preProcessPluginParser(e,t,i){if(e.length)for(const s of e){const e="function"==typeof s?s():s;"pre-process"===e.type&&(t=e.async?await e.func(t,i):e.func(t,i))}return t}async function preProcessHooksParser(e,t){if(preProcessHooks.length)for(const i of preProcessHooks)e=i.async?await i.func(e,t):i.func(e,t);return e}async function bundler(e){const t="."===e.exportPath?"Main":utilities.splitCamelCase(e.exportPath.slice(2));console.time(`${tcolor_1.default.cyan("Bundled")} -> ${tcolor_1.default.brightCyan(t)} ${tcolor_1.default.cyan("export path")}`);let i=e.depFiles;const s=e.rename,a=e.tsOptions.default,r=e.plugins;let n=[];i=await anonymousHandler(i,a);const o=await removeHandlers(n,a);i=i.map(o[0]);const c=i.slice(0,-1).map(o[1]),p=i.slice(-1),l=/["']((?!\.\/|\.\.\/)[^"']+)["']/;n=n.filter(e=>l.test(e)),n=mergeImportsStatement(n);let d=`${n.join("\n").trim()}\n${c.map(e=>`${`//${node_path_1.default.relative(process.cwd(),e.file)}`}\n${e.content}`).join("\n").trim()}\n${p.map(e=>`${`//${node_path_1.default.relative(process.cwd(),e.file)}`}\n${e.content}`).join("\n").trim()}`;return d=d.replace(/^s*;\s*$/gm,"").trim(),s&&(d=duplicates(d,e.fileName,a)),d=clearUnusedCode(d,e.fileName,a),d=await preProcessPluginParser(r,d),await utilities.wait(1e3),d=await preProcessHooksParser(d),await utilities.wait(1e3),console.timeEnd(`${tcolor_1.default.cyan("Bundled")} -> ${tcolor_1.default.brightCyan(t)} ${tcolor_1.default.cyan("export path")}`),{bundledContent:d,...e}}async function bundle(e){const t=[];for(const i of e.points){const e=await bundler(i);t.push(e)}return{points:t,allowUpdatePackageJson:e.allowUpdatePackageJson}}function createHost(e,t){const i={},s={getSourceFile:(i,s)=>{if(i===t)return typescript_1.default.createSourceFile(i,e,s)},writeFile:(e,t)=>{i[e]=t},getDefaultLibFileName:e=>typescript_1.default.getDefaultLibFilePath(e),getCurrentDirectory:()=>"",getDirectories:()=>[],fileExists:e=>e===t,readFile:i=>i===t?e:void 0,getCanonicalFileName:e=>e,useCaseSensitiveFileNames:()=>!0,getNewLine:()=>"\n"};return{createdFiles:i,host:s}}const isCjs=e=>e.commonjs&&e.commonjsTypes,isEsm=e=>e.esm&&e.esmTypes;function getExports(e,t){return isCjs(e)&&isEsm(e)?{[t]:{import:{types:`./${node_path_1.default.relative(process.cwd(),e.esmTypes)}`,default:`./${node_path_1.default.relative(process.cwd(),e.esm)}`},require:{types:`./${node_path_1.default.relative(process.cwd(),e.commonjsTypes)}`,default:`./${node_path_1.default.relative(process.cwd(),e.commonjs)}`}}}:isCjs(e)&&!isEsm(e)?{[t]:{require:{types:`./${node_path_1.default.relative(process.cwd(),e.commonjsTypes)}`,default:`./${node_path_1.default.relative(process.cwd(),e.commonjs)}`}}}:!isCjs(e)&&isEsm(e)?{[t]:{import:{types:`./${node_path_1.default.relative(process.cwd(),e.esmTypes)}`,default:`./${node_path_1.default.relative(process.cwd(),e.esm)}`}}}:{}}async function writePackage(e,t){let i=!0;"."!==t&&(i=!1);const s=typescript_1.default.sys.resolvePath("package.json"),a=node_fs_1.default.readFileSync(s,"utf8"),r=JSON.parse(a);let{name:n,version:o,description:c,main:p,module:l,type:d,types:f,exports:u,...m}=r;await utilities.wait(500),d="module";let y={},_={},g={},h={};if(i)y=e.main?{main:node_path_1.default.relative(process.cwd(),e.main)}:{},_=e.module?{module:node_path_1.default.relative(process.cwd(),e.module)}:{},g=e.types?{types:node_path_1.default.relative(process.cwd(),e.types)}:{},h={exports:{...getExports(e,t)}};else{y=p?{main:p}:{},_=l?{module:l}:{},g=f?{types:f}:{};h={exports:{...u&&"object"==typeof u&&!Array.isArray(u)?{...u}:{},...getExports(e,t)}}}await utilities.wait(1e3);const x={name:n,version:o,description:c,type:d,...y,...g,..._,...h,...m};utilities.writeCompileFile(s,JSON.stringify(x,null,2))}class Compiler{constructor(e){this.object=e,this.files={commonjs:void 0,commonjsTypes:void 0,esm:void 0,esmTypes:void 0,main:void 0,module:void 0,types:void 0}}_isUpdate(){return this.object.allowUpdatePackageJson}async _commonjs(e){const t="."===e.exportPath,i=t?"Main":utilities.splitCamelCase(e.exportPath.slice(2));console.time(`${tcolor_1.default.cyan("Compiled CJS")} -> ${tcolor_1.default.brightCyan(i)} ${tcolor_1.default.cyan("export path")}`);const s=e.fileName,a=e.bundledContent,r=e.format,n=e.plugins,o=e.tsOptions.cjs,c=createHost(a,s),p=c.createdFiles,l=c.host;typescript_1.default.createProgram([s],o,l).emit(),Object.entries(p).map(async([e,i])=>{if(".js"===node_path_1.default.extname(e)&&n.length)for(let t of n)t="function"==typeof t?t():t,"post-process"===t.type&&(i=t.async?await t.func(i,e):t.func(i,e));this._isUpdate()&&(e.match(/.js/g)&&(this.files.commonjs=e.replace(/.js/g,".cjs")),e.match(/.d.ts/g)&&(this.files.commonjsTypes=e.replace(/.d.ts/g,".d.cts")),!t||"both"!==r&&"commonjs"!==r||(this.files.commonjs&&(this.files.main=this.files.commonjs),this.files.commonjsTypes&&(this.files.types=this.files.commonjsTypes))),e=(e=(e=e.replace(/.js/g,".cjs")).replace(/.map.js/g,".map.cjs")).replace(/.d.ts/g,".d.cts"),await utilities.wait(500),"commonjs"===r&&await utilities.clearFolder(node_path_1.default.dirname(e)),await utilities.writeCompileFile(e,i)}),console.timeEnd(`${tcolor_1.default.cyan("Compiled CJS")} -> ${tcolor_1.default.brightCyan(i)} ${tcolor_1.default.cyan("export path")}`)}async _esm(e){const t="."===e.exportPath,i=t?"Main":utilities.splitCamelCase(e.exportPath.slice(2));console.time(`${tcolor_1.default.cyan("Compiled ESM")} -> ${tcolor_1.default.brightCyan(i)} ${tcolor_1.default.cyan("export path")}`);const s=e.fileName,a=e.bundledContent,r=e.format,n=e.plugins,o=e.tsOptions.esm,c=createHost(a,s),p=c.createdFiles,l=c.host;typescript_1.default.createProgram([s],o,l).emit(),Object.entries(p).map(async([e,i])=>{if(".js"===node_path_1.default.extname(e)&&n.length)for(let t of n)t="function"==typeof t?t():t,"post-process"===t.type&&(i=t.async?await t.func(i,e):t.func(i,e));this._isUpdate()&&(e.match(/.js/g)&&(this.files.esm=e.replace(/.js/g,".mjs")),e.match(/.d.ts/g)&&(this.files.esmTypes=e.replace(/.d.ts/g,".d.mts")),t&&"both"===r&&this.files.esm&&(this.files.module=this.files.esm)),e=(e=(e=e.replace(/.js/g,".mjs")).replace(/.map.js/g,".map.mjs")).replace(/.d.ts/g,".d.mts"),await utilities.wait(500),"commonjs"!==r&&await utilities.clearFolder(node_path_1.default.dirname(e)),await utilities.writeCompileFile(e,i)}),console.timeEnd(`${tcolor_1.default.cyan("Compiled ESM")} -> ${tcolor_1.default.brightCyan(i)} ${tcolor_1.default.cyan("export path")}`)}async compile(){for(const e of this.object.points){switch(await utilities.wait(500),e.format){case"commonjs":await this._commonjs(e),this._isUpdate()&&await writePackage(this.files,e.exportPath);break;case"esm":await this._esm(e),this._isUpdate()&&await writePackage(this.files,e.exportPath);break;case"both":await this._esm(e),await utilities.wait(1e3),await this._commonjs(e),this._isUpdate()&&await writePackage(this.files,e.exportPath)}await utilities.wait(500)}}}async function susee(){console.info(`${tcolor_1.default.cyan("Susee Started")} : `),console.time(`${tcolor_1.default.cyan("Susee Done")}`);const e=await initializer();await utilities.wait(1e3);const t=await bundle(e);await utilities.wait(1e3);const i=new Compiler(t);await i.compile(),console.timeEnd(`${tcolor_1.default.cyan("Susee Done")}`)}
8
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i);var a=Object.getOwnPropertyDescriptor(t,i);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,s,a)}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var s=e(t),a=0;a<s.length;a++)"default"!==s[a]&&__createBinding(i,t,s[a]);return __setModuleDefault(i,t),i}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.susee=susee;const tsconfig_1=__importDefault(require("@suseejs/tsconfig")),node_fs_1=__importDefault(require("node:fs")),mhaehko_1=__importDefault(require("mhaehko")),node_path_1=__importDefault(require("node:path")),node_process_1=__importDefault(require("node:process")),resolves_1=__importDefault(require("@suseejs/resolves")),tcolor_1=__importDefault(require("@suseejs/tcolor")),transformer_1=__importDefault(require("@suseejs/transformer")),typescript_1=__importDefault(require("typescript")),utils_1=__importDefault(require("@suseejs/utils")),node_buffer_1=require("node:buffer"),getConfigPath=()=>{const e=["susee.config.ts","susee.config.js","susee.config.mjs"];let t;for(const i of e){const e=typescript_1.default.sys.resolvePath(i);if(typescript_1.default.sys.fileExists(e)){t=e;break}}return t};function checkEntries(e){e.length<1&&(console.error(tcolor_1.default.magenta("No entry found in susee.config file, at least one entry required")),typescript_1.default.sys.exit(1));const t={},i=[];for(const s of e){const e=s.exportPath;t[e]?i.push(`"${e}"`):t[e]=!0}i.length>0&&(console.error(tcolor_1.default.magenta(`Duplicate export paths/path (${i.join(",")}) found in your susee.config file , that will error for bundled output`)),typescript_1.default.sys.exit(1));for(const t of e)typescript_1.default.sys.fileExists(typescript_1.default.sys.resolvePath(t.entry))||(console.error(tcolor_1.default.magenta(`Entry file ${t.entry} dose not exists.`)),typescript_1.default.sys.exit(1))}async function finalSuseeConfig(){const e=getConfigPath();void 0===e&&(console.error(tcolor_1.default.magenta('No susee.config file ("susee.config.ts", "susee.config.js", "susee.config.mjs") found')),typescript_1.default.sys.exit(1));const t=(await Promise.resolve(`${e}`).then(e=>__importStar(require(e)))).default,i=(0,resolves_1.default)([[checkEntries,t.entryPoints]]);await i.series();const s=t.outDir??"dist",a=[];for(const e of t.entryPoints){const t={entry:e.entry,exportPath:e.exportPath,format:e.format??["esm"],tsconfigFilePath:e.tsconfigFilePath??void 0,renameDuplicates:e.renameDuplicates??!0,outDirPath:"."===e.exportPath?s:`${s}${e.exportPath.slice(1)}`};a.push(t)}return{points:a,plugins:t.plugins??[],allowUpdatePackageJson:t.allowUpdatePackageJson??!1,outDir:s}}class CompilerOptions{constructor(e){this._point=e,this._options={}}__init(){const e=new tsconfig_1.default(this._point.tsconfigFilePath);e.removeCompilerOption("rootDir"),e.removeCompilerOption("module"),e.editCompilerOptions({moduleResolution:typescript_1.default.ModuleResolutionKind.NodeNext,outDir:this._point.outDirPath,allowJs:!0}),this._options=e.getCompilerOptions()}__init2(){this.__init();let{types:e,lib:t,...i}=this._options;return e?e.includes("node")||(e=["node",...e]):e=["node"],t=t?[...new Set(["ESNext",...t])]:["ESNext"],{types:e,lib:t,...i}}get commonjs(){const e=this.__init2(),{module:t,...i}=e;return{module:typescript_1.default.ModuleKind.CommonJS,...i}}get esm(){const e=this.__init2(),{module:t,...i}=e;return{module:typescript_1.default.ModuleKind.ES2020,...i}}get default(){return this.__init2()}}function compilerOptions(e){return new CompilerOptions(e)}async function fileSizes(e){const t=await node_fs_1.default.promises.stat(e);return{logical:t.size,allocated:null!==t.blocks?512*t.blocks:null}}const checkExport=(e,t)=>!!(e.match(/export default .*/gm)||e.match(/export = .*/gm)&&t.match(/.cts/g));function isJsxContent(e){const t=typescript_1.default.createSourceFile("file.tsx",e,typescript_1.default.ScriptTarget.Latest,!0,typescript_1.default.ScriptKind.TSX);let i=!1;return function e(t){typescript_1.default.isJsxElement(t)||typescript_1.default.isJsxSelfClosingElement(t)||typescript_1.default.isJsxFragment(t)?i=!0:typescript_1.default.forEachChild(t,e)}(t),i}async function generateDependencies(e){const t=(await(0,mhaehko_1.default)(e)).sort(),i=[];for(const e of t){const t=typescript_1.default.sys.resolvePath(e),s=await node_fs_1.default.promises.readFile(t,"utf8"),a=node_path_1.default.extname(t),r=await fileSizes(t),n=s.length,o=checkExport(s,t),p=typescript_1.default.createSourceFile(t,s,typescript_1.default.ScriptTarget.Latest,!0),c=utils_1.default.check.moduleType(p,t).isCommonJs?"cjs":"esm",l={file:t,content:s,length:n,includeDefExport:o,size:{logical:r.logical,allocated:r.allocated,utf8:(new TextEncoder).encode(s).length,buffBytes:node_buffer_1.Buffer.byteLength(s,"utf8")},moduleType:c,fileExt:a,isJsx:isJsxContent(s)};i.push(l)}return i}function _typesCheck(e,t){if(!t.noCheck){const i=e.map(e=>e.file);let s=!1;const a=typescript_1.default.createProgram(i,t);for(const e of i){const t=a.getSourceFile(e);t||(console.error(tcolor_1.default.magenta(`File not found: ${e}`)),typescript_1.default.sys.exit(1));const i=[...a.getSyntacticDiagnostics(t),...a.getSemanticDiagnostics(t),...a.getDeclarationDiagnostics(t)];if(i.length>0){const e={getCurrentDirectory:()=>node_process_1.default.cwd(),getCanonicalFileName:e=>e,getNewLine:()=>typescript_1.default.sys.newLine};console.error(typescript_1.default.formatDiagnosticsWithColorAndContext(i,e)),s=!0}}if(!s)return!0;typescript_1.default.sys.exit(1)}}async function typeCheck(e,t){const i=(0,resolves_1.default)([[_typesCheck,e,t]]);return(await i.series())[0]}async function depPluginParser(e,t,i){if(t.length)for(const s of t){const t="function"==typeof s?s():s;"dependency"===t.type&&(e=t.async?await t.func(e,i):t.func(e,i))}return e}async function initializer(){const e=await finalSuseeConfig(),t=e.points,i=e.plugins,s=[];for(const e of t){const t=compilerOptions(e);let a=await generateDependencies(e.entry);await typeCheck(a,t.esm)||typescript_1.default.sys.exit(1),a=await depPluginParser(a,i,t.default);const r={fileName:e.entry,exportPath:e.exportPath,format:e.format,rename:e.renameDuplicates,outDir:e.outDirPath,tsOptions:{cjs:t.commonjs,esm:t.esm,default:t.default},depFiles:a,plugins:i};s.push(r)}return{points:s,allowUpdatePackageJson:e.allowUpdatePackageJson}}const exportDefaultExportNameMap=[],exportDefaultImportNameMap=[],prefixKey="AnonymousName",genName=utils_1.default.uniqueName().setPrefix({key:prefixKey,value:"__anonymous__"});function anonymousCallExpressionHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=a=>{if(typescript_1.default.isCallExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateCallExpression(a,i.createIdentifier(s.newName),a.typeArguments,a.arguments)}}else if(typescript_1.default.isPropertyAccessExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updatePropertyAccessExpression(a,i.createIdentifier(s.newName),a.name)}}else if(typescript_1.default.isNewExpression(a)){if(typescript_1.default.isIdentifier(a.expression)){const e=a.expression.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateNewExpression(a,i.createIdentifier(s.newName),a.typeArguments,a.arguments)}}else if(typescript_1.default.isExportSpecifier(a)&&typescript_1.default.isIdentifier(a.name)){const e=a.name.text,s=exportDefaultImportNameMap.find(i=>i.base===e&&i.file===t);if(s)return i.updateExportSpecifier(a,a.isTypeOnly,a.propertyName,i.createIdentifier(s.newName))}return typescript_1.default.visitEachChild(a,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}function anonymousExportHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=r=>{const n=node_path_1.default.basename(t).split(".")[0];if((typescript_1.default.isFunctionDeclaration(r)||typescript_1.default.isClassDeclaration(r))&&void 0===r.name){let e=!1,t=!1;if(r.modifiers?.forEach(i=>{i.kind===typescript_1.default.SyntaxKind.ExportKeyword&&(e=!0),i.kind===typescript_1.default.SyntaxKind.DefaultKeyword&&(t=!0)}),e&&t){const e=genName.getName(prefixKey,n);if(exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),typescript_1.default.isFunctionDeclaration(r))return i.updateFunctionDeclaration(r,r.modifiers,r.asteriskToken,i.createIdentifier(e),r.typeParameters,r.parameters,r.type,r.body);if(typescript_1.default.isClassDeclaration(r))return i.updateClassDeclaration(r,r.modifiers,i.createIdentifier(e),r.typeParameters,r.heritageClauses,r.members)}}else if(typescript_1.default.isExportAssignment(r)&&!r.name&&!r.isExportEquals){if(typescript_1.default.isArrowFunction(r.expression)){const e=genName.getName(prefixKey,n),t=i.createArrowFunction(r.expression.modifiers,r.expression.typeParameters,r.expression.parameters,r.expression.type,r.expression.equalsGreaterThanToken,r.expression.body),s=i.createVariableDeclaration(i.createIdentifier(e),r.expression.exclamationToken,r.expression.type,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),p=i.createVariableStatement(r.expression.modifiers,o),c=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[p,c],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isObjectLiteralExpression(r.expression)){const e=genName.getName(prefixKey,n),t=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,r.expression),s=i.createVariableDeclarationList([t],typescript_1.default.NodeFlags.Const),o=i.createVariableStatement(void 0,s),p=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[o,p],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isArrayLiteralExpression(r.expression)){const e=genName.getName(prefixKey,n),t=i.createArrayLiteralExpression(r.expression.elements,!0),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),p=i.createVariableStatement(void 0,o),c=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[p,c],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isStringLiteral(r.expression)){const e=genName.getName(prefixKey,n),t=i.createStringLiteral(r.expression.text),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),p=i.createVariableStatement(void 0,o),c=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[p,c],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}if(typescript_1.default.isNumericLiteral(r.expression)){const e=genName.getName(prefixKey,n),t=i.createNumericLiteral(r.expression.text),s=i.createVariableDeclaration(i.createIdentifier(e),void 0,void 0,t),o=i.createVariableDeclarationList([s],typescript_1.default.NodeFlags.Const),p=i.createVariableStatement(void 0,o),c=i.createExportAssignment(void 0,void 0,i.createIdentifier(e));return exportDefaultExportNameMap.push({base:e,file:n,newName:e,isEd:!0}),i.updateSourceFile(a,[p,c],a.isDeclarationFile,a.referencedFiles,a.typeReferenceDirectives,a.hasNoDefaultLib,a.libReferenceDirectives)}}return typescript_1.default.visitEachChild(r,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}function anonymousImportHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0),r=(0,transformer_1.default)(e=>{const{factory:i}=e,s=r=>{if(typescript_1.default.isImportDeclaration(r)){const e=r.moduleSpecifier.getText(a),s=node_path_1.default.basename(e).split(".")[0].trim();if(r.importClause?.name&&typescript_1.default.isIdentifier(r.importClause.name)){const e=r.importClause.name.text.trim(),a=exportDefaultExportNameMap.find(e=>e.file===s);if(a){exportDefaultImportNameMap.push({base:e,file:t,newName:a.newName,isEd:!0});const s=i.updateImportClause(r.importClause,r.importClause.phaseModifier,i.createIdentifier(a.newName),r.importClause.namedBindings);return i.updateImportDeclaration(r,r.modifiers,s,r.moduleSpecifier,r.attributes)}}}return typescript_1.default.visitEachChild(r,s,e)};return e=>typescript_1.default.visitNode(e,s)},a,e);return{file:t,content:r,...s}}}const anonymousHandler=async(e,t)=>{const i=(0,resolves_1.default)([[anonymousExportHandler,t],[anonymousImportHandler,t],[anonymousCallExpressionHandler,t]]),s=await i.concurrent();for(const t of s)e=e.map(t);return e};function duplicates(e,t,i){const s=typescript_1.default.createSourceFile(t,e,typescript_1.default.ScriptTarget.Latest,!0),a=new Map;for(const e of s.statements){if(!typescript_1.default.isImportDeclaration(e)||!e.importClause)continue;const t=e.importClause;if(t.name&&typescript_1.default.isIdentifier(t.name)){const e=t.name.text;a.set(e,(a.get(e)||[]).concat({name:e,node:t}))}else if(t.namedBindings&&typescript_1.default.isNamespaceImport(t.namedBindings)&&typescript_1.default.isIdentifier(t.namedBindings.name)){const e=t.namedBindings.name.text;a.set(e,(a.get(e)||[]).concat({name:e,node:t.namedBindings}))}else if(t.namedBindings&&typescript_1.default.isNamedImports(t.namedBindings))for(const e of t.namedBindings.elements)if(typescript_1.default.isIdentifier(e.name)){const t=e.name.text;a.set(t,(a.get(t)||[]).concat({name:t,node:e}))}}const r=new Map,n=utils_1.default.uniqueName();n.setPrefix({key:"DuplicateImport",value:"__dup__"});for(const[e,t]of a.entries())if(t.length>1)for(let i=1;i<t.length;i++){const t=n.getName("DuplicateImport",`${e}_`);r.set(`${e}::${i}`,t),r.set(`${e}::occurrence_${i}`,t)}const o=new Map;for(const[e,t]of a.entries())if(t.length>1)for(let i=1;i<t.length;i++){const s=t[i];s?.node&&o.set(s.node.pos,r.get(`${e}::${i}`))}return(0,transformer_1.default)(e=>{const{factory:t}=e,i=s=>{if(typescript_1.default.isImportDeclaration(s)&&s.importClause){const e=s.importClause;let i=!1,a=e;if(e.name&&typescript_1.default.isIdentifier(e.name)){e.pos;const s=o.get(e.pos);s&&(a=t.updateImportClause(e,e.isTypeOnly,t.createIdentifier(s),e.namedBindings),i=!0)}if(e.namedBindings&&typescript_1.default.isNamespaceImport(e.namedBindings)&&typescript_1.default.isIdentifier(e.namedBindings.name)){const s=o.get(e.namedBindings.pos);if(s){const e=t.createNamespaceImport(t.createIdentifier(s));a=t.updateImportClause(a,a.isTypeOnly,a.name,e),i=!0}}if(e.namedBindings&&typescript_1.default.isNamedImports(e.namedBindings)){const s=e.namedBindings.elements.map(e=>{if(typescript_1.default.isIdentifier(e.name)){const s=o.get(e.pos);if(s)return i=!0,t.updateImportSpecifier(e,e.isTypeOnly,e.propertyName,t.createIdentifier(s))}return e});if(i){const e=t.createNamedImports(s);a=t.updateImportClause(a,a.isTypeOnly,a.name,e)}}if(i)return t.updateImportDeclaration(s,s.modifiers,a,s.moduleSpecifier,s.assertClause)}if(typescript_1.default.isIdentifier(s)){const e=s.text;if(!(e=>{const t=e.parent;if(!t)return!1;switch(t.kind){case typescript_1.default.SyntaxKind.ImportSpecifier:case typescript_1.default.SyntaxKind.NamespaceImport:case typescript_1.default.SyntaxKind.ImportClause:case typescript_1.default.SyntaxKind.VariableDeclaration:case typescript_1.default.SyntaxKind.FunctionDeclaration:case typescript_1.default.SyntaxKind.ClassDeclaration:case typescript_1.default.SyntaxKind.InterfaceDeclaration:case typescript_1.default.SyntaxKind.TypeAliasDeclaration:case typescript_1.default.SyntaxKind.EnumDeclaration:case typescript_1.default.SyntaxKind.Parameter:case typescript_1.default.SyntaxKind.PropertyDeclaration:case typescript_1.default.SyntaxKind.MethodDeclaration:case typescript_1.default.SyntaxKind.BindingElement:return!0;default:return!1}})(s)){if(s.parent&&typescript_1.default.isPropertyAccessExpression(s.parent)&&s.parent.name===s)return s;const i=a.get(e);if(i&&i.length>1)for(let s=1;s<i.length;s++){const i=r.get(`${e}::occurrence_${s}`)||r.get(`${e}::${s}`);if(i)return t.createIdentifier(i)}}}return typescript_1.default.visitEachChild(s,i,e)};return e=>typescript_1.default.visitNode(e,i)},s,i)}function mergeImportsStatement(e){const t=new Map,i=new Map,s=new Map,a=new Map,r=new Map;for(const n of e){const e=n.match(/import\s+(?:type\s+)?(?:(.*?)\s+from\s+)?["']([^"']+)["'];?/);if(!e)continue;const[,o,p]=e,c=n.includes("import type"),l=p;if(!o){const e=n.match(/import\s+(?:type\s+)?(\w+)/);if(e){const t=e[1],i=c?a:s;i.has(l)||i.set(l,new Set),i.get(l)?.add(t)}continue}if(o.startsWith("{")){const e=c?i:t;e.has(l)||e.set(l,new Set);o.replace(/[{}]/g,"").split(",").map(e=>e.trim()).filter(Boolean).forEach(t=>e.get(l)?.add(t))}else if(o.startsWith("* as")){const e=o.match(/\*\s+as\s+(\w+)/);if(e){const t=e[1];r.has(l)||r.set(l,new Set),r.get(l)?.add(t)}}else{const e=c?a:s;e.has(l)||e.set(l,new Set),e.get(l)?.add(o.trim())}}const n=[];for(const[e,s]of t){const t=i.get(e)||new Set,a=new Set([...s]);for(const e of t)s.has(e)||a.add(e);if(a.size>0){const t=Array.from(a).sort().join(", ");n.push(`import { ${t} } from "${e}";`)}}for(const[e,s]of i)if(!t.has(e)&&s.size>0){const t=Array.from(s).sort().join(", ");n.push(`import type { ${t} } from "${e}";`)}for(const[e,t]of s){const i=a.get(e)||new Set,s=new Set([...t]);for(const e of i)t.has(e)||s.add(e);if(s.size>0){const t=Array.from(s).join(", ");n.push(`import ${t} from "${e}";`)}}for(const[e,t]of a)if(!s.has(e)&&t.size>0){const i=Array.from(t).join(", ");n.push(`import type ${i} from "${e}";`)}for(const[e,t]of r)if(t.size>0){const i=Array.from(t).join(", ");n.push(`import * as ${i} from "${e}";`)}return n.sort()}function esmExportRemoveHandler(e){return({file:t,content:i,...s})=>{const a=typescript_1.default.createSourceFile(t,i,typescript_1.default.ScriptTarget.Latest,!0);return{file:t,content:(0,transformer_1.default)(e=>{const{factory:t}=e,i=s=>{if(!utils_1.default.check.isInsideNamespace(s)&&(typescript_1.default.isFunctionDeclaration(s)||typescript_1.default.isClassDeclaration(s)||typescript_1.default.isInterfaceDeclaration(s)||typescript_1.default.isTypeAliasDeclaration(s)||typescript_1.default.isEnumDeclaration(s)||typescript_1.default.isVariableStatement(s))){const e=s.modifiers?.filter(e=>e.kind!==typescript_1.default.SyntaxKind.ExportKeyword&&e.kind!==typescript_1.default.SyntaxKind.DefaultKeyword);if(e?.length!==s.modifiers?.length){if(typescript_1.default.isFunctionDeclaration(s))return t.updateFunctionDeclaration(s,e,s.asteriskToken,s.name,s.typeParameters,s.parameters,s.type,s.body);if(typescript_1.default.isClassDeclaration(s))return t.updateClassDeclaration(s,e,s.name,s.typeParameters,s.heritageClauses,s.members);if(typescript_1.default.isInterfaceDeclaration(s))return t.updateInterfaceDeclaration(s,e,s.name,s.typeParameters,s.heritageClauses,s.members);if(typescript_1.default.isTypeAliasDeclaration(s))return t.updateTypeAliasDeclaration(s,e,s.name,s.typeParameters,s.type);if(typescript_1.default.isEnumDeclaration(s))return t.updateEnumDeclaration(s,e,s.name,s.members);if(typescript_1.default.isVariableStatement(s))return t.updateVariableStatement(s,e,s.declarationList)}}if(typescript_1.default.isExportDeclaration(s))return t.createEmptyStatement();if(typescript_1.default.isExportAssignment(s)){const e=s.expression;if(typescript_1.default.isIdentifier(e))return t.createEmptyStatement()}return typescript_1.default.visitEachChild(s,i,e)};return e=>typescript_1.default.visitNode(e,i)},a,e),...s}}}let properties=[];const typeObj={},typesNames=[];function findProperty(e){const t=[];return typescript_1.default.isPropertyAccessExpression(e)&&typescript_1.default.isIdentifier(e.expression)&&t.push(e.expression.text),e.forEachChild(e=>findProperty(e)),t}function importAllRemoveHandler(e,t){return({file:i,content:s,...a})=>{const r=typescript_1.default.createSourceFile(i,s,typescript_1.default.ScriptTarget.Latest,!0),n=new Set;for(const e of r.statements)if(typescript_1.default.isImportEqualsDeclaration(e)&&e.isTypeOnly){const t=e.moduleReference;typescript_1.default.isExternalModuleReference(t)&&typescript_1.default.isStringLiteral(t.expression)&&n.add(e.name.text)}const o=(0,transformer_1.default)(t=>{const{factory:s}=t,a=o=>{properties=[...properties,...findProperty(o)];const p={isNamespace:!1,isTypeOnly:!1,isTypeNamespace:!1,source:"",importedString:void 0,importedObject:void 0};if(typescript_1.default.isTypeReferenceNode(o)&&typescript_1.default.isQualifiedName(o.typeName)&&typescript_1.default.isIdentifier(o.typeName.left)&&typescript_1.default.isIdentifier(o.typeName.right)){const e=o.typeName.left.text,t=o.typeName.right.text;if(typesNames.push(e),e in typeObj?typeObj[e]?.push(t):typeObj[e]=[t],utils_1.default.check.moduleType(r,i).isCommonJs&&"ts"!==e&&!n.has(e))return s.updateTypeReferenceNode(o,s.createIdentifier(t),void 0)}if(typescript_1.default.isImportDeclaration(o)){const t=o.getText(r);return e.push(t),s.createEmptyStatement()}if(typescript_1.default.isImportEqualsDeclaration(o)){const t=o.name.text,i=o.moduleReference;let a;if(o.isTypeOnly&&(p.isTypeOnly=!0),p.importedString=t,p.isTypeOnly||properties.includes(t)&&(p.isNamespace=!0),typescript_1.default.isExternalModuleReference(i)&&typescript_1.default.isStringLiteral(i.expression)&&(p.source=i.expression.text),p.importedString&&!p.importedObject&&(a=p.isTypeOnly?n.has(p.importedString)?`import type * as ${p.importedString} from "${p.source}";`:typesNames.includes(p.importedString)?`import type { ${typeObj[p.importedString]?.join(",")} } from "${p.source}";`:`import type ${p.importedString} from "${p.source}";`:p.isNamespace&&p.source&&"typescript"!==p.source?`import * as ${p.importedString} from "${p.source}";`:`import ${p.importedString} from "${p.source}";`),!p.importedString&&p.importedObject&&(a=`import { ${p.importedObject.join(", ")} } from "${p.source}";`),a)return e.push(a),s.createEmptyStatement()}if(typescript_1.default.isVariableStatement(o)){const t=o.declarationList.declarations;if(1===t.length){const i=t[0];if(i.initializer&&typescript_1.default.isCallExpression(i.initializer)&&typescript_1.default.isIdentifier(i.initializer.expression)&&"require"===i.initializer.expression.escapedText){const t=i.initializer.arguments[0];if(typescript_1.default.isStringLiteral(t)&&(p.source=t.text),typescript_1.default.isIdentifier(i.name)){const e=i.name.text;p.importedString=e,properties.includes(e)&&(p.isNamespace=!0)}else if(typescript_1.default.isObjectBindingPattern(i.name)){const e=[];for(const t of i.name.elements)typescript_1.default.isIdentifier(t.name)&&e.push(t.name.text);e.length>0&&(p.importedObject=e)}let a;if(p.importedString&&!p.importedObject&&(a=p.isNamespace?`import * as ${p.importedString} from "${p.source}";`:`import ${p.importedString} from "${p.source}";`),!p.importedString&&p.importedObject&&(a=`import { ${p.importedObject.join(", ")} } from "${p.source}";`),a)return e.push(a),s.createEmptyStatement()}}}return typescript_1.default.visitEachChild(o,a,t)};return e=>typescript_1.default.visitNode(e,a)},r,t);return{file:i,content:o,...a}}}const removeHandlers=async(e,t)=>{const i=(0,resolves_1.default)([[importAllRemoveHandler,e,t],[esmExportRemoveHandler,t]]);return await i.series()};function collectBindingNames(e,t){typescript_1.default.isIdentifier(e)?t.push(e.text):(typescript_1.default.isObjectBindingPattern(e)||typescript_1.default.isArrayBindingPattern(e))&&e.elements.forEach(e=>{typescript_1.default.isBindingElement(e)&&e.name&&collectBindingNames(e.name,t)})}function clearUnusedCode(e,t,i,s={treatExportsAsUsed:!0}){const a=typescript_1.default.createSourceFile(t,e,typescript_1.default.ScriptTarget.Latest,!0),r=new Map,n=new Set,o=(e,t=!1)=>{const i=r.get(e);r.set(e,{exported:!!i?.exported||t})},p=e=>{if(typescript_1.default.isImportDeclaration(e)&&e.importClause){const t=e.importClause;t.name&&typescript_1.default.isIdentifier(t.name)&&o(t.name.text,!1),t.namedBindings&&(typescript_1.default.isNamedImports(t.namedBindings)?t.namedBindings.elements.forEach(e=>{typescript_1.default.isImportSpecifier(e)&&typescript_1.default.isIdentifier(e.name)&&o(e.name.text,!1)}):typescript_1.default.isNamespaceImport(t.namedBindings)&&typescript_1.default.isIdentifier(t.namedBindings.name)&&o(t.namedBindings.name.text,!1))}else if(typescript_1.default.isImportEqualsDeclaration(e)&&typescript_1.default.isIdentifier(e.name))o(e.name.text,!1);else if(typescript_1.default.isVariableStatement(e)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;e.declarationList.declarations.forEach(e=>{collectBindingNames(e.name,[]);const i=[];collectBindingNames(e.name,i),i.forEach(e=>o(e,t))})}else if(typescript_1.default.isFunctionDeclaration(e)&&e.name&&typescript_1.default.isIdentifier(e.name)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;o(e.name.text,t)}else if(typescript_1.default.isClassDeclaration(e)&&e.name&&typescript_1.default.isIdentifier(e.name)){const t=e.modifiers?.some(e=>e.kind===typescript_1.default.SyntaxKind.ExportKeyword)??!1;o(e.name.text,t)}if(typescript_1.default.isIdentifier(e)){const t=e.parent;typescript_1.default.isVariableDeclaration(t)&&t.name===e||typescript_1.default.isFunctionDeclaration(t)&&t.name===e||typescript_1.default.isClassDeclaration(t)&&t.name===e||typescript_1.default.isImportClause(t)&&t.name===e||typescript_1.default.isImportSpecifier(t)&&t.name===e||typescript_1.default.isNamespaceImport(t)&&t.name===e||typescript_1.default.isBindingElement(t)&&t.name===e||typescript_1.default.isParameter(t)&&t.name===e||n.add(e.text)}typescript_1.default.forEachChild(e,p)};p(a);const c=new Set;r.forEach((e,t)=>{n.has(t)||s.treatExportsAsUsed&&e.exported||c.add(t)});return(0,transformer_1.default)(e=>{const t=i=>{if(typescript_1.default.isImportDeclaration(i)&&i.importClause){const e=i.importClause,t=e.name&&typescript_1.default.isIdentifier(e.name)?e.name.text:void 0;let s;const a=[];e.namedBindings&&(typescript_1.default.isNamedImports(e.namedBindings)?e.namedBindings.elements.forEach(e=>{typescript_1.default.isImportSpecifier(e)&&typescript_1.default.isIdentifier(e.name)&&a.push(e)}):typescript_1.default.isNamespaceImport(e.namedBindings)&&typescript_1.default.isIdentifier(e.namedBindings.name)&&(s=e.namedBindings.name.text));const r=!!t&&!c.has(t),n=!!s&&!c.has(s),o=a.filter(e=>!c.has(e.name.text));if(!r&&!n&&0===o.length)return typescript_1.default.factory.createNotEmittedStatement(i);if(!r&&!!e.name||void 0!==s&&!n||o.length!==a.length){let e;e=o.length>0?typescript_1.default.factory.createNamedImports(o):n&&s?typescript_1.default.factory.createNamespaceImport(typescript_1.default.factory.createIdentifier(s)):void 0;const a=r&&t?typescript_1.default.factory.createIdentifier(t):void 0,p=typescript_1.default.factory.createImportClause(!1,a,e);return typescript_1.default.factory.updateImportDeclaration(i,i.modifiers,p,i.moduleSpecifier,i.assertClause)}return i}if((typescript_1.default.isFunctionDeclaration(i)||typescript_1.default.isClassDeclaration(i))&&i.name&&typescript_1.default.isIdentifier(i.name))return c.has(i.name.text)?typescript_1.default.factory.createNotEmittedStatement(i):i;if(typescript_1.default.isVariableStatement(i)){const e=[];i.declarationList.declarations.forEach(t=>collectBindingNames(t.name,e));return e.some(e=>!c.has(e))?i:typescript_1.default.factory.createNotEmittedStatement(i)}return typescript_1.default.visitEachChild(i,t,e)};return e=>typescript_1.default.visitNode(e,t)},a,i)}async function preProcessPluginParser(e,t,i){if(e.length)for(const s of e){const e="function"==typeof s?s():s;"pre-process"===e.type&&(t=e.async?await e.func(t,i):e.func(t,i))}return t}async function bundler(e){"."===e.exportPath||utils_1.default.str.splitCamelCase(e.exportPath.slice(2));console.time(` > ${tcolor_1.default.cyan("Bundled")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `);let t=e.depFiles;const i=e.rename,s=e.tsOptions.default,a=e.plugins;let r=[];t=await anonymousHandler(t,s);const n=await removeHandlers(r,s);t=t.map(n[0]);const o=t.slice(0,-1).map(n[1]),p=t.slice(-1),c=/["']((?!\.\/|\.\.\/)[^"']+)["']/;r=r.filter(e=>c.test(e)),r=mergeImportsStatement(r);let l=`${r.join("\n").trim()}\n${o.map(e=>`${`//${node_path_1.default.relative(node_process_1.default.cwd(),e.file)}`}\n${e.content}`).join("\n").trim()}\n${p.map(e=>`${`//${node_path_1.default.relative(node_process_1.default.cwd(),e.file)}`}\n${e.content}`).join("\n").trim()}`;return l=l.replace(/^s*;\s*$/gm,"").trim(),i&&(l=duplicates(l,e.fileName,s)),l=clearUnusedCode(l,e.fileName,s),l=await preProcessPluginParser(a,l),console.timeEnd(` > ${tcolor_1.default.cyan("Bundled")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `),{bundledContent:l,...e}}async function bundle(e){const t=[];for(const i of e.points){const e=await bundler(i);t.push(e)}return{points:t,allowUpdatePackageJson:e.allowUpdatePackageJson}}function createHost(e,t){const i={},s={getSourceFile:(i,s)=>{if(i===t)return typescript_1.default.createSourceFile(i,e,s)},writeFile:(e,t)=>{i[e]=t},getDefaultLibFileName:e=>typescript_1.default.getDefaultLibFilePath(e),getCurrentDirectory:()=>"",getDirectories:()=>[],fileExists:e=>e===t,readFile:i=>i===t?e:void 0,getCanonicalFileName:e=>e,useCaseSensitiveFileNames:()=>!0,getNewLine:()=>"\n"};return{createdFiles:i,host:s}}const isCjs=e=>e.commonjs&&e.commonjsTypes,isEsm=e=>e.esm&&e.esmTypes;function getExports(e,t){return isCjs(e)&&isEsm(e)?{[t]:{import:{types:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.esmTypes)}`,default:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.esm)}`},require:{types:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.commonjsTypes)}`,default:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.commonjs)}`}}}:isCjs(e)&&!isEsm(e)?{[t]:{require:{types:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.commonjsTypes)}`,default:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.commonjs)}`}}}:!isCjs(e)&&isEsm(e)?{[t]:{import:{types:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.esmTypes)}`,default:`./${node_path_1.default.relative(node_process_1.default.cwd(),e.esm)}`}}}:{}}async function writePackage(e,t){let i=!0;"."!==t&&(i=!1);const s=typescript_1.default.sys.resolvePath("package.json"),a=node_fs_1.default.readFileSync(s,"utf8"),r=JSON.parse(a);let{name:n,version:o,description:p,main:c,module:l,type:d,types:f,exports:u,...m}=r;d="module";let y={},_={},g={},h={};if(i)y=e.main?{main:node_path_1.default.relative(node_process_1.default.cwd(),e.main)}:{},_=e.module?{module:node_path_1.default.relative(node_process_1.default.cwd(),e.module)}:{},g=e.types?{types:node_path_1.default.relative(node_process_1.default.cwd(),e.types)}:{},h={exports:{...getExports(e,t)}};else{y=c?{main:c}:{},_=l?{module:l}:{},g=f?{types:f}:{};h={exports:{...u&&"object"==typeof u&&!Array.isArray(u)?{...u}:{},...getExports(e,t)}}}const x={name:n,version:o,description:p,type:d,...y,...g,..._,...h,...m};await utils_1.default.file.writeFile(s,JSON.stringify(x,null,2))}const resolveSourceMappingURL=(e,t,i)=>{const s=node_path_1.default.extname(e),a=node_path_1.default.basename(e).split(".")[0],r=new RegExp(`${a}.js.map`,"gm"),n=new RegExp(`${a}.d.ts.map`,"gm"),o="cjs"===i?`${a}.cjs.map`:`${a}.mjs.map`,p="cjs"===i?`${a}.d.cts.map`:`${a}.d.mts.map`;return".js"===s?t.replace(r,o):t.replace(n,p)},postProcessPluginParser=async(e,t,i)=>{if(".js"===node_path_1.default.extname(i)&&e.length)for(let s of e)s="function"==typeof s?s():s,"post-process"===s.type&&(t=s.async?await s.func(t,i):s.func(t,i));return t};class Compiler{constructor(e){this.object=e,this.files={commonjs:void 0,commonjsTypes:void 0,esm:void 0,esmTypes:void 0,main:void 0,module:void 0,types:void 0}}_isUpdate(){return this.object.allowUpdatePackageJson}async _commonjs(e){const t="."===e.exportPath;console.time(` ${tcolor_1.default.cyan("Compiled commonjs")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `);const i=e.fileName,s=e.bundledContent,a=[...new Set(e.format)],r=e.tsOptions.cjs,n=createHost(s,i),o=n.createdFiles,p=n.host;typescript_1.default.createProgram([i],r,p).emit(),Object.entries(o).map(async([i,s])=>{s=resolveSourceMappingURL(i,s,"cjs"),s=await postProcessPluginParser(e.plugins,s,i),this._isUpdate()&&(i.match(/.js/g)&&(this.files.commonjs=i.replace(/.js/g,".cjs")),i.match(/.d.ts/g)&&(this.files.commonjsTypes=i.replace(/.d.ts/g,".d.cts")),t&&a.includes("commonjs")&&(this.files.commonjs&&(this.files.main=this.files.commonjs),this.files.commonjsTypes&&(this.files.types=this.files.commonjsTypes))),i=(i=(i=i.replace(/.js/g,".cjs")).replace(/.map.js/g,".map.cjs")).replace(/.d.ts/g,".d.cts"),a.includes("commonjs")&&!a.includes("esm")&&await utils_1.default.file.clearFolder(node_path_1.default.dirname(i)),await utils_1.default.file.writeFile(i,s)}),console.timeEnd(` ${tcolor_1.default.cyan("Compiled commonjs")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `)}async _esm(e){const t="."===e.exportPath;console.time(` ${tcolor_1.default.cyan("Compiled esm")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `);const i=e.fileName,s=e.bundledContent,a=e.tsOptions.esm,r=createHost(s,i),n=r.createdFiles,o=r.host;typescript_1.default.createProgram([i],a,o).emit(),Object.entries(n).map(async([i,s])=>{s=resolveSourceMappingURL(i,s,"esm"),s=await postProcessPluginParser(e.plugins,s,i),this._isUpdate()&&(i.match(/.js/g)&&(this.files.esm=i.replace(/.js/g,".mjs")),i.match(/.d.ts/g)&&(this.files.esmTypes=i.replace(/.d.ts/g,".d.mts")),t&&this.files.esm&&(this.files.module=this.files.esm)),i=(i=(i=i.replace(/.js/g,".mjs")).replace(/.map.js/g,".map.mjs")).replace(/.d.ts/g,".d.mts"),await utils_1.default.file.clearFolder(node_path_1.default.dirname(i)),await utils_1.default.file.writeFile(i,s)}),console.timeEnd(` ${tcolor_1.default.cyan("Compiled esm")} -> ${tcolor_1.default.cyan(`export path(${tcolor_1.default.magenta(`"${e.exportPath}"`)})`)} `)}async compile(){for(const e of this.object.points){const t=[...new Set(e.format)];for(const i of t)switch(i){case"commonjs":await this._commonjs(e),this._isUpdate()&&await writePackage(this.files,e.exportPath);break;case"esm":await this._esm(e),this._isUpdate()&&await writePackage(this.files,e.exportPath)}}}}const finalCheck=e=>{const t=e.points;for(const e of t)for(const t of e.depFiles)"cjs"===t.moduleType||".cjs"===t.fileExt?(console.error(`> ${tcolor_1.default.cyan(`Unsupported CommonJS dependency: ${tcolor_1.default.magenta(t.file)}\n To resolve that, use @suseejs/plugin-commonjs`)}`),typescript_1.default.sys.exit(1)):(t.isJsx||".jsx"===t.fileExt||".tsx"===t.fileExt)&&(console.error(`> ${tcolor_1.default.cyan(`Unsupported JSX/TSX dependency: ${tcolor_1.default.magenta(t.file)}\n That will be fix in future versions`)}`),typescript_1.default.sys.exit(1))},packageContent=node_fs_1.default.readFileSync(node_path_1.default.resolve(node_process_1.default.cwd(),"package.json"),"utf8"),pkg=JSON.parse(packageContent),name=pkg.name??"",version=pkg.version??"";let pkg_nv="";async function susee(){console.time(`susee > ${tcolor_1.default.cyan("Done in")}`),console.time(`susee > ${tcolor_1.default.cyan(`Initialized ${tcolor_1.default.magenta(pkg_nv)}`)} `);const e=await initializer();finalCheck(e),console.timeEnd(`susee > ${tcolor_1.default.cyan(`Initialized ${tcolor_1.default.magenta(pkg_nv)}`)} `);const t=await bundle(e),i=new Compiler(t);await i.compile(),console.timeEnd(`susee > ${tcolor_1.default.cyan("Done in")}`)}pkg_nv=""!==name&&""!==version?`${name}@${version}`:""!==name&&""===version?`${name}`:""===name&&""!==version?`the project@${version}`:"the project";