@a35hie/ts-pkg 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # ts-pkg-config
1
+ # TS Package Config
2
2
 
3
3
  ✨ TypeScript-based `package.json` with magical features.
4
4
 
@@ -70,9 +70,9 @@ export default definePackageConfig({
70
70
  Generate your `package.json`:
71
71
 
72
72
  ```bash
73
- bun run ts-pkg-config
73
+ bunx ts-pkg
74
74
  # or
75
- bun run src/main.ts package.config.ts package.json
75
+ bunx ts-pkg package.config.ts package.json
76
76
  ```
77
77
 
78
78
  ## Script Presets
package/build.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import dts from 'bun-plugin-dts'
2
2
 
3
+ // Build library
3
4
  await Bun.build({
4
5
  entrypoints: ['./src/main.ts'],
5
6
  outdir: './dist',
@@ -11,4 +12,15 @@ await Bun.build({
11
12
  plugins: [dts()],
12
13
  })
13
14
 
15
+ // Build CLI
16
+ await Bun.build({
17
+ entrypoints: ['./src/cli.ts'],
18
+ outdir: './dist',
19
+ format: 'esm',
20
+ target: 'node',
21
+ splitting: false,
22
+ minify: false,
23
+ banner: '#!/usr/bin/env bun',
24
+ })
25
+
14
26
  console.log('✨ Build complete')
package/dist/cli.js ADDED
@@ -0,0 +1,313 @@
1
+ #!/usr/bin/env bun
2
+ import { createRequire } from "node:module";
3
+ var __create = Object.create;
4
+ var __getProtoOf = Object.getPrototypeOf;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __toESM = (mod, isNodeMode, target) => {
9
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
10
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
+ for (let key of __getOwnPropNames(mod))
12
+ if (!__hasOwnProp.call(to, key))
13
+ __defProp(to, key, {
14
+ get: () => mod[key],
15
+ enumerable: true
16
+ });
17
+ return to;
18
+ };
19
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
20
+
21
+ // src/presets/scripts.ts
22
+ var scriptPresets = {
23
+ typescript: {
24
+ build: "tsc",
25
+ "build:watch": "tsc --watch",
26
+ typecheck: "tsc --noEmit"
27
+ },
28
+ react: {
29
+ dev: "vite",
30
+ build: "vite build",
31
+ preview: "vite preview"
32
+ },
33
+ node: {
34
+ start: "node dist/index.js",
35
+ dev: "tsx watch src/index.ts",
36
+ build: "tsup src/index.ts --format esm,cjs --dts"
37
+ },
38
+ testing: {
39
+ test: "vitest",
40
+ "test:watch": "vitest watch",
41
+ "test:coverage": "vitest --coverage"
42
+ },
43
+ prettier: {
44
+ format: "prettier --write .",
45
+ "format:check": "prettier --check ."
46
+ },
47
+ eslint: {
48
+ lint: "eslint .",
49
+ "lint:fix": "eslint . --fix"
50
+ }
51
+ };
52
+ function getPresetScripts(presets) {
53
+ const merged = {};
54
+ for (const preset of presets) {
55
+ const scripts = scriptPresets[preset];
56
+ if (scripts) {
57
+ Object.assign(merged, scripts);
58
+ }
59
+ }
60
+ return merged;
61
+ }
62
+ function mergeScripts(presetScripts, customScripts) {
63
+ return { ...presetScripts, ...customScripts };
64
+ }
65
+
66
+ // src/resolvers/dependencies.ts
67
+ function parseDependency(dep) {
68
+ if (typeof dep === "string") {
69
+ const atIndex = dep.lastIndexOf("@");
70
+ if (atIndex > 0) {
71
+ return {
72
+ name: dep.slice(0, atIndex),
73
+ version: dep.slice(atIndex + 1)
74
+ };
75
+ }
76
+ return { name: dep };
77
+ }
78
+ const [name, version] = Object.entries(dep)[0];
79
+ return { name, version };
80
+ }
81
+ async function fetchLatestVersion(packageName) {
82
+ const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`;
83
+ const response = await fetch(url, {
84
+ headers: { Accept: "application/json" }
85
+ });
86
+ if (!response.ok) {
87
+ throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`);
88
+ }
89
+ const data = await response.json();
90
+ return data["dist-tags"].latest;
91
+ }
92
+ var versionCache = new Map;
93
+ async function resolveDependenciesCached(deps) {
94
+ if (!deps) {
95
+ return {};
96
+ }
97
+ if (!Array.isArray(deps)) {
98
+ return deps;
99
+ }
100
+ if (deps.length === 0) {
101
+ return {};
102
+ }
103
+ const results = [];
104
+ for (const dep of deps) {
105
+ const { name, version } = parseDependency(dep);
106
+ if (version) {
107
+ results.push([name, version]);
108
+ continue;
109
+ }
110
+ let resolvedVersion = versionCache.get(name);
111
+ if (!resolvedVersion) {
112
+ resolvedVersion = `^${await fetchLatestVersion(name)}`;
113
+ versionCache.set(name, resolvedVersion);
114
+ }
115
+ results.push([name, resolvedVersion]);
116
+ }
117
+ return Object.fromEntries(results);
118
+ }
119
+
120
+ // src/utils/merge.ts
121
+ function deepMerge(target, source) {
122
+ const result = { ...target };
123
+ for (const key of Object.keys(source)) {
124
+ const sourceValue = source[key];
125
+ const targetValue = target[key];
126
+ if (sourceValue === undefined)
127
+ continue;
128
+ if (typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && typeof targetValue === "object" && targetValue !== null && !Array.isArray(targetValue)) {
129
+ result[key] = deepMerge(targetValue, sourceValue);
130
+ } else {
131
+ result[key] = sourceValue;
132
+ }
133
+ }
134
+ return result;
135
+ }
136
+ function mergeDependencies(target, source) {
137
+ if (!target && !source)
138
+ return;
139
+ if (!target)
140
+ return source;
141
+ if (!source)
142
+ return target;
143
+ if (Array.isArray(target) && Array.isArray(source)) {
144
+ return [...target, ...source];
145
+ }
146
+ if (!Array.isArray(target) && !Array.isArray(source)) {
147
+ return { ...target, ...source };
148
+ }
149
+ const targetObj = Array.isArray(target) ? {} : target;
150
+ const sourceObj = Array.isArray(source) ? {} : source;
151
+ const targetArr = Array.isArray(target) ? target : [];
152
+ const sourceArr = Array.isArray(source) ? source : [];
153
+ return [...targetArr, ...sourceArr, { ...targetObj, ...sourceObj }];
154
+ }
155
+ async function resolveExtends(config) {
156
+ if (!config.extends) {
157
+ return config;
158
+ }
159
+ let baseConfig;
160
+ if (typeof config.extends === "string") {
161
+ const imported = await import(config.extends);
162
+ baseConfig = imported.default ?? imported;
163
+ } else {
164
+ baseConfig = config.extends;
165
+ }
166
+ baseConfig = await resolveExtends(baseConfig);
167
+ const { extends: _, ...currentWithoutExtends } = config;
168
+ return {
169
+ ...baseConfig,
170
+ ...currentWithoutExtends,
171
+ dependencies: mergeDependencies(baseConfig.dependencies, currentWithoutExtends.dependencies),
172
+ devDependencies: mergeDependencies(baseConfig.devDependencies, currentWithoutExtends.devDependencies),
173
+ peerDependencies: mergeDependencies(baseConfig.peerDependencies, currentWithoutExtends.peerDependencies),
174
+ scripts: { ...baseConfig.scripts, ...currentWithoutExtends.scripts },
175
+ scriptPresets: [
176
+ ...baseConfig.scriptPresets ?? [],
177
+ ...currentWithoutExtends.scriptPresets ?? []
178
+ ]
179
+ };
180
+ }
181
+
182
+ // src/utils/conditions.ts
183
+ function getContext() {
184
+ return {
185
+ env: "development",
186
+ platform: process.platform,
187
+ nodeVersion: process.version,
188
+ ci: process.env.CI === "true" || process.env.CI === "1"
189
+ };
190
+ }
191
+ function evaluateCondition(when, context) {
192
+ if (when.env !== undefined && context.env !== when.env) {
193
+ return false;
194
+ }
195
+ if (when.platform !== undefined && context.platform !== when.platform) {
196
+ return false;
197
+ }
198
+ if (when.ci !== undefined && context.ci !== when.ci) {
199
+ return false;
200
+ }
201
+ if (when.nodeVersion !== undefined) {
202
+ if (!context.nodeVersion.startsWith(when.nodeVersion)) {
203
+ return false;
204
+ }
205
+ }
206
+ return true;
207
+ }
208
+ function applyConditions(baseConfig, conditions) {
209
+ if (!conditions || conditions.length === 0) {
210
+ return baseConfig;
211
+ }
212
+ const context = getContext();
213
+ let result = { ...baseConfig };
214
+ for (const condition of conditions) {
215
+ if (evaluateCondition(condition.when, context)) {
216
+ result = deepMerge(result, condition.set);
217
+ }
218
+ }
219
+ return result;
220
+ }
221
+
222
+ // src/generator/createPackageJson.ts
223
+ async function createPackageJson(config, options = {}) {
224
+ const { indent = 2 } = options;
225
+ let resolved = await resolveExtends(config);
226
+ const presetScripts = resolved.scriptPresets ? getPresetScripts(resolved.scriptPresets) : {};
227
+ const finalScripts = mergeScripts(presetScripts, resolved.scripts);
228
+ const [dependencies, devDependencies, peerDependencies] = await Promise.all([
229
+ resolveDependenciesCached(resolved.dependencies),
230
+ resolveDependenciesCached(resolved.devDependencies),
231
+ resolveDependenciesCached(resolved.peerDependencies)
232
+ ]);
233
+ const packageJson = {
234
+ name: resolved.name,
235
+ ...resolved.version && { version: resolved.version },
236
+ ...resolved.description && { description: resolved.description },
237
+ ...resolved.keywords?.length && { keywords: resolved.keywords },
238
+ ...resolved.homepage && { homepage: resolved.homepage },
239
+ ...resolved.bugs && { bugs: resolved.bugs },
240
+ ...resolved.license && { license: resolved.license },
241
+ ...resolved.author && { author: resolved.author },
242
+ ...resolved.contributors?.length && {
243
+ contributors: resolved.contributors
244
+ },
245
+ ...resolved.repository && { repository: resolved.repository },
246
+ ...resolved.type && { type: resolved.type },
247
+ ...resolved.main && { main: resolved.main },
248
+ ...resolved.module && { module: resolved.module },
249
+ ...resolved.types && { types: resolved.types },
250
+ ...resolved.exports && { exports: resolved.exports },
251
+ ...resolved.bin && { bin: resolved.bin },
252
+ ...resolved.files?.length && { files: resolved.files },
253
+ ...Object.keys(finalScripts).length && { scripts: finalScripts },
254
+ ...Object.keys(dependencies).length && { dependencies },
255
+ ...Object.keys(devDependencies).length && { devDependencies },
256
+ ...Object.keys(peerDependencies).length && { peerDependencies },
257
+ ...resolved.optionalDependencies && {
258
+ optionalDependencies: resolved.optionalDependencies
259
+ },
260
+ ...resolved.engines && { engines: resolved.engines },
261
+ ...resolved.os?.length && { os: resolved.os },
262
+ ...resolved.cpu?.length && { cpu: resolved.cpu },
263
+ ...resolved.private !== undefined && { private: resolved.private },
264
+ ...resolved.publishConfig && { publishConfig: resolved.publishConfig },
265
+ ...resolved.workspaces?.length && { workspaces: resolved.workspaces }
266
+ };
267
+ const finalPackageJson = applyConditions(packageJson, resolved.conditions);
268
+ return JSON.stringify(finalPackageJson, null, indent);
269
+ }
270
+ async function writePackageJson(config, options = {}) {
271
+ const { outputPath = "package.json" } = options;
272
+ const json = await createPackageJson(config, options);
273
+ const { writeFile } = await import("node:fs/promises");
274
+ await writeFile(outputPath, json + `
275
+ `);
276
+ console.log(`✨ Generated ${outputPath}`);
277
+ }
278
+
279
+ // src/cli.ts
280
+ import { resolve } from "node:path";
281
+ import { pathToFileURL } from "node:url";
282
+ async function main() {
283
+ const configPath = process.argv[2] ?? "package.config.ts";
284
+ const outputPath = process.argv[3] ?? "package.json";
285
+ const absoluteConfigPath = resolve(process.cwd(), configPath);
286
+ try {
287
+ const configModule = await import(pathToFileURL(absoluteConfigPath).href);
288
+ const config = configModule.default ?? configModule;
289
+ await writePackageJson(config, { outputPath });
290
+ } catch (error) {
291
+ const err = error;
292
+ if (err.code === "ERR_MODULE_NOT_FOUND" || err.code === "ENOENT") {
293
+ console.error(`❌ Config file not found: ${configPath}`);
294
+ console.error(`
295
+ Create a package.config.ts file with:`);
296
+ console.error(`
297
+ import { definePackageConfig } from '@a35hie/ts-pkg'
298
+
299
+ export default definePackageConfig({
300
+ name: 'my-package',
301
+ version: '1.0.0',
302
+ scriptPresets: ['typescript', 'testing'],
303
+ dependencies: ['lodash', 'zod'],
304
+ devDependencies: ['typescript', 'vitest'],
305
+ })
306
+ `);
307
+ process.exit(1);
308
+ }
309
+ console.error("❌ Error:", err.message);
310
+ process.exit(1);
311
+ }
312
+ }
313
+ main();
package/dist/main.js CHANGED
@@ -1,4 +1,20 @@
1
1
  import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
2
18
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
3
19
 
4
20
  // src/presets/scripts.ts
@@ -253,7 +269,8 @@ async function createPackageJson(config, options = {}) {
253
269
  async function writePackageJson(config, options = {}) {
254
270
  const { outputPath = "package.json" } = options;
255
271
  const json = await createPackageJson(config, options);
256
- await Bun.write(outputPath, json + `
272
+ const { writeFile } = await import("node:fs/promises");
273
+ await writeFile(outputPath, json + `
257
274
  `);
258
275
  console.log(`✨ Generated ${outputPath}`);
259
276
  }
@@ -262,41 +279,10 @@ async function writePackageJson(config, options = {}) {
262
279
  function definePackageConfig(config) {
263
280
  return config;
264
281
  }
265
- async function main() {
266
- const configPath = process.argv[2] ?? "package.config.ts";
267
- const outputPath = process.argv[3] ?? "package.json";
268
- try {
269
- const configModule = await import(Bun.pathToFileURL(configPath).href);
270
- const config = configModule.default ?? configModule;
271
- await writePackageJson(config, { outputPath });
272
- } catch (error) {
273
- if (error.code === "ERR_MODULE_NOT_FOUND") {
274
- console.error(`❌ Config file not found: ${configPath}`);
275
- console.error(`
276
- Create a package.config.ts file with:`);
277
- console.error(`
278
- import { definePackageConfig } from './src/main'
279
-
280
- export default definePackageConfig({
281
- name: 'my-package',
282
- version: '1.0.0',
283
- scriptPresets: ['typescript', 'testing'],
284
- dependencies: ['lodash', 'zod'],
285
- devDependencies: ['typescript', 'vitest'],
286
- })
287
- `);
288
- process.exit(1);
289
- }
290
- throw error;
291
- }
292
- }
293
- if (__require.main == __require.module) {
294
- main();
295
- }
296
282
  export {
297
283
  writePackageJson,
298
284
  definePackageConfig,
299
285
  createPackageJson
300
286
  };
301
287
 
302
- //# debugId=0021DE6288BCB32D64756E2164756E21
288
+ //# debugId=D40340B51AB1306D64756E2164756E21
package/dist/main.js.map CHANGED
@@ -6,10 +6,10 @@
6
6
  "import type { DependencyInput, DependenciesInput } from '../schemas/package'\n\ninterface NpmPackageInfo {\n 'dist-tags': {\n latest: string\n [tag: string]: string\n }\n versions: Record<string, unknown>\n}\n\n// Parse dependency input: 'lodash' | 'lodash@^4' | { lodash: '^4.0.0' }\nfunction parseDependency(dep: DependencyInput): {\n name: string\n version?: string\n} {\n if (typeof dep === 'string') {\n const atIndex = dep.lastIndexOf('@')\n if (atIndex > 0) {\n return {\n name: dep.slice(0, atIndex),\n version: dep.slice(atIndex + 1),\n }\n }\n return { name: dep }\n }\n\n // Object form: { lodash: '^4.0.0' }\n const [name, version] = Object.entries(dep)[0]!\n return { name, version }\n}\n\n// Fetch latest version from npm registry\nasync function fetchLatestVersion(packageName: string): Promise<string> {\n const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`\n\n const response = await fetch(url, {\n headers: { Accept: 'application/json' },\n })\n\n if (!response.ok) {\n throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`)\n }\n\n const data = (await response.json()) as NpmPackageInfo\n return data['dist-tags'].latest\n}\n\n// Resolve a single dependency to name: version pair\nasync function resolveDependency(\n dep: DependencyInput\n): Promise<[string, string]> {\n const { name, version } = parseDependency(dep)\n\n if (version) {\n return [name, version]\n }\n\n // Auto-resolve latest version with ^ prefix\n const latestVersion = await fetchLatestVersion(name)\n return [name, `^${latestVersion}`]\n}\n\n// Resolve all dependencies in parallel with batching\nexport async function resolveDependencies(\n deps: DependenciesInput | undefined\n): Promise<Record<string, string>> {\n if (!deps) {\n return {}\n }\n\n // If already an object (standard format), return as-is\n if (!Array.isArray(deps)) {\n return deps\n }\n\n if (deps.length === 0) {\n return {}\n }\n\n const results = await Promise.all(deps.map(resolveDependency))\n\n return Object.fromEntries(results)\n}\n\n// Cache for resolved versions (persists during single run)\nconst versionCache = new Map<string, string>()\n\nexport async function resolveDependenciesCached(\n deps: DependenciesInput | undefined\n): Promise<Record<string, string>> {\n if (!deps) {\n return {}\n }\n\n // If already an object (standard format), return as-is\n if (!Array.isArray(deps)) {\n return deps\n }\n\n if (deps.length === 0) {\n return {}\n }\n\n const results: [string, string][] = []\n\n for (const dep of deps) {\n const { name, version } = parseDependency(dep)\n\n if (version) {\n results.push([name, version])\n continue\n }\n\n // Check cache first\n let resolvedVersion = versionCache.get(name)\n if (!resolvedVersion) {\n resolvedVersion = `^${await fetchLatestVersion(name)}`\n versionCache.set(name, resolvedVersion)\n }\n\n results.push([name, resolvedVersion])\n }\n\n return Object.fromEntries(results)\n}\n",
7
7
  "import type { PackageConfig, DependenciesInput } from '../schemas/package'\n\n// Deep merge two objects, with source overriding target\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Partial<T>\n): T {\n const result = { ...target }\n\n for (const key of Object.keys(source) as (keyof T)[]) {\n const sourceValue = source[key]\n const targetValue = target[key]\n\n if (sourceValue === undefined) continue\n\n if (\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[keyof T]\n } else {\n result[key] = sourceValue as T[keyof T]\n }\n }\n\n return result\n}\n\n// Merge dependencies (handles both array and object formats)\nexport function mergeDependencies(\n target: DependenciesInput | undefined,\n source: DependenciesInput | undefined\n): DependenciesInput | undefined {\n if (!target && !source) return undefined\n if (!target) return source\n if (!source) return target\n\n // If both are arrays, concat them\n if (Array.isArray(target) && Array.isArray(source)) {\n return [...target, ...source]\n }\n\n // If both are objects, merge them\n if (!Array.isArray(target) && !Array.isArray(source)) {\n return { ...target, ...source }\n }\n\n // Mixed formats: convert array to object entries and merge\n const targetObj = Array.isArray(target) ? {} : target\n const sourceObj = Array.isArray(source) ? {} : source\n const targetArr = Array.isArray(target) ? target : []\n const sourceArr = Array.isArray(source) ? source : []\n\n // Return as array with both arrays and object merged\n return [...targetArr, ...sourceArr, { ...targetObj, ...sourceObj }]\n}\n\n// Resolve extends chain\nexport async function resolveExtends(\n config: PackageConfig\n): Promise<PackageConfig> {\n if (!config.extends) {\n return config\n }\n\n let baseConfig: PackageConfig\n\n if (typeof config.extends === 'string') {\n // Import from file path\n const imported = await import(config.extends)\n baseConfig = imported.default ?? imported\n } else {\n baseConfig = config.extends\n }\n\n // Recursively resolve base config's extends\n baseConfig = await resolveExtends(baseConfig)\n\n // Merge base into current (current overrides base)\n const { extends: _, ...currentWithoutExtends } = config\n\n return {\n ...baseConfig,\n ...currentWithoutExtends,\n // Merge dependencies (handles both array and object formats)\n dependencies: mergeDependencies(\n baseConfig.dependencies,\n currentWithoutExtends.dependencies\n ),\n devDependencies: mergeDependencies(\n baseConfig.devDependencies,\n currentWithoutExtends.devDependencies\n ),\n peerDependencies: mergeDependencies(\n baseConfig.peerDependencies,\n currentWithoutExtends.peerDependencies\n ),\n // Merge objects for scripts\n scripts: { ...baseConfig.scripts, ...currentWithoutExtends.scripts },\n scriptPresets: [\n ...(baseConfig.scriptPresets ?? []),\n ...(currentWithoutExtends.scriptPresets ?? []),\n ],\n }\n}\n",
8
8
  "import type { ConditionalConfig, StandardPackageJson } from '../schemas/package'\nimport { deepMerge } from './merge'\n\ninterface ConditionContext {\n env: string\n platform: NodeJS.Platform\n nodeVersion: string\n ci: boolean\n}\n\nfunction getContext(): ConditionContext {\n return {\n env: process.env.NODE_ENV ?? 'development',\n platform: process.platform,\n nodeVersion: process.version,\n ci: process.env.CI === 'true' || process.env.CI === '1',\n }\n}\n\nfunction evaluateCondition(\n when: ConditionalConfig['when'],\n context: ConditionContext\n): boolean {\n if (when.env !== undefined && context.env !== when.env) {\n return false\n }\n\n if (when.platform !== undefined && context.platform !== when.platform) {\n return false\n }\n\n if (when.ci !== undefined && context.ci !== when.ci) {\n return false\n }\n\n if (when.nodeVersion !== undefined) {\n // Simple semver check (starts with)\n if (!context.nodeVersion.startsWith(when.nodeVersion)) {\n return false\n }\n }\n\n return true\n}\n\nexport function applyConditions(\n baseConfig: Partial<StandardPackageJson>,\n conditions: ConditionalConfig[] | undefined\n): Partial<StandardPackageJson> {\n if (!conditions || conditions.length === 0) {\n return baseConfig\n }\n\n const context = getContext()\n let result = { ...baseConfig }\n\n for (const condition of conditions) {\n if (evaluateCondition(condition.when, context)) {\n result = deepMerge(\n result,\n condition.set as Record<string, unknown>\n ) as Partial<StandardPackageJson>\n }\n }\n\n return result\n}\n",
9
- "import type { PackageConfig, StandardPackageJson } from '../schemas/package'\nimport { getPresetScripts, mergeScripts } from '../presets/scripts'\nimport { resolveDependenciesCached } from '../resolvers/dependencies'\nimport { resolveExtends } from '../utils/merge'\nimport { applyConditions } from '../utils/conditions'\n\nexport interface GenerateOptions {\n indent?: number\n outputPath?: string\n}\n\nexport async function createPackageJson(\n config: PackageConfig,\n options: GenerateOptions = {}\n): Promise<string> {\n const { indent = 2 } = options\n\n // Step 1: Resolve extends chain\n let resolved = await resolveExtends(config)\n\n // Step 2: Build scripts from presets + custom\n const presetScripts = resolved.scriptPresets\n ? getPresetScripts(resolved.scriptPresets)\n : {}\n const finalScripts = mergeScripts(presetScripts, resolved.scripts)\n\n // Step 3: Resolve dependency versions\n const [dependencies, devDependencies, peerDependencies] = await Promise.all([\n resolveDependenciesCached(resolved.dependencies),\n resolveDependenciesCached(resolved.devDependencies),\n resolveDependenciesCached(resolved.peerDependencies),\n ])\n\n // Step 4: Build standard package.json\n const packageJson: StandardPackageJson = {\n name: resolved.name,\n ...(resolved.version && { version: resolved.version }),\n ...(resolved.description && { description: resolved.description }),\n ...(resolved.keywords?.length && { keywords: resolved.keywords }),\n ...(resolved.homepage && { homepage: resolved.homepage }),\n ...(resolved.bugs && { bugs: resolved.bugs }),\n ...(resolved.license && { license: resolved.license }),\n ...(resolved.author && { author: resolved.author }),\n ...(resolved.contributors?.length && {\n contributors: resolved.contributors,\n }),\n ...(resolved.repository && { repository: resolved.repository }),\n ...(resolved.type && { type: resolved.type }),\n ...(resolved.main && { main: resolved.main }),\n ...(resolved.module && { module: resolved.module }),\n ...(resolved.types && { types: resolved.types }),\n ...(resolved.exports && { exports: resolved.exports }),\n ...(resolved.bin && { bin: resolved.bin }),\n ...(resolved.files?.length && { files: resolved.files }),\n ...(Object.keys(finalScripts).length && { scripts: finalScripts }),\n ...(Object.keys(dependencies).length && { dependencies }),\n ...(Object.keys(devDependencies).length && { devDependencies }),\n ...(Object.keys(peerDependencies).length && { peerDependencies }),\n ...(resolved.optionalDependencies && {\n optionalDependencies: resolved.optionalDependencies,\n }),\n ...(resolved.engines && { engines: resolved.engines }),\n ...(resolved.os?.length && { os: resolved.os }),\n ...(resolved.cpu?.length && { cpu: resolved.cpu }),\n ...(resolved.private !== undefined && { private: resolved.private }),\n ...(resolved.publishConfig && { publishConfig: resolved.publishConfig }),\n ...(resolved.workspaces?.length && { workspaces: resolved.workspaces }),\n }\n\n // Step 5: Apply conditional configs\n const finalPackageJson = applyConditions(packageJson, resolved.conditions)\n\n return JSON.stringify(finalPackageJson, null, indent)\n}\n\nexport async function writePackageJson(\n config: PackageConfig,\n options: GenerateOptions = {}\n): Promise<void> {\n const { outputPath = 'package.json' } = options\n const json = await createPackageJson(config, options)\n await Bun.write(outputPath, json + '\\n')\n console.log(`✨ Generated ${outputPath}`)\n}\n",
10
- "import type {\n PackageConfig,\n StandardPackageJson,\n ScriptPreset,\n DependencyInput,\n DependenciesInput,\n ConditionalConfig,\n License,\n} from './schemas/package'\nimport {\n createPackageJson,\n writePackageJson,\n type GenerateOptions,\n} from './generator/createPackageJson'\n\nexport function definePackageConfig(config: PackageConfig): PackageConfig {\n return config\n}\n\n// Run CLI if executed directly\nasync function main() {\n const configPath = process.argv[2] ?? 'package.config.ts'\n const outputPath = process.argv[3] ?? 'package.json'\n\n try {\n const configModule = await import(Bun.pathToFileURL(configPath).href)\n const config: PackageConfig = configModule.default ?? configModule\n\n await writePackageJson(config, { outputPath })\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ERR_MODULE_NOT_FOUND') {\n console.error(`❌ Config file not found: ${configPath}`)\n console.error('\\nCreate a package.config.ts file with:')\n console.error(`\nimport { definePackageConfig } from './src/main'\n\nexport default definePackageConfig({\n name: 'my-package',\n version: '1.0.0',\n scriptPresets: ['typescript', 'testing'],\n dependencies: ['lodash', 'zod'],\n devDependencies: ['typescript', 'vitest'],\n})\n`)\n process.exit(1)\n }\n throw error\n }\n}\n\n// Export everything\nexport {\n createPackageJson,\n writePackageJson,\n type PackageConfig,\n type StandardPackageJson,\n type ScriptPreset,\n type DependencyInput,\n type DependenciesInput,\n type ConditionalConfig,\n type GenerateOptions,\n type License,\n}\n\n// Run if main module\nif (import.meta.main) {\n main()\n}\n"
9
+ "import type { PackageConfig, StandardPackageJson } from '../schemas/package'\nimport { getPresetScripts, mergeScripts } from '../presets/scripts'\nimport { resolveDependenciesCached } from '../resolvers/dependencies'\nimport { resolveExtends } from '../utils/merge'\nimport { applyConditions } from '../utils/conditions'\n\nexport interface GenerateOptions {\n indent?: number\n outputPath?: string\n}\n\nexport async function createPackageJson(\n config: PackageConfig,\n options: GenerateOptions = {}\n): Promise<string> {\n const { indent = 2 } = options\n\n // Step 1: Resolve extends chain\n let resolved = await resolveExtends(config)\n\n // Step 2: Build scripts from presets + custom\n const presetScripts = resolved.scriptPresets\n ? getPresetScripts(resolved.scriptPresets)\n : {}\n const finalScripts = mergeScripts(presetScripts, resolved.scripts)\n\n // Step 3: Resolve dependency versions\n const [dependencies, devDependencies, peerDependencies] = await Promise.all([\n resolveDependenciesCached(resolved.dependencies),\n resolveDependenciesCached(resolved.devDependencies),\n resolveDependenciesCached(resolved.peerDependencies),\n ])\n\n // Step 4: Build standard package.json\n const packageJson: StandardPackageJson = {\n name: resolved.name,\n ...(resolved.version && { version: resolved.version }),\n ...(resolved.description && { description: resolved.description }),\n ...(resolved.keywords?.length && { keywords: resolved.keywords }),\n ...(resolved.homepage && { homepage: resolved.homepage }),\n ...(resolved.bugs && { bugs: resolved.bugs }),\n ...(resolved.license && { license: resolved.license }),\n ...(resolved.author && { author: resolved.author }),\n ...(resolved.contributors?.length && {\n contributors: resolved.contributors,\n }),\n ...(resolved.repository && { repository: resolved.repository }),\n ...(resolved.type && { type: resolved.type }),\n ...(resolved.main && { main: resolved.main }),\n ...(resolved.module && { module: resolved.module }),\n ...(resolved.types && { types: resolved.types }),\n ...(resolved.exports && { exports: resolved.exports }),\n ...(resolved.bin && { bin: resolved.bin }),\n ...(resolved.files?.length && { files: resolved.files }),\n ...(Object.keys(finalScripts).length && { scripts: finalScripts }),\n ...(Object.keys(dependencies).length && { dependencies }),\n ...(Object.keys(devDependencies).length && { devDependencies }),\n ...(Object.keys(peerDependencies).length && { peerDependencies }),\n ...(resolved.optionalDependencies && {\n optionalDependencies: resolved.optionalDependencies,\n }),\n ...(resolved.engines && { engines: resolved.engines }),\n ...(resolved.os?.length && { os: resolved.os }),\n ...(resolved.cpu?.length && { cpu: resolved.cpu }),\n ...(resolved.private !== undefined && { private: resolved.private }),\n ...(resolved.publishConfig && { publishConfig: resolved.publishConfig }),\n ...(resolved.workspaces?.length && { workspaces: resolved.workspaces }),\n }\n\n // Step 5: Apply conditional configs\n const finalPackageJson = applyConditions(packageJson, resolved.conditions)\n\n return JSON.stringify(finalPackageJson, null, indent)\n}\n\nexport async function writePackageJson(\n config: PackageConfig,\n options: GenerateOptions = {}\n): Promise<void> {\n const { outputPath = 'package.json' } = options\n const json = await createPackageJson(config, options)\n const { writeFile } = await import('node:fs/promises')\n await writeFile(outputPath, json + '\\n')\n console.log(`✨ Generated ${outputPath}`)\n}\n",
10
+ "import type {\n PackageConfig,\n StandardPackageJson,\n ScriptPreset,\n DependencyInput,\n DependenciesInput,\n ConditionalConfig,\n License,\n} from './schemas/package'\nimport {\n createPackageJson,\n writePackageJson,\n type GenerateOptions,\n} from './generator/createPackageJson'\n\nexport function definePackageConfig(config: PackageConfig): PackageConfig {\n return config\n}\n\n// Run CLI if executed directly\nasync function main() {\n const configPath = process.argv[2] ?? 'package.config.ts'\n const outputPath = process.argv[3] ?? 'package.json'\n\n try {\n const configModule = await import(Bun.pathToFileURL(configPath).href)\n const config: PackageConfig = configModule.default ?? configModule\n\n await writePackageJson(config, { outputPath })\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ERR_MODULE_NOT_FOUND') {\n console.error(`❌ Config file not found: ${configPath}`)\n console.error('\\nCreate a package.config.ts file with:')\n console.error(`\nimport { definePackageConfig } from './src/main'\n\nexport default definePackageConfig({\n name: 'my-package',\n version: '1.0.0',\n scriptPresets: ['typescript', 'testing'],\n dependencies: ['lodash', 'zod'],\n devDependencies: ['typescript', 'vitest'],\n})\n`)\n process.exit(1)\n }\n throw error\n }\n}\n\n// Export everything\nexport {\n createPackageJson,\n writePackageJson,\n type PackageConfig,\n type StandardPackageJson,\n type ScriptPreset,\n type DependencyInput,\n type DependenciesInput,\n type ConditionalConfig,\n type GenerateOptions,\n type License,\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "0021DE6288BCB32D64756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "D40340B51AB1306D64756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.config.ts CHANGED
@@ -2,7 +2,7 @@ import { definePackageConfig } from '@/main.ts'
2
2
 
3
3
  export default definePackageConfig({
4
4
  name: '@a35hie/ts-pkg',
5
- version: '0.1.1',
5
+ version: '0.1.2',
6
6
  description: 'TypeScript-based package.json with magical features',
7
7
  type: 'module',
8
8
  license: 'Apache-2.0',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a35hie/ts-pkg",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "TypeScript-based package.json with magical features",
5
5
  "license": "Apache-2.0",
6
6
  "repository": "https://github.com/a35hie/TsPkg",
package/src/cli.ts ADDED
@@ -0,0 +1,40 @@
1
+ import type { PackageConfig } from './schemas/package'
2
+ import { writePackageJson } from './generator/createPackageJson'
3
+ import { resolve } from 'node:path'
4
+ import { pathToFileURL } from 'node:url'
5
+
6
+ async function main() {
7
+ const configPath = process.argv[2] ?? 'package.config.ts'
8
+ const outputPath = process.argv[3] ?? 'package.json'
9
+
10
+ const absoluteConfigPath = resolve(process.cwd(), configPath)
11
+
12
+ try {
13
+ const configModule = await import(pathToFileURL(absoluteConfigPath).href)
14
+ const config: PackageConfig = configModule.default ?? configModule
15
+
16
+ await writePackageJson(config, { outputPath })
17
+ } catch (error) {
18
+ const err = error as NodeJS.ErrnoException
19
+ if (err.code === 'ERR_MODULE_NOT_FOUND' || err.code === 'ENOENT') {
20
+ console.error(`❌ Config file not found: ${configPath}`)
21
+ console.error('\nCreate a package.config.ts file with:')
22
+ console.error(`
23
+ import { definePackageConfig } from '@a35hie/ts-pkg'
24
+
25
+ export default definePackageConfig({
26
+ name: 'my-package',
27
+ version: '1.0.0',
28
+ scriptPresets: ['typescript', 'testing'],
29
+ dependencies: ['lodash', 'zod'],
30
+ devDependencies: ['typescript', 'vitest'],
31
+ })
32
+ `)
33
+ process.exit(1)
34
+ }
35
+ console.error('❌ Error:', err.message)
36
+ process.exit(1)
37
+ }
38
+ }
39
+
40
+ main()
@@ -79,6 +79,7 @@ export async function writePackageJson(
79
79
  ): Promise<void> {
80
80
  const { outputPath = 'package.json' } = options
81
81
  const json = await createPackageJson(config, options)
82
- await Bun.write(outputPath, json + '\n')
82
+ const { writeFile } = await import('node:fs/promises')
83
+ await writeFile(outputPath, json + '\n')
83
84
  console.log(`✨ Generated ${outputPath}`)
84
85
  }
package/src/main.ts CHANGED
@@ -61,8 +61,3 @@ export {
61
61
  type GenerateOptions,
62
62
  type License,
63
63
  }
64
-
65
- // Run if main module
66
- if (import.meta.main) {
67
- main()
68
- }