@seedcord/cli 0.0.1 → 0.1.0-next.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 +1 -1
- package/bin/seedcord.mjs +22 -0
- package/dist/Hmr-BXZ-LFe5.d.mts +33 -0
- package/dist/api/vite-hmr.d.mts +33 -0
- package/dist/api/vite-hmr.mjs +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +1905 -4148
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.mts +73 -0
- package/dist/index.mjs +2 -717
- package/dist/src-CCX-T6t_.mjs +20 -0
- package/dist/src-CCX-T6t_.mjs.map +1 -0
- package/package.json +48 -28
- package/dist/cli.d.ts +0 -2
- package/dist/index.d.ts +0 -207
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/core/config/schema.ts
|
|
2
|
+
/**
|
|
3
|
+
* Supported configuration filenames discovered by the CLI.
|
|
4
|
+
*/
|
|
5
|
+
const SEEDCORD_CONFIG_FILENAMES = ["seedcord.config.ts", "seedcord.config.mts"];
|
|
6
|
+
/**
|
|
7
|
+
* Helper so config files receive proper type inference.
|
|
8
|
+
*/
|
|
9
|
+
function defineConfig(config) {
|
|
10
|
+
return config;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/index.ts
|
|
15
|
+
/** Package version. Falls back to '0.0.0' when run unbuilt (dev); the real value is injected at build time. */
|
|
16
|
+
const version = "0.1.0-next.0";
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { SEEDCORD_CONFIG_FILENAMES as n, defineConfig as r, version as t };
|
|
20
|
+
//# sourceMappingURL=src-CCX-T6t_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-CCX-T6t_.mjs","names":[],"sources":["../src/core/config/schema.ts","../src/index.ts"],"sourcesContent":["/**\n * Build configuration used by the Seedcord CLI.\n */\nexport interface SeedcordBuildConfig {\n /**\n * Directory where build artifacts should be emitted. Defaults to ./dist relative to the config directory.\n */\n outDir?: string;\n /**\n * Optional tsconfig path to use for builds. Defaults to the nearest tsconfig.build.json or tsconfig.json.\n */\n tsconfig?: string;\n /**\n * File name (or relative path) for the bootstrap file emitted inside the build output.\n */\n bootstrap?: string;\n}\n\n/**\n * HMR configuration used by the Seedcord CLI.\n */\nexport interface SeedcordHmrConfig {\n /**\n * Glob patterns for files that should trigger a full restart when changed.\n */\n restart?: string[];\n\n /**\n * Optional tsconfig path to use for type checking in dev mode. Defaults to the nearest tsconfig.json.\n */\n tsconfig?: string;\n}\n\n/**\n * Configuration used by the Seedcord CLI when running `seedcord dev` or `seedcord build`.\n */\nexport interface SeedcordDevConfig {\n /**\n * Root directory used for resolving relative paths. Defaults to the config directory.\n */\n root?: string;\n /**\n * Path to the module whose default export is a configured Seedcord instance.\n */\n instance: string;\n /**\n * Entry file that should be executed when starting the bot (and copied into the build output).\n */\n entry: string;\n /**\n * Optional build configuration overrides.\n */\n build?: SeedcordBuildConfig;\n /**\n * Optional HMR configuration.\n */\n hmr?: SeedcordHmrConfig;\n}\n\nexport interface ResolvedSeedcordBuildConfig {\n outDir: string;\n bootstrap: string;\n tsconfig?: string;\n}\n\n/**\n * Fully resolved configuration with absolute file system paths.\n */\nexport interface ResolvedSeedcordDevConfig extends Required<Omit<SeedcordDevConfig, 'build' | 'hmr'>> {\n /**\n * Absolute path to the config file that produced this resolution.\n */\n configFile: string;\n /**\n * Resolved build options with absolute paths.\n */\n build: ResolvedSeedcordBuildConfig;\n /**\n * Resolved tsconfig path to use for type checking in dev mode.\n */\n tsconfig?: string | undefined;\n /**\n * HMR configuration carried through from the user config (restart globs are matched as-is).\n */\n hmr?: SeedcordHmrConfig | undefined;\n}\n\n/**\n * Supported configuration filenames discovered by the CLI.\n */\nexport const SEEDCORD_CONFIG_FILENAMES = ['seedcord.config.ts', 'seedcord.config.mts'] as const;\n\n/**\n * Helper so config files receive proper type inference.\n */\nexport function defineConfig(config: SeedcordDevConfig): SeedcordDevConfig {\n return config;\n}\n","export {\n defineConfig,\n SEEDCORD_CONFIG_FILENAMES,\n type SeedcordBuildConfig,\n type SeedcordDevConfig,\n type SeedcordHmrConfig\n} from '@core/config/schema';\n\nexport type * from '@api/Hmr';\n\n/** Package version. Falls back to '0.0.0' when run unbuilt (dev); the real value is injected at build time. */\nexport const version = process.env.PACKAGE_VERSION ?? '0.0.0';\n"],"mappings":";;;;AA0FA,MAAa,4BAA4B,CAAC,sBAAsB,qBAAqB;;;;AAKrF,SAAgB,aAAa,QAA8C;CACvE,OAAO;AACX;;;;;ACtFA,MAAa"}
|
package/package.json
CHANGED
|
@@ -1,65 +1,85 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seedcord/cli",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.1.0-next.0",
|
|
5
5
|
"description": "CLI for seedcord",
|
|
6
6
|
"bin": {
|
|
7
|
-
"seedcord": "./
|
|
7
|
+
"seedcord": "./bin/seedcord.mjs"
|
|
8
8
|
},
|
|
9
9
|
"repository": {
|
|
10
10
|
"type": "git",
|
|
11
|
-
"url": "https://github.com/
|
|
11
|
+
"url": "https://github.com/seedcord/seedcord.git",
|
|
12
12
|
"directory": "packages/cli"
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
|
+
"bin",
|
|
15
16
|
"dist",
|
|
16
17
|
"package.json",
|
|
17
18
|
"README.md",
|
|
18
19
|
"LICENSE"
|
|
19
20
|
],
|
|
20
|
-
"types": "./dist/index.d.
|
|
21
|
+
"types": "./dist/index.d.mts",
|
|
21
22
|
"exports": {
|
|
22
23
|
".": {
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
"import": {
|
|
25
|
+
"types": "./dist/index.d.mts",
|
|
26
|
+
"default": "./dist/index.mjs"
|
|
27
|
+
},
|
|
28
|
+
"require": {
|
|
29
|
+
"types": "./dist/index.d.cts",
|
|
30
|
+
"default": "./dist/index.cjs"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"./vite-hmr": {
|
|
34
|
+
"types": "./dist/api/vite-hmr.d.mts"
|
|
26
35
|
}
|
|
27
36
|
},
|
|
28
37
|
"peerDependencies": {
|
|
29
|
-
"typescript": "
|
|
38
|
+
"typescript": "^6.0.3"
|
|
30
39
|
},
|
|
31
40
|
"dependencies": {
|
|
32
|
-
"@
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
+
"@commander-js/extra-typings": "^15.0.0",
|
|
42
|
+
"chalk": "^5.6.2",
|
|
43
|
+
"commander": "^15.0.0",
|
|
44
|
+
"fix-esm-import-path": "^1.10.3",
|
|
45
|
+
"ink": "7.0.3",
|
|
46
|
+
"ink-spinner": "^5.0.0",
|
|
47
|
+
"jiti": "^2.7.0",
|
|
48
|
+
"minimatch": "^10.2.5",
|
|
49
|
+
"react": "^19.2.6",
|
|
50
|
+
"tsx": "^4.22.3",
|
|
51
|
+
"vite": "^8.0.14",
|
|
52
|
+
"@seedcord/services": "0.7.0-next.0",
|
|
53
|
+
"@seedcord/types": "0.4.0-next.0",
|
|
54
|
+
"@seedcord/utils": "0.4.0-next.0"
|
|
41
55
|
},
|
|
42
56
|
"devDependencies": {
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
57
|
+
"@types/react": "^19.2.15",
|
|
58
|
+
"eslint-plugin-react": "^7.37.5",
|
|
59
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
60
|
+
"ink-testing-library": "^4.0.0",
|
|
61
|
+
"typescript": "^6.0.3",
|
|
62
|
+
"@seedcord/eslint-config": "1.4.0-next.0",
|
|
63
|
+
"@seedcord/tsconfig": "2.0.0-next.0",
|
|
64
|
+
"@seedcord/tsdown-config": "2.0.0"
|
|
47
65
|
},
|
|
48
66
|
"publishConfig": {
|
|
49
67
|
"access": "public",
|
|
50
|
-
"provenance":
|
|
68
|
+
"provenance": true
|
|
51
69
|
},
|
|
52
70
|
"scripts": {
|
|
53
71
|
"dev": "tsx src/cli.ts",
|
|
54
|
-
"
|
|
72
|
+
"preview": "tsx playground/preview.tsx",
|
|
73
|
+
"build": "tsdown",
|
|
55
74
|
"clean": "rm -rf dist",
|
|
56
|
-
"lint": "eslint 'src/**/*.{ts,tsx}' --cache",
|
|
57
|
-
"lint:fix": "eslint 'src/**/*.{ts,tsx}' --fix --cache",
|
|
58
|
-
"fmt": "prettier --write 'src/**/*.{ts,tsx,json,md}' --cache",
|
|
59
|
-
"fmt:check": "prettier --check 'src/**/*.{ts,tsx,json,md}' --cache",
|
|
75
|
+
"lint": "eslint 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}' 'playground/**/*.{ts,tsx}' --cache",
|
|
76
|
+
"lint:fix": "eslint 'src/**/*.{ts,tsx}' 'tests/**/*.{ts,tsx}' 'playground/**/*.{ts,tsx}' --fix --cache",
|
|
77
|
+
"fmt": "prettier --write 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,json,md}' 'playground/**/*.{ts,tsx}' --cache",
|
|
78
|
+
"fmt:check": "prettier --check 'src/**/*.{ts,tsx,json,md}' 'tests/**/*.{ts,tsx,json,md}' 'playground/**/*.{ts,tsx}' --cache",
|
|
60
79
|
"tc": "tsc --noEmit",
|
|
61
80
|
"test": "vitest run",
|
|
62
81
|
"test:watch": "vitest dev",
|
|
63
82
|
"coverage": "vitest run --coverage"
|
|
64
|
-
}
|
|
83
|
+
},
|
|
84
|
+
"readme": "<p align=\"center\">\n <img src=\"../../assets/banner.png\" alt=\"seedcord\" width=\"100%\" />\n</p>\n\n---\n\n_This repository is a work in progress._\n\n- There are no stable releases yet but changes are being made actively.\n- Till a major v1.0.0 release for seedcord, expect breaking changes in minor versions.\n- Documentation will come soon as well!\n\nI'm planning to release the first major version by Q1 2026. But till then, if you'd like to try using it, you can check out the code in `mock`\n"
|
|
65
85
|
}
|
package/dist/cli.d.ts
DELETED
package/dist/index.d.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { ILogger } from '@seedcord/types';
|
|
2
|
-
import { Command } from 'commander';
|
|
3
|
-
|
|
4
|
-
interface ModuleLoader {
|
|
5
|
-
importModule<TModule = unknown>(entryPath: string): Promise<TModule>;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
type MaybePromise<TValue> = TValue | Promise<TValue>;
|
|
9
|
-
interface SeedcordLike {
|
|
10
|
-
start: () => MaybePromise<unknown>;
|
|
11
|
-
}
|
|
12
|
-
declare class SeedcordInstanceLoader {
|
|
13
|
-
private readonly modules;
|
|
14
|
-
private readonly logger;
|
|
15
|
-
constructor(modules: ModuleLoader, logger: ILogger);
|
|
16
|
-
load(instancePath: string): Promise<SeedcordLike>;
|
|
17
|
-
private isSeedcordLike;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
interface SeedcordBuildConfig {
|
|
21
|
-
/**
|
|
22
|
-
* Directory where build artifacts should be emitted. Defaults to ./dist relative to the config directory.
|
|
23
|
-
*/
|
|
24
|
-
outDir?: string;
|
|
25
|
-
/**
|
|
26
|
-
* Optional tsconfig path to use for builds. Defaults to the nearest tsconfig.build.json or tsconfig.json.
|
|
27
|
-
*/
|
|
28
|
-
tsconfig?: string;
|
|
29
|
-
/**
|
|
30
|
-
* File name (or relative path) for the bootstrap file emitted inside the build output.
|
|
31
|
-
*/
|
|
32
|
-
bootstrap?: string;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Configuration used by the Seedcord CLI when running `seedcord dev` or `seedcord build`.
|
|
36
|
-
*/
|
|
37
|
-
interface SeedcordDevConfig {
|
|
38
|
-
/**
|
|
39
|
-
* Root directory used for resolving relative paths. Defaults to the config directory.
|
|
40
|
-
*/
|
|
41
|
-
root?: string;
|
|
42
|
-
/**
|
|
43
|
-
* Path to the module whose default export is a configured Seedcord instance.
|
|
44
|
-
*/
|
|
45
|
-
instance: string;
|
|
46
|
-
/**
|
|
47
|
-
* Entry file that should be executed when starting the bot (and copied into the build output).
|
|
48
|
-
*/
|
|
49
|
-
entry: string;
|
|
50
|
-
/**
|
|
51
|
-
* Optional build configuration overrides.
|
|
52
|
-
*/
|
|
53
|
-
build?: SeedcordBuildConfig;
|
|
54
|
-
}
|
|
55
|
-
interface ResolvedSeedcordBuildConfig {
|
|
56
|
-
outDir: string;
|
|
57
|
-
bootstrap: string;
|
|
58
|
-
tsconfig?: string;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Fully resolved configuration with absolute file system paths.
|
|
62
|
-
*/
|
|
63
|
-
interface ResolvedSeedcordDevConfig extends Required<Omit<SeedcordDevConfig, 'build'>> {
|
|
64
|
-
/**
|
|
65
|
-
* Absolute path to the config file that produced this resolution.
|
|
66
|
-
*/
|
|
67
|
-
configFile: string;
|
|
68
|
-
/**
|
|
69
|
-
* Resolved build options with absolute paths.
|
|
70
|
-
*/
|
|
71
|
-
build: ResolvedSeedcordBuildConfig;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Supported configuration filenames discovered by the CLI.
|
|
75
|
-
*/
|
|
76
|
-
declare const SEEDCORD_CONFIG_FILENAMES: readonly ["seedcord.config.ts", "seedcord.config.mts"];
|
|
77
|
-
/**
|
|
78
|
-
* Helper so config files receive proper type inference.
|
|
79
|
-
*/
|
|
80
|
-
declare function defineConfig(config: SeedcordDevConfig): SeedcordDevConfig;
|
|
81
|
-
|
|
82
|
-
declare class ConfigLoader {
|
|
83
|
-
private readonly modules;
|
|
84
|
-
private readonly logger;
|
|
85
|
-
constructor(modules: ModuleLoader, logger: ILogger);
|
|
86
|
-
load(configPath: string): Promise<ResolvedSeedcordDevConfig>;
|
|
87
|
-
private unwrapConfig;
|
|
88
|
-
private resolveWithinRoot;
|
|
89
|
-
private assertEntryWithinRoot;
|
|
90
|
-
private resolveBuildOptions;
|
|
91
|
-
private resolveBootstrap;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
declare class ConfigLocator {
|
|
95
|
-
private readonly logger;
|
|
96
|
-
constructor(logger: ILogger);
|
|
97
|
-
locate(baseDir?: string): string;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Coordinates config discovery, loading, and starting a Seedcord instance.
|
|
102
|
-
*/
|
|
103
|
-
declare class SeedcordDevRunner {
|
|
104
|
-
private readonly locator;
|
|
105
|
-
private readonly configLoader;
|
|
106
|
-
private readonly instanceLoader;
|
|
107
|
-
private readonly logger;
|
|
108
|
-
constructor(locator: ConfigLocator, configLoader: ConfigLoader, instanceLoader: SeedcordInstanceLoader, logger: ILogger);
|
|
109
|
-
static create(logger: ILogger): SeedcordDevRunner;
|
|
110
|
-
run(): Promise<void>;
|
|
111
|
-
private loadConfig;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
declare class DevCommand {
|
|
115
|
-
private readonly runner;
|
|
116
|
-
private readonly logger;
|
|
117
|
-
constructor(runner: SeedcordDevRunner, logger: ILogger);
|
|
118
|
-
register(program: Command): void;
|
|
119
|
-
static create(logger: ILogger): DevCommand;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
declare class BootstrapWriter {
|
|
123
|
-
private readonly logger;
|
|
124
|
-
constructor(logger: ILogger);
|
|
125
|
-
write(config: ResolvedSeedcordDevConfig, emittedEntry: string): Promise<void>;
|
|
126
|
-
private formatImportPath;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
interface EntryPointCollection {
|
|
130
|
-
entryMap: Record<string, string>;
|
|
131
|
-
primaryKey: string;
|
|
132
|
-
}
|
|
133
|
-
declare class EntryPointCollector {
|
|
134
|
-
collect(config: ResolvedSeedcordDevConfig, tsconfigPath: string): EntryPointCollection;
|
|
135
|
-
private parseTsconfig;
|
|
136
|
-
private shouldEmitFile;
|
|
137
|
-
private isWithinRoot;
|
|
138
|
-
private createEntryKey;
|
|
139
|
-
private createEntryFallback;
|
|
140
|
-
private formatDiagnostics;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
declare class RelativeSpecifierTransformer {
|
|
144
|
-
transform(outDir: string): Promise<void>;
|
|
145
|
-
private collectJavaScriptFiles;
|
|
146
|
-
private rewriteFile;
|
|
147
|
-
private extractSpecifierReplacements;
|
|
148
|
-
private scheduleReplacement;
|
|
149
|
-
private appendJsExtension;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
interface BuildResult {
|
|
153
|
-
emittedEntry: string;
|
|
154
|
-
}
|
|
155
|
-
declare class TypeScriptProjectBuilder {
|
|
156
|
-
private readonly logger;
|
|
157
|
-
private readonly entries;
|
|
158
|
-
private readonly specifierTransformer;
|
|
159
|
-
constructor(logger: ILogger, entries?: EntryPointCollector, specifierTransformer?: RelativeSpecifierTransformer);
|
|
160
|
-
build(config: ResolvedSeedcordDevConfig): Promise<BuildResult>;
|
|
161
|
-
private resolveTsconfig;
|
|
162
|
-
private resolveEmittedEntry;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
declare class SeedcordBuildRunner {
|
|
166
|
-
private readonly locator;
|
|
167
|
-
private readonly configLoader;
|
|
168
|
-
private readonly builder;
|
|
169
|
-
private readonly bootstrapWriter;
|
|
170
|
-
private readonly logger;
|
|
171
|
-
constructor(locator: ConfigLocator, configLoader: ConfigLoader, builder: TypeScriptProjectBuilder, bootstrapWriter: BootstrapWriter, logger: ILogger);
|
|
172
|
-
static create(logger: ILogger): SeedcordBuildRunner;
|
|
173
|
-
run(): Promise<void>;
|
|
174
|
-
private loadConfig;
|
|
175
|
-
private assertEntryExists;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
declare class BuildCommand {
|
|
179
|
-
private readonly runner;
|
|
180
|
-
private readonly logger;
|
|
181
|
-
constructor(runner: SeedcordBuildRunner, logger: ILogger);
|
|
182
|
-
register(program: Command): void;
|
|
183
|
-
static create(logger: ILogger): BuildCommand;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
type TsconfigOption = string | false;
|
|
187
|
-
interface RuntimeModuleLoaderOptions {
|
|
188
|
-
tsconfig?: TsconfigOption;
|
|
189
|
-
forceTsx?: boolean;
|
|
190
|
-
}
|
|
191
|
-
declare class RuntimeModuleLoader implements ModuleLoader {
|
|
192
|
-
private readonly options;
|
|
193
|
-
private readonly jiti;
|
|
194
|
-
constructor(options?: RuntimeModuleLoaderOptions);
|
|
195
|
-
importModule<TModule = unknown>(entryPath: string): Promise<TModule>;
|
|
196
|
-
private shouldUseTsx;
|
|
197
|
-
private importWithTsx;
|
|
198
|
-
private importWithNode;
|
|
199
|
-
private resolveTsconfig;
|
|
200
|
-
private findNearestTsconfig;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
declare function resolveDefaultExport<TValue>(moduleExport: TValue): unknown;
|
|
204
|
-
|
|
205
|
-
declare const version: string;
|
|
206
|
-
|
|
207
|
-
export { BootstrapWriter, BuildCommand, ConfigLoader, ConfigLocator, DevCommand, type ModuleLoader, type ResolvedSeedcordDevConfig, RuntimeModuleLoader, SEEDCORD_CONFIG_FILENAMES, SeedcordBuildRunner, type SeedcordDevConfig, SeedcordDevRunner, SeedcordInstanceLoader, TypeScriptProjectBuilder, defineConfig, resolveDefaultExport, version };
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/resolveDefaultExport.ts","../src/runtime/SeedcordInstanceLoader.ts","../src/config/ConfigLoader.ts","../src/config/schema.ts","../src/config/ConfigLocator.ts","../src/modules/RuntimeModuleLoader.ts","../src/runtime/SeedcordDevRunner.ts","../src/commands/DevCommand.ts","../src/builder/BootstrapWriter.ts","../src/builder/EntryPointCollector.ts","../src/builder/RelativeSpecifierTransformer.ts","../src/builder/TypeScriptProjectBuilder.ts","../src/runtime/SeedcordBuildRunner.ts","../src/commands/BuildCommand.ts","../src/index.ts"],"names":["resolveDefaultExport","moduleExport","current","visited","Set","isObjectWithDefault","has","add","default","value","Boolean","SeedcordInstanceLoader","modules","logger","load","instancePath","loadedModule","importModule","exported","instance","Promise","resolve","isSeedcordLike","SeedcordError","SeedcordErrorCode","CliInstanceInvalid","info","candidate","start","ConfigLoader","configPath","rawExport","config","unwrapConfig","configDir","dirname","root","resolveWithinRoot","entry","assertEntryWithinRoot","build","resolveBuildOptions","debug","outDir","tsconfig","bootstrap","configFile","raw","resolved","CliConfigInvalidExport","cfg","CliConfigMissingInstance","CliConfigMissingEntry","CliConfigInvalidRoot","CliConfigInvalidBuild","CliConfigInvalidBuildOutDir","CliConfigInvalidBuildTsconfig","CliConfigInvalidBuildBootstrap","normalized","target","isAbsolute","relativePath","relative","startsWith","CliConfigEntryOutsideRoot","bootstrapValue","resolveBootstrap","undefined","resolvedBuild","SEEDCORD_CONFIG_FILENAMES","defineConfig","ConfigLocator","locate","baseDir","process","cwd","normalizedBase","fullPath","join","existsSync","CliConfigNotFound","TS_EXTENSIONS","RuntimeModuleLoader","jiti","createJiti","url","cache","interopDefault","extensions","options","entryPath","CliEntryNotFound","shouldUseTsx","importWithTsx","importWithNode","filePath","forceTsx","extname","toLowerCase","specifier","pathToFileURL","href","resolveTsconfig","tsImport","parentURL","error","reason","Error","message","CliTsxImportFailed","nativeError","import","fallbackError","nativeReason","fallbackReason","CliImportFailed","findNearestTsconfig","startDir","parent","SeedcordDevSession","instanceLoader","CliStartFailed","SeedcordDevRunner","locator","configLoader","create","moduleLoader","run","loadConfig","session","DevCommand","runner","register","program","command","description","action","isSeedcordError","exitCode","exit","BootstrapWriter","write","emittedEntry","relativeImport","formatImportPath","contents","mkdir","recursive","writeFile","CliBootstrapWriteFailed","fragment","replace","EntryPointCollector","collect","tsconfigPath","parsed","parseTsconfig","entries","Map","fileNames","shouldEmitFile","set","createEntryKey","entryKey","size","entryMap","Object","fromEntries","primaryKey","ts","readConfigFile","sys","readFile","formatDiagnostics","CliBuildTsconfigInvalid","parseJsonConfigFileContent","errors","length","isWithinRoot","test","fallback","createEntryFallback","sanitized","base","basename","diagnostics","map","diagnostic","flattenDiagnosticMessageText","messageText","file","line","character","getLineAndCharacterOfPosition","fileName","RelativeSpecifierTransformer","transform","files","collectJavaScriptFiles","rewriteFile","rootDir","pending","pop","readdir","withFileTypes","name","isDirectory","push","isFile","endsWith","source","replacements","extractSpecifierReplacements","mutated","replacement","sort","a","b","slice","text","end","sourceText","sourceFile","createSourceFile","ScriptTarget","ES2022","ScriptKind","JS","visit","node","isImportDeclaration","isStringLiteralLike","moduleSpecifier","scheduleReplacement","isExportDeclaration","isCallExpression","expression","kind","SyntaxKind","ImportKeyword","arguments","arg","forEachChild","literal","updated","appendJsExtension","literalText","getText","quote","getStart","getEnd","TypeScriptProjectBuilder","specifierTransformer","tsupBuild","format","outExtension","js","shims","splitting","sourcemap","clean","skipNodeModulesBundle","minify","bundle","dts","platform","keepNames","treeshake","silent","CliBuildFailed","resolveEmittedEntry","CliBuildTsconfigNotFound","candidates","filter","firstCandidate","SeedcordBuildRunner","builder","bootstrapWriter","assertEntryExists","BuildCommand","version"],"mappings":"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","file":"index.mjs","sourcesContent":["export function resolveDefaultExport<TValue>(moduleExport: TValue): unknown {\n let current: unknown = moduleExport;\n const visited = new Set<unknown>();\n\n while (isObjectWithDefault(current) && !visited.has(current)) {\n visited.add(current);\n current = current.default;\n }\n\n return current;\n}\n\nfunction isObjectWithDefault(value: unknown): value is { default: unknown } {\n return Boolean(value && typeof value === 'object' && 'default' in value);\n}\n","import { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport { resolveDefaultExport } from '../utils/resolveDefaultExport';\n\nimport type { ModuleLoader } from '../modules/ModuleLoader';\nimport type { ILogger } from '@seedcord/types';\n\ntype MaybePromise<TValue> = TValue | Promise<TValue>;\n\ninterface SeedcordLike {\n start: () => MaybePromise<unknown>;\n}\n\nexport class SeedcordInstanceLoader {\n constructor(\n private readonly modules: ModuleLoader,\n private readonly logger: ILogger\n ) {}\n\n public async load(instancePath: string): Promise<SeedcordLike> {\n const loadedModule = await this.modules.importModule(instancePath);\n const exported = resolveDefaultExport(loadedModule);\n const instance = await Promise.resolve(exported);\n\n if (!this.isSeedcordLike(instance)) {\n throw new SeedcordError(SeedcordErrorCode.CliInstanceInvalid);\n }\n\n this.logger.info(`Loaded Seedcord instance from ${instancePath}`);\n return instance;\n }\n\n private isSeedcordLike(candidate: unknown): candidate is SeedcordLike {\n return Boolean(candidate) && typeof (candidate as SeedcordLike).start === 'function';\n }\n}\n","import { dirname, isAbsolute, relative, resolve } from 'node:path';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport { resolveDefaultExport } from '../utils/resolveDefaultExport';\n\nimport type {\n ResolvedSeedcordBuildConfig,\n ResolvedSeedcordDevConfig,\n SeedcordBuildConfig,\n SeedcordDevConfig\n} from './schema';\nimport type { ModuleLoader } from '../modules/ModuleLoader';\nimport type { ILogger } from '@seedcord/types';\n\nexport class ConfigLoader {\n constructor(\n private readonly modules: ModuleLoader,\n private readonly logger: ILogger\n ) {}\n\n public async load(configPath: string): Promise<ResolvedSeedcordDevConfig> {\n const loadedModule = await this.modules.importModule(configPath);\n const rawExport = resolveDefaultExport(loadedModule);\n const config = await this.unwrapConfig(rawExport);\n const configDir = dirname(configPath);\n\n const root = resolve(configDir, config.root ?? '.');\n const instance = this.resolveWithinRoot(root, config.instance);\n const entry = this.resolveWithinRoot(root, config.entry);\n this.assertEntryWithinRoot(root, entry);\n const build = this.resolveBuildOptions(configDir, config.build);\n\n this.logger.info(`Loaded configuration from ${configPath}`);\n this.logger.debug(`Resolved root: ${root}`);\n this.logger.debug(`Resolved instance: ${instance}`);\n this.logger.debug(`Resolved entry: ${entry}`);\n this.logger.debug(`Resolved build outDir: ${build.outDir}`);\n if (build.tsconfig) this.logger.debug(`Resolved build tsconfig: ${build.tsconfig}`);\n this.logger.debug(`Resolved bootstrap: ${build.bootstrap}`);\n\n return { instance, root, configFile: configPath, entry, build } satisfies ResolvedSeedcordDevConfig;\n }\n\n // eslint-disable-next-line complexity\n private async unwrapConfig(raw: unknown): Promise<SeedcordDevConfig> {\n const resolved = await Promise.resolve(raw);\n if (!resolved || typeof resolved !== 'object') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidExport);\n }\n const cfg = resolved as Partial<SeedcordDevConfig>;\n if (!cfg.instance || typeof cfg.instance !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigMissingInstance);\n }\n\n if (!cfg.entry || typeof cfg.entry !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigMissingEntry);\n }\n\n if (typeof cfg.root !== 'undefined' && typeof cfg.root !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidRoot);\n }\n\n if (typeof cfg.build !== 'undefined' && typeof cfg.build !== 'object') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidBuild);\n }\n\n if (cfg.build) {\n const { outDir, tsconfig, bootstrap } = cfg.build;\n if (typeof outDir !== 'undefined' && typeof outDir !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidBuildOutDir);\n }\n\n if (typeof tsconfig !== 'undefined' && typeof tsconfig !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidBuildTsconfig);\n }\n\n if (typeof bootstrap !== 'undefined' && typeof bootstrap !== 'string') {\n throw new SeedcordError(SeedcordErrorCode.CliConfigInvalidBuildBootstrap);\n }\n }\n\n const normalized: SeedcordDevConfig = { instance: cfg.instance, entry: cfg.entry };\n if (typeof cfg.root === 'string') normalized.root = cfg.root;\n if (cfg.build) normalized.build = cfg.build;\n\n return normalized;\n }\n\n private resolveWithinRoot(root: string, target: string): string {\n if (isAbsolute(target)) return target;\n return resolve(root, target);\n }\n\n private assertEntryWithinRoot(root: string, entry: string): void {\n const relativePath = relative(root, entry);\n if (relativePath.startsWith('..') || isAbsolute(relativePath)) {\n throw new SeedcordError(SeedcordErrorCode.CliConfigEntryOutsideRoot, [entry, root]);\n }\n }\n\n private resolveBuildOptions(\n configDir: string,\n build: SeedcordBuildConfig | undefined\n ): ResolvedSeedcordBuildConfig {\n const outDir = resolve(configDir, build?.outDir ?? 'dist');\n const bootstrapValue = build?.bootstrap;\n const bootstrap = bootstrapValue ? this.resolveBootstrap(outDir, bootstrapValue) : resolve(outDir, 'index.mjs');\n const tsconfig = build?.tsconfig ? resolve(configDir, build.tsconfig) : undefined;\n\n const resolvedBuild: ResolvedSeedcordBuildConfig = tsconfig\n ? { outDir, bootstrap, tsconfig }\n : { outDir, bootstrap };\n\n return resolvedBuild;\n }\n\n private resolveBootstrap(outDir: string, bootstrap: string): string {\n if (isAbsolute(bootstrap)) return bootstrap;\n return resolve(outDir, bootstrap);\n }\n}\n","export interface SeedcordBuildConfig {\n /**\n * Directory where build artifacts should be emitted. Defaults to ./dist relative to the config directory.\n */\n outDir?: string;\n /**\n * Optional tsconfig path to use for builds. Defaults to the nearest tsconfig.build.json or tsconfig.json.\n */\n tsconfig?: string;\n /**\n * File name (or relative path) for the bootstrap file emitted inside the build output.\n */\n bootstrap?: string;\n}\n\n/**\n * Configuration used by the Seedcord CLI when running `seedcord dev` or `seedcord build`.\n */\nexport interface SeedcordDevConfig {\n /**\n * Root directory used for resolving relative paths. Defaults to the config directory.\n */\n root?: string;\n /**\n * Path to the module whose default export is a configured Seedcord instance.\n */\n instance: string;\n /**\n * Entry file that should be executed when starting the bot (and copied into the build output).\n */\n entry: string;\n /**\n * Optional build configuration overrides.\n */\n build?: SeedcordBuildConfig;\n}\n\nexport interface ResolvedSeedcordBuildConfig {\n outDir: string;\n bootstrap: string;\n tsconfig?: string;\n}\n\n/**\n * Fully resolved configuration with absolute file system paths.\n */\nexport interface ResolvedSeedcordDevConfig extends Required<Omit<SeedcordDevConfig, 'build'>> {\n /**\n * Absolute path to the config file that produced this resolution.\n */\n configFile: string;\n /**\n * Resolved build options with absolute paths.\n */\n build: ResolvedSeedcordBuildConfig;\n}\n\n/**\n * Supported configuration filenames discovered by the CLI.\n */\nexport const SEEDCORD_CONFIG_FILENAMES = ['seedcord.config.ts', 'seedcord.config.mts'] as const;\n\n/**\n * Helper so config files receive proper type inference.\n */\nexport function defineConfig(config: SeedcordDevConfig): SeedcordDevConfig {\n return config;\n}\n","import { existsSync } from 'node:fs';\nimport { join, resolve } from 'node:path';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport { SEEDCORD_CONFIG_FILENAMES } from './schema';\n\nimport type { ILogger } from '@seedcord/types';\n\nexport class ConfigLocator {\n constructor(private readonly logger: ILogger) {}\n\n public locate(baseDir = process.cwd()): string {\n const normalizedBase = resolve(baseDir);\n for (const candidate of SEEDCORD_CONFIG_FILENAMES) {\n const fullPath = join(normalizedBase, candidate);\n if (existsSync(fullPath)) {\n this.logger.debug(`Found config at ${fullPath}`);\n return fullPath;\n }\n }\n\n throw new SeedcordError(SeedcordErrorCode.CliConfigNotFound, [normalizedBase, SEEDCORD_CONFIG_FILENAMES]);\n }\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, extname, resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\nimport { createJiti } from 'jiti';\nimport { tsImport } from 'tsx/esm/api';\n\nimport type { ModuleLoader } from './ModuleLoader';\n\ntype TsconfigOption = string | false;\n\ninterface RuntimeModuleLoaderOptions {\n tsconfig?: TsconfigOption;\n forceTsx?: boolean;\n}\n\nconst TS_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts']);\n\nexport class RuntimeModuleLoader implements ModuleLoader {\n private readonly jiti = createJiti(import.meta.url, {\n cache: false,\n interopDefault: true,\n extensions: ['.ts', '.tsx', '.mts', '.cts', '.js', '.mjs', '.cjs']\n });\n\n constructor(private readonly options: RuntimeModuleLoaderOptions = {}) {}\n\n public async importModule<TModule = unknown>(entryPath: string): Promise<TModule> {\n const normalized = resolve(entryPath);\n if (!existsSync(normalized)) {\n throw new SeedcordError(SeedcordErrorCode.CliEntryNotFound, [normalized]);\n }\n\n if (this.shouldUseTsx(normalized)) {\n return this.importWithTsx<TModule>(normalized);\n }\n\n return this.importWithNode<TModule>(normalized);\n }\n\n private shouldUseTsx(filePath: string): boolean {\n if (this.options.forceTsx) return true;\n return TS_EXTENSIONS.has(extname(filePath).toLowerCase());\n }\n\n private async importWithTsx<TModule = unknown>(entryPath: string): Promise<TModule> {\n const specifier = pathToFileURL(entryPath).href;\n const tsconfig = this.resolveTsconfig(entryPath);\n\n try {\n return (await tsImport(specifier, { parentURL: import.meta.url, tsconfig })) as TModule;\n } catch (error: unknown) {\n const reason = error instanceof Error ? error.message : 'Unknown tsx error';\n throw new SeedcordError(SeedcordErrorCode.CliTsxImportFailed, [entryPath, reason]);\n }\n }\n\n private async importWithNode<TModule = unknown>(entryPath: string): Promise<TModule> {\n const specifier = pathToFileURL(entryPath).href;\n\n try {\n return (await import(specifier)) as TModule;\n } catch (nativeError: unknown) {\n try {\n return await this.jiti.import(entryPath);\n } catch (fallbackError: unknown) {\n const nativeReason = nativeError instanceof Error ? nativeError.message : 'Unknown ESM import error';\n const fallbackReason = fallbackError instanceof Error ? fallbackError.message : 'Unknown jiti error';\n throw new SeedcordError(SeedcordErrorCode.CliImportFailed, [entryPath, nativeReason, fallbackReason]);\n }\n }\n }\n\n private resolveTsconfig(entryPath: string): TsconfigOption {\n if (typeof this.options.tsconfig !== 'undefined') {\n return this.options.tsconfig;\n }\n\n return this.findNearestTsconfig(dirname(entryPath)) ?? false;\n }\n\n private findNearestTsconfig(startDir: string): string | undefined {\n const candidate = resolve(startDir, 'tsconfig.json');\n if (existsSync(candidate)) return candidate;\n\n const parent = dirname(startDir);\n if (parent === startDir) return undefined;\n\n return this.findNearestTsconfig(parent);\n }\n}\n","import { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport { SeedcordInstanceLoader } from './SeedcordInstanceLoader';\nimport { ConfigLoader } from '../config/ConfigLoader';\nimport { ConfigLocator } from '../config/ConfigLocator';\nimport { RuntimeModuleLoader } from '../modules/RuntimeModuleLoader';\n\nimport type { ResolvedSeedcordDevConfig } from '../config/schema';\nimport type { ILogger } from '@seedcord/types';\n\nclass SeedcordDevSession {\n constructor(\n private readonly config: ResolvedSeedcordDevConfig,\n private readonly instanceLoader: SeedcordInstanceLoader,\n private readonly logger: ILogger\n ) {}\n\n public async start(): Promise<void> {\n const instance = await this.instanceLoader.load(this.config.instance);\n\n try {\n this.logger.info('Starting Seedcord instance...');\n await instance.start();\n this.logger.info('Seedcord is running.');\n } catch (error: unknown) {\n const reason = error instanceof Error ? error.message : 'Unknown error';\n throw new SeedcordError(SeedcordErrorCode.CliStartFailed, [this.config.instance, reason]);\n }\n }\n}\n\n/**\n * Coordinates config discovery, loading, and starting a Seedcord instance.\n */\nexport class SeedcordDevRunner {\n constructor(\n private readonly locator: ConfigLocator,\n private readonly configLoader: ConfigLoader,\n private readonly instanceLoader: SeedcordInstanceLoader,\n private readonly logger: ILogger\n ) {}\n\n public static create(logger: ILogger): SeedcordDevRunner {\n const moduleLoader = new RuntimeModuleLoader();\n const locator = new ConfigLocator(logger);\n const configLoader = new ConfigLoader(moduleLoader, logger);\n const instanceLoader = new SeedcordInstanceLoader(moduleLoader, logger);\n\n return new SeedcordDevRunner(locator, configLoader, instanceLoader, logger);\n }\n\n public async run(): Promise<void> {\n const config = await this.loadConfig();\n const session = new SeedcordDevSession(config, this.instanceLoader, this.logger);\n await session.start();\n }\n\n private async loadConfig(): Promise<ResolvedSeedcordDevConfig> {\n const configPath = this.locator.locate();\n return this.configLoader.load(configPath);\n }\n}\n","import { isSeedcordError } from '@seedcord/services';\n\nimport { SeedcordDevRunner } from '../runtime/SeedcordDevRunner';\n\nimport type { ILogger } from '@seedcord/types';\nimport type { Command } from 'commander';\n\nexport class DevCommand {\n constructor(\n private readonly runner: SeedcordDevRunner,\n private readonly logger: ILogger\n ) {}\n\n public register(program: Command): void {\n program\n .command('dev')\n .description('Run a Seedcord instance from seedcord.config.ts')\n .action(async () => {\n try {\n await this.runner.run();\n } catch (error: unknown) {\n this.logger.error('Seedcord dev failed', error);\n if (isSeedcordError(error)) process.exitCode = 1;\n else process.exit(1);\n }\n });\n }\n\n public static create(logger: ILogger): DevCommand {\n return new DevCommand(SeedcordDevRunner.create(logger), logger);\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, relative } from 'node:path';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport type { ResolvedSeedcordDevConfig } from '../config/schema';\nimport type { ILogger } from '@seedcord/types';\n\nexport class BootstrapWriter {\n constructor(private readonly logger: ILogger) {}\n\n public async write(config: ResolvedSeedcordDevConfig, emittedEntry: string): Promise<void> {\n const target = config.build.bootstrap;\n const relativeImport = this.formatImportPath(relative(dirname(target), emittedEntry));\n const contents = `import '${relativeImport}';\\n`;\n\n try {\n await mkdir(dirname(target), { recursive: true });\n await writeFile(target, contents, 'utf8');\n } catch (error: unknown) {\n const reason = error instanceof Error ? error.message : 'Unknown error';\n throw new SeedcordError(SeedcordErrorCode.CliBootstrapWriteFailed, [target, reason]);\n }\n\n this.logger.info(`Bootstrap file created at ${target}`);\n }\n\n private formatImportPath(fragment: string): string {\n let normalized = fragment.replace(/\\\\/g, '/');\n if (!normalized.startsWith('.')) normalized = `./${normalized}`;\n return normalized;\n }\n}\n","import { basename, dirname, extname, relative } from 'node:path';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\nimport ts from 'typescript';\n\nimport type { ResolvedSeedcordDevConfig } from '../config/schema';\n\nexport interface EntryPointCollection {\n entryMap: Record<string, string>;\n primaryKey: string;\n}\n\nexport class EntryPointCollector {\n public collect(config: ResolvedSeedcordDevConfig, tsconfigPath: string): EntryPointCollection {\n const parsed = this.parseTsconfig(tsconfigPath);\n const entries = new Map<string, string>();\n\n for (const filePath of parsed.fileNames) {\n if (!this.shouldEmitFile(config, filePath)) continue;\n entries.set(this.createEntryKey(config, filePath), filePath);\n }\n\n const entryKey = this.createEntryKey(config, config.entry);\n if (!entries.size || !entries.has(entryKey)) entries.set(entryKey, config.entry);\n\n return { entryMap: Object.fromEntries(entries), primaryKey: entryKey } satisfies EntryPointCollection;\n }\n\n private parseTsconfig(tsconfigPath: string): ts.ParsedCommandLine {\n const configFile = ts.readConfigFile(tsconfigPath, (filePath) => ts.sys.readFile(filePath));\n if (configFile.error) {\n const reason = this.formatDiagnostics([configFile.error]);\n throw new SeedcordError(SeedcordErrorCode.CliBuildTsconfigInvalid, [tsconfigPath, reason]);\n }\n\n const parsed = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n dirname(tsconfigPath),\n undefined,\n tsconfigPath\n );\n if (parsed.errors.length) {\n const reason = this.formatDiagnostics(parsed.errors);\n throw new SeedcordError(SeedcordErrorCode.CliBuildTsconfigInvalid, [tsconfigPath, reason]);\n }\n\n return parsed;\n }\n\n private shouldEmitFile(config: ResolvedSeedcordDevConfig, filePath: string): boolean {\n if (!this.isWithinRoot(config.root, filePath)) return false;\n if (/\\.d\\.[cm]?ts$/i.test(filePath)) return false;\n return /\\.[cm]?tsx?$/i.test(filePath);\n }\n\n private isWithinRoot(root: string, target: string): boolean {\n const relativePath = relative(root, target);\n return relativePath === '' || (!relativePath.startsWith('..') && !relativePath.startsWith('..\\\\'));\n }\n\n private createEntryKey(config: ResolvedSeedcordDevConfig, filePath: string): string {\n const relativePath = relative(config.root, filePath);\n const fallback = this.createEntryFallback(filePath);\n if (relativePath.startsWith('..')) return fallback;\n\n const sanitized = relativePath\n .replace(/\\\\/g, '/')\n .replace(/^\\.\\//, '')\n .replace(/\\.[^.]+$/, '')\n .replace(/[^a-zA-Z0-9\\-/_]/g, '-');\n\n return sanitized || fallback;\n }\n\n private createEntryFallback(filePath: string): string {\n const base = basename(filePath, extname(filePath)) || 'seedcord-entry';\n return base.replace(/[^a-zA-Z0-9-_]/g, '-');\n }\n\n private formatDiagnostics(diagnostics: readonly ts.Diagnostic[]): string {\n return diagnostics\n .map((diagnostic) => {\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n');\n if (diagnostic.file && typeof diagnostic.start === 'number') {\n const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n return `${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`;\n }\n\n return message;\n })\n .join('\\n');\n }\n}\n","import { readdir, readFile, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\n\nimport ts from 'typescript';\n\ninterface SpecifierReplacement {\n start: number;\n end: number;\n text: string;\n}\n\nexport class RelativeSpecifierTransformer {\n public async transform(outDir: string): Promise<void> {\n const files = await this.collectJavaScriptFiles(outDir);\n for (const filePath of files) {\n await this.rewriteFile(filePath);\n }\n }\n\n private async collectJavaScriptFiles(rootDir: string): Promise<string[]> {\n const pending = [rootDir];\n const files: string[] = [];\n\n while (pending.length) {\n const current = pending.pop();\n if (!current) continue;\n\n const entries = await readdir(current, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = resolve(current, entry.name);\n if (entry.isDirectory()) pending.push(fullPath);\n else if (entry.isFile() && entry.name.endsWith('.js')) files.push(fullPath);\n }\n }\n\n return files;\n }\n\n private async rewriteFile(filePath: string): Promise<void> {\n const source = await readFile(filePath, 'utf8');\n const replacements = this.extractSpecifierReplacements(source);\n if (!replacements.length) return;\n\n let mutated = source;\n for (const replacement of replacements.sort((a, b) => b.start - a.start)) {\n mutated = `${mutated.slice(0, replacement.start)}${replacement.text}${mutated.slice(replacement.end)}`;\n }\n\n await writeFile(filePath, mutated, 'utf8');\n }\n\n private extractSpecifierReplacements(sourceText: string): SpecifierReplacement[] {\n const sourceFile = ts.createSourceFile(\n 'generated.js',\n sourceText,\n ts.ScriptTarget.ES2022,\n true,\n ts.ScriptKind.JS\n );\n const replacements: SpecifierReplacement[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node) && ts.isStringLiteralLike(node.moduleSpecifier)) {\n this.scheduleReplacement(sourceFile, node.moduleSpecifier, replacements);\n } else if (\n ts.isExportDeclaration(node) &&\n node.moduleSpecifier &&\n ts.isStringLiteralLike(node.moduleSpecifier)\n ) {\n this.scheduleReplacement(sourceFile, node.moduleSpecifier, replacements);\n } else if (\n ts.isCallExpression(node) &&\n node.expression.kind === ts.SyntaxKind.ImportKeyword &&\n node.arguments.length === 1\n ) {\n const [arg] = node.arguments;\n if (arg && ts.isStringLiteralLike(arg)) {\n this.scheduleReplacement(sourceFile, arg, replacements);\n }\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return replacements;\n }\n\n private scheduleReplacement(\n sourceFile: ts.SourceFile,\n literal: ts.StringLiteralLike,\n replacements: SpecifierReplacement[]\n ): void {\n const updated = this.appendJsExtension(literal.text);\n if (updated === literal.text) return;\n\n const literalText = literal.getText(sourceFile);\n const quote = literalText.startsWith('`') ? '`' : literalText.startsWith(\"'\") ? \"'\" : '\"';\n replacements.push({\n start: literal.getStart(sourceFile),\n end: literal.getEnd(),\n text: `${quote}${updated}${quote}`\n });\n }\n\n private appendJsExtension(specifier: string): string {\n if (!specifier.startsWith('./') && !specifier.startsWith('../')) return specifier;\n if (/\\.(?:[cm]?js|json)$/i.test(specifier)) return specifier;\n return `${specifier}.js`;\n }\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\nimport { build as tsupBuild } from 'tsup';\n\nimport { EntryPointCollector } from './EntryPointCollector';\nimport { RelativeSpecifierTransformer } from './RelativeSpecifierTransformer';\n\nimport type { ResolvedSeedcordDevConfig } from '../config/schema';\nimport type { ILogger } from '@seedcord/types';\n\nexport interface BuildResult {\n emittedEntry: string;\n}\n\nexport class TypeScriptProjectBuilder {\n constructor(\n private readonly logger: ILogger,\n private readonly entries = new EntryPointCollector(),\n private readonly specifierTransformer = new RelativeSpecifierTransformer()\n ) {}\n\n public async build(config: ResolvedSeedcordDevConfig): Promise<BuildResult> {\n const tsconfigPath = this.resolveTsconfig(config);\n const { entryMap, primaryKey } = this.entries.collect(config, tsconfigPath);\n\n this.logger.info(`Building Seedcord project via ${tsconfigPath}`);\n\n try {\n await tsupBuild({\n entry: entryMap,\n outDir: config.build.outDir,\n format: ['esm'],\n outExtension: () => ({ js: '.js' }),\n shims: false,\n splitting: false,\n sourcemap: true,\n clean: false,\n skipNodeModulesBundle: true,\n minify: false,\n bundle: false,\n dts: false,\n target: 'node22',\n platform: 'node',\n keepNames: true,\n treeshake: false,\n tsconfig: tsconfigPath,\n silent: true\n });\n await this.specifierTransformer.transform(config.build.outDir);\n } catch (error: unknown) {\n const reason = error instanceof Error ? error.message : 'Unknown build error';\n throw new SeedcordError(SeedcordErrorCode.CliBuildFailed, [reason]);\n }\n\n const emittedEntry = this.resolveEmittedEntry(config.build.outDir, primaryKey);\n if (!existsSync(emittedEntry)) {\n throw new SeedcordError(SeedcordErrorCode.CliBuildFailed, [\n `Expected output file ${emittedEntry} missing after build`\n ]);\n }\n\n this.logger.info(`Emitted entry: ${emittedEntry}`);\n return { emittedEntry } satisfies BuildResult;\n }\n\n private resolveTsconfig(config: ResolvedSeedcordDevConfig): string {\n if (config.build.tsconfig) {\n if (!existsSync(config.build.tsconfig)) {\n throw new SeedcordError(SeedcordErrorCode.CliBuildTsconfigNotFound, [config.build.tsconfig]);\n }\n\n return config.build.tsconfig;\n }\n\n const configDir = dirname(config.configFile);\n const candidates = ['tsconfig.build.json', 'tsconfig.json']\n .map((file) => resolve(configDir, file))\n .filter((candidate) => existsSync(candidate));\n\n const [firstCandidate] = candidates;\n if (firstCandidate) return firstCandidate;\n\n throw new SeedcordError(SeedcordErrorCode.CliBuildTsconfigNotFound, [configDir]);\n }\n\n private resolveEmittedEntry(outDir: string, entryKey: string): string {\n return resolve(outDir, `${entryKey}.js`);\n }\n}\n","import { existsSync } from 'node:fs';\n\nimport { SeedcordError, SeedcordErrorCode } from '@seedcord/services';\n\nimport { BootstrapWriter } from '../builder/BootstrapWriter';\nimport { TypeScriptProjectBuilder } from '../builder/TypeScriptProjectBuilder';\nimport { ConfigLoader } from '../config/ConfigLoader';\nimport { ConfigLocator } from '../config/ConfigLocator';\nimport { RuntimeModuleLoader } from '../modules/RuntimeModuleLoader';\n\nimport type { ResolvedSeedcordDevConfig } from '../config/schema';\nimport type { ILogger } from '@seedcord/types';\n\nexport class SeedcordBuildRunner {\n constructor(\n private readonly locator: ConfigLocator,\n private readonly configLoader: ConfigLoader,\n private readonly builder: TypeScriptProjectBuilder,\n private readonly bootstrapWriter: BootstrapWriter,\n private readonly logger: ILogger\n ) {}\n\n public static create(logger: ILogger): SeedcordBuildRunner {\n const moduleLoader = new RuntimeModuleLoader();\n const locator = new ConfigLocator(logger);\n const configLoader = new ConfigLoader(moduleLoader, logger);\n const builder = new TypeScriptProjectBuilder(logger);\n const bootstrapWriter = new BootstrapWriter(logger);\n\n return new SeedcordBuildRunner(locator, configLoader, builder, bootstrapWriter, logger);\n }\n\n public async run(): Promise<void> {\n const config = await this.loadConfig();\n this.assertEntryExists(config.entry);\n const { emittedEntry } = await this.builder.build(config);\n await this.bootstrapWriter.write(config, emittedEntry);\n this.logger.info('Seedcord build finished successfully.');\n }\n\n private async loadConfig(): Promise<ResolvedSeedcordDevConfig> {\n const configPath = this.locator.locate();\n return this.configLoader.load(configPath);\n }\n\n private assertEntryExists(entryPath: string): void {\n if (!existsSync(entryPath)) {\n throw new SeedcordError(SeedcordErrorCode.CliEntryNotFound, [entryPath]);\n }\n }\n}\n","import { isSeedcordError } from '@seedcord/services';\n\nimport { SeedcordBuildRunner } from '../runtime/SeedcordBuildRunner';\n\nimport type { ILogger } from '@seedcord/types';\nimport type { Command } from 'commander';\n\nexport class BuildCommand {\n constructor(\n private readonly runner: SeedcordBuildRunner,\n private readonly logger: ILogger\n ) {}\n\n public register(program: Command): void {\n program\n .command('build')\n .description('Compile a Seedcord project using seedcord.config.ts')\n .action(async () => {\n try {\n await this.runner.run();\n } catch (error: unknown) {\n this.logger.error('Seedcord build failed', error);\n if (isSeedcordError(error)) process.exitCode = 1;\n else process.exit(1);\n }\n });\n }\n\n public static create(logger: ILogger): BuildCommand {\n return new BuildCommand(SeedcordBuildRunner.create(logger), logger);\n }\n}\n","// CLI command exports\nexport { DevCommand } from './commands/DevCommand';\nexport { BuildCommand } from './commands/BuildCommand';\n\n// Config schema and helpers\nexport { ConfigLoader } from './config/ConfigLoader';\nexport { ConfigLocator } from './config/ConfigLocator';\nexport { SEEDCORD_CONFIG_FILENAMES, defineConfig } from './config/schema';\nexport type { ResolvedSeedcordDevConfig, SeedcordDevConfig } from './config/schema';\n\n// Module loading utilities\nexport type { ModuleLoader } from './modules/ModuleLoader';\nexport { RuntimeModuleLoader } from './modules/RuntimeModuleLoader';\n\n// Runtime helpers\nexport { SeedcordDevRunner } from './runtime/SeedcordDevRunner';\nexport { SeedcordBuildRunner } from './runtime/SeedcordBuildRunner';\nexport { TypeScriptProjectBuilder } from './builder/TypeScriptProjectBuilder';\nexport { BootstrapWriter } from './builder/BootstrapWriter';\nexport { SeedcordInstanceLoader } from './runtime/SeedcordInstanceLoader';\n\n// Shared utilities\nexport { resolveDefaultExport } from './utils/resolveDefaultExport';\n\nexport const version = process.env.PACKAGE_VERSION ?? '0.0.0';\n"]}
|