@a35hie/ts-pkg 0.1.4 → 0.2.1
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 +22 -5
- package/dist/cli.js +211 -23
- package/dist/main.js +1 -17
- package/dist/main.js.map +2 -2
- package/package.json +6 -9
package/README.md
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
Define your package configuration in TypeScript with type safety, auto-complete, and powerful features like automatic version resolution, script presets, config inheritance, and conditional configuration.
|
|
6
6
|
|
|
7
|
+
> IMPORTANT: It is imperative to read this page before using this package.
|
|
8
|
+
|
|
7
9
|
## Features
|
|
8
10
|
|
|
9
11
|
- **Auto-resolve versions** – List package names, latest versions are fetched automatically
|
|
@@ -15,7 +17,7 @@ Define your package configuration in TypeScript with type safety, auto-complete,
|
|
|
15
17
|
## Installation
|
|
16
18
|
|
|
17
19
|
```bash
|
|
18
|
-
bun add -D ts-pkg
|
|
20
|
+
bun add -D @a35hie/ts-pkg
|
|
19
21
|
```
|
|
20
22
|
|
|
21
23
|
## Usage
|
|
@@ -23,7 +25,7 @@ bun add -D ts-pkg-config
|
|
|
23
25
|
Create a `package.config.ts` file:
|
|
24
26
|
|
|
25
27
|
```typescript
|
|
26
|
-
import { definePackageConfig } from 'ts-pkg
|
|
28
|
+
import { definePackageConfig } from '@a35hie/ts-pkg'
|
|
27
29
|
|
|
28
30
|
export default definePackageConfig({
|
|
29
31
|
name: 'my-awesome-package',
|
|
@@ -41,8 +43,8 @@ export default definePackageConfig({
|
|
|
41
43
|
|
|
42
44
|
// ✨ Just list packages - versions resolved automatically!
|
|
43
45
|
dependencies: [
|
|
44
|
-
'lodash', // → "lodash": "^4.17.
|
|
45
|
-
'zod', // → "zod": "^3.
|
|
46
|
+
'lodash', // → "lodash": "^4.17.23"
|
|
47
|
+
'zod', // → "zod": "^4.3.6"
|
|
46
48
|
],
|
|
47
49
|
|
|
48
50
|
devDependencies: [
|
|
@@ -75,6 +77,21 @@ bunx ts-pkg
|
|
|
75
77
|
bunx ts-pkg package.config.ts package.json
|
|
76
78
|
```
|
|
77
79
|
|
|
80
|
+
## Syncing Dependencies
|
|
81
|
+
|
|
82
|
+
When you install packages with `bun add` or `npm install`, sync them back to your config:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# After installing packages
|
|
86
|
+
bun add lodash axios
|
|
87
|
+
ts-pkg sync
|
|
88
|
+
|
|
89
|
+
# Or specify paths
|
|
90
|
+
ts-pkg sync package.config.ts package.json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
This keeps your `package.config.ts` as the source of truth while still allowing quick installs via your package manager.
|
|
94
|
+
|
|
78
95
|
## Script Presets
|
|
79
96
|
|
|
80
97
|
| Preset | Scripts |
|
|
@@ -109,7 +126,7 @@ export default definePackageConfig({
|
|
|
109
126
|
|
|
110
127
|
## Conditional Configuration
|
|
111
128
|
|
|
112
|
-
Apply different settings based on environment:
|
|
129
|
+
Apply different settings based on the environment:
|
|
113
130
|
|
|
114
131
|
```typescript
|
|
115
132
|
conditions: [
|
package/dist/cli.js
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
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
3
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
20
4
|
|
|
21
5
|
// src/presets/scripts.ts
|
|
@@ -276,13 +260,192 @@ async function writePackageJson(config, options = {}) {
|
|
|
276
260
|
console.log(`✨ Generated ${outputPath}`);
|
|
277
261
|
}
|
|
278
262
|
|
|
279
|
-
// src/
|
|
263
|
+
// src/sync/syncDependencies.ts
|
|
264
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
280
265
|
import { resolve } from "node:path";
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
266
|
+
function depsObjectToArray(deps) {
|
|
267
|
+
if (!deps)
|
|
268
|
+
return [];
|
|
269
|
+
return Object.keys(deps).sort();
|
|
270
|
+
}
|
|
271
|
+
function formatDepsArray(deps, indent = " ") {
|
|
272
|
+
if (deps.length === 0)
|
|
273
|
+
return "[]";
|
|
274
|
+
if (deps.length === 1)
|
|
275
|
+
return `['${deps[0]}']`;
|
|
276
|
+
return `[
|
|
277
|
+
${deps.map((d) => `${indent}'${d}',`).join(`
|
|
278
|
+
`)}
|
|
279
|
+
]`;
|
|
280
|
+
}
|
|
281
|
+
function formatDepsObject(deps, indent = " ") {
|
|
282
|
+
const entries = Object.entries(deps).sort(([a], [b]) => a.localeCompare(b));
|
|
283
|
+
if (entries.length === 0)
|
|
284
|
+
return "{}";
|
|
285
|
+
return `{
|
|
286
|
+
${entries.map(([name, version]) => `${indent}'${name}': '${version}',`).join(`
|
|
287
|
+
`)}
|
|
288
|
+
}`;
|
|
289
|
+
}
|
|
290
|
+
async function syncDependencies(options = {}) {
|
|
291
|
+
const {
|
|
292
|
+
packageJsonPath = "package.json",
|
|
293
|
+
configPath = "package.config.ts",
|
|
294
|
+
quiet = false,
|
|
295
|
+
delay = 0
|
|
296
|
+
} = options;
|
|
297
|
+
if (delay > 0) {
|
|
298
|
+
await new Promise((resolve2) => setTimeout(resolve2, delay));
|
|
299
|
+
}
|
|
300
|
+
const absolutePackageJsonPath = resolve(process.cwd(), packageJsonPath);
|
|
285
301
|
const absoluteConfigPath = resolve(process.cwd(), configPath);
|
|
302
|
+
let packageJson;
|
|
303
|
+
try {
|
|
304
|
+
const packageJsonContent = await readFile(absolutePackageJsonPath, "utf-8");
|
|
305
|
+
packageJson = JSON.parse(packageJsonContent);
|
|
306
|
+
} catch (error) {
|
|
307
|
+
const err = error;
|
|
308
|
+
if (err.code === "ENOENT") {
|
|
309
|
+
console.error(`× package.json not found: ${packageJsonPath}`);
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
throw error;
|
|
313
|
+
}
|
|
314
|
+
let configContent;
|
|
315
|
+
try {
|
|
316
|
+
configContent = await readFile(absoluteConfigPath, "utf-8");
|
|
317
|
+
} catch (error) {
|
|
318
|
+
const err = error;
|
|
319
|
+
if (err.code === "ENOENT") {
|
|
320
|
+
console.error(`× Config file not found: ${configPath}`);
|
|
321
|
+
console.error("Run ts-pkg init first to create a package.config.ts");
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
throw error;
|
|
325
|
+
}
|
|
326
|
+
const deps = depsObjectToArray(packageJson.dependencies);
|
|
327
|
+
const devDeps = depsObjectToArray(packageJson.devDependencies);
|
|
328
|
+
const peerDeps = depsObjectToArray(packageJson.peerDependencies);
|
|
329
|
+
let updatedContent = configContent;
|
|
330
|
+
updatedContent = updateDepsInConfig(updatedContent, "dependencies", deps, packageJson.dependencies);
|
|
331
|
+
updatedContent = updateDepsInConfig(updatedContent, "devDependencies", devDeps, packageJson.devDependencies);
|
|
332
|
+
updatedContent = updateDepsInConfig(updatedContent, "peerDependencies", peerDeps, packageJson.peerDependencies);
|
|
333
|
+
await writeFile(absoluteConfigPath, updatedContent);
|
|
334
|
+
if (!quiet) {
|
|
335
|
+
console.log(`✨ Synced dependencies to ${configPath}`);
|
|
336
|
+
if (deps.length)
|
|
337
|
+
console.log(` dependencies: ${deps.length} packages`);
|
|
338
|
+
if (devDeps.length)
|
|
339
|
+
console.log(` devDependencies: ${devDeps.length} packages`);
|
|
340
|
+
if (peerDeps.length)
|
|
341
|
+
console.log(` peerDependencies: ${peerDeps.length} packages`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
function findBracketEnd(content, startIndex, openChar, closeChar) {
|
|
345
|
+
let depth = 0;
|
|
346
|
+
for (let i = startIndex;i < content.length; i++) {
|
|
347
|
+
if (content[i] === openChar)
|
|
348
|
+
depth++;
|
|
349
|
+
else if (content[i] === closeChar) {
|
|
350
|
+
depth--;
|
|
351
|
+
if (depth === 0)
|
|
352
|
+
return i;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return -1;
|
|
356
|
+
}
|
|
357
|
+
function updateDepsInConfig(content, depType, depsArray, depsObject) {
|
|
358
|
+
const arrayPattern = new RegExp(`(${depType}:\\s*)\\[`);
|
|
359
|
+
const arrayMatch = arrayPattern.exec(content);
|
|
360
|
+
if (arrayMatch && arrayMatch[1]) {
|
|
361
|
+
const formattedDeps = formatDepsArray(depsArray);
|
|
362
|
+
const arrayStart = arrayMatch.index + arrayMatch[1].length;
|
|
363
|
+
const arrayEnd = findBracketEnd(content, arrayStart, "[", "]");
|
|
364
|
+
if (arrayEnd !== -1) {
|
|
365
|
+
return content.slice(0, arrayStart) + formattedDeps + content.slice(arrayEnd + 1);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const objectPattern = new RegExp(`(${depType}:\\s*)\\{`);
|
|
369
|
+
const objectMatch = objectPattern.exec(content);
|
|
370
|
+
if (objectMatch && objectMatch[1]) {
|
|
371
|
+
const formattedDeps = formatDepsObject(depsObject || {});
|
|
372
|
+
const objStart = objectMatch.index + objectMatch[1].length;
|
|
373
|
+
const objEnd = findBracketEnd(content, objStart, "{", "}");
|
|
374
|
+
if (objEnd !== -1) {
|
|
375
|
+
return content.slice(0, objStart) + formattedDeps + content.slice(objEnd + 1);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
if (depsArray.length > 0) {
|
|
379
|
+
const formattedDeps = formatDepsArray(depsArray);
|
|
380
|
+
const insertPatterns = [
|
|
381
|
+
{ pattern: /peerDependencies:\s*[\[{]/, after: true },
|
|
382
|
+
{ pattern: /devDependencies:\s*[\[{]/, after: true },
|
|
383
|
+
{ pattern: /dependencies:\s*[\[{]/, after: true },
|
|
384
|
+
{ pattern: /(\n\s*)(conditions:\s*\[)/, before: true },
|
|
385
|
+
{ pattern: /(\n\s*)(engines:\s*\{)/, before: true }
|
|
386
|
+
];
|
|
387
|
+
for (const { pattern, after, before } of insertPatterns) {
|
|
388
|
+
const m = pattern.exec(content);
|
|
389
|
+
if (m) {
|
|
390
|
+
if (after) {
|
|
391
|
+
const startChar = content[m.index + m[0].length - 1];
|
|
392
|
+
const isArray = startChar === "[";
|
|
393
|
+
const bracketStart = m.index + m[0].length - 1;
|
|
394
|
+
const bracketEnd = findBracketEnd(content, bracketStart, isArray ? "[" : "{", isArray ? "]" : "}");
|
|
395
|
+
if (bracketEnd !== -1) {
|
|
396
|
+
let insertPos = bracketEnd + 1;
|
|
397
|
+
let char = content[insertPos];
|
|
398
|
+
while (insertPos < content.length && char && /[,\s]/.test(char) && char !== `
|
|
399
|
+
`) {
|
|
400
|
+
insertPos++;
|
|
401
|
+
char = content[insertPos];
|
|
402
|
+
}
|
|
403
|
+
if (content[insertPos] === `
|
|
404
|
+
`)
|
|
405
|
+
insertPos++;
|
|
406
|
+
return content.slice(0, insertPos) + `
|
|
407
|
+
${depType}: ${formattedDeps},
|
|
408
|
+
` + content.slice(insertPos);
|
|
409
|
+
}
|
|
410
|
+
} else if (before) {
|
|
411
|
+
return content.replace(pattern, `$1${depType}: ${formattedDeps},
|
|
412
|
+
$1$2`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return content;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// src/cli.ts
|
|
421
|
+
import { resolve as resolve2 } from "node:path";
|
|
422
|
+
import { pathToFileURL } from "node:url";
|
|
423
|
+
function printHelp() {
|
|
424
|
+
console.log(`
|
|
425
|
+
ts-pkg - TypeScript-based package.json generator
|
|
426
|
+
|
|
427
|
+
Usage:
|
|
428
|
+
ts-pkg [configPath] [outputPath] Generate package.json from config
|
|
429
|
+
ts-pkg sync [configPath] [packageJsonPath] Sync deps from package.json to config
|
|
430
|
+
ts-pkg help Show this help message
|
|
431
|
+
|
|
432
|
+
Commands:
|
|
433
|
+
(default) Generate package.json from package.config.ts
|
|
434
|
+
sync Sync dependencies from package.json back to package.config.ts
|
|
435
|
+
|
|
436
|
+
Examples:
|
|
437
|
+
ts-pkg # Generate from package.config.ts
|
|
438
|
+
ts-pkg my.config.ts # Generate from custom config
|
|
439
|
+
ts-pkg sync # Sync deps to package.config.ts
|
|
440
|
+
ts-pkg sync package.config.ts package.json
|
|
441
|
+
|
|
442
|
+
Postinstall setup:
|
|
443
|
+
Add to your package.json scripts:
|
|
444
|
+
"postinstall": "ts-pkg sync"
|
|
445
|
+
`);
|
|
446
|
+
}
|
|
447
|
+
async function runGenerate(configPath, outputPath) {
|
|
448
|
+
const absoluteConfigPath = resolve2(process.cwd(), configPath);
|
|
286
449
|
try {
|
|
287
450
|
const configModule = await import(pathToFileURL(absoluteConfigPath).href);
|
|
288
451
|
const config = configModule.default ?? configModule;
|
|
@@ -290,7 +453,7 @@ async function main() {
|
|
|
290
453
|
} catch (error) {
|
|
291
454
|
const err = error;
|
|
292
455
|
if (err.code === "ERR_MODULE_NOT_FOUND" || err.code === "ENOENT") {
|
|
293
|
-
console.error(
|
|
456
|
+
console.error(`× Config file not found: ${configPath}`);
|
|
294
457
|
console.error(`
|
|
295
458
|
Create a package.config.ts file with:`);
|
|
296
459
|
console.error(`
|
|
@@ -306,8 +469,33 @@ export default definePackageConfig({
|
|
|
306
469
|
`);
|
|
307
470
|
process.exit(1);
|
|
308
471
|
}
|
|
309
|
-
console.error("
|
|
472
|
+
console.error("× Error:", err.message);
|
|
310
473
|
process.exit(1);
|
|
311
474
|
}
|
|
312
475
|
}
|
|
476
|
+
async function runSync(configPath, packageJsonPath) {
|
|
477
|
+
const isPostinstall = process.env.npm_lifecycle_event === "postinstall";
|
|
478
|
+
await syncDependencies({
|
|
479
|
+
configPath,
|
|
480
|
+
packageJsonPath,
|
|
481
|
+
delay: isPostinstall ? 100 : 0
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
async function main() {
|
|
485
|
+
const args = process.argv.slice(2);
|
|
486
|
+
const command = args[0];
|
|
487
|
+
if (command === "help" || command === "--help" || command === "-h") {
|
|
488
|
+
printHelp();
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
if (command === "sync") {
|
|
492
|
+
const configPath2 = args[1] ?? "package.config.ts";
|
|
493
|
+
const packageJsonPath = args[2] ?? "package.json";
|
|
494
|
+
await runSync(configPath2, packageJsonPath);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const configPath = args[0] ?? "package.config.ts";
|
|
498
|
+
const outputPath = args[1] ?? "package.json";
|
|
499
|
+
await runGenerate(configPath, outputPath);
|
|
500
|
+
}
|
|
313
501
|
main();
|
package/dist/main.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
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
|
-
};
|
|
18
2
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
19
3
|
|
|
20
4
|
// src/presets/scripts.ts
|
|
@@ -285,4 +269,4 @@ export {
|
|
|
285
269
|
createPackageJson
|
|
286
270
|
};
|
|
287
271
|
|
|
288
|
-
//# debugId=
|
|
272
|
+
//# debugId=0D3521357F57176D64756E2164756E21
|
package/dist/main.js.map
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
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
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": "
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "0D3521357F57176D64756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a35hie/ts-pkg",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "TypeScript-based package.json with magical features",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": "https://github.com/a35hie/TsPkg",
|
|
@@ -20,19 +20,16 @@
|
|
|
20
20
|
"typecheck": "tsc --noEmit",
|
|
21
21
|
"format": "prettier --write .",
|
|
22
22
|
"format:check": "prettier --check .",
|
|
23
|
-
"
|
|
24
|
-
"test:watch": "vitest watch",
|
|
25
|
-
"test:coverage": "vitest --coverage",
|
|
26
|
-
"generate": "bun run src/main.ts"
|
|
23
|
+
"generate": "bun run src/cli.ts"
|
|
27
24
|
},
|
|
28
25
|
"devDependencies": {
|
|
29
|
-
"
|
|
30
|
-
"prettier": "^3.8.1",
|
|
26
|
+
"@types/bun": "^1.3.8",
|
|
31
27
|
"bun-plugin-dts": "^0.3.0",
|
|
32
|
-
"
|
|
28
|
+
"prettier": "^3.8.1",
|
|
29
|
+
"typescript": "^5.9.3"
|
|
33
30
|
},
|
|
34
31
|
"peerDependencies": {
|
|
35
|
-
"typescript": "^5"
|
|
32
|
+
"typescript": "^5.9.3"
|
|
36
33
|
},
|
|
37
34
|
"engines": {
|
|
38
35
|
"node": ">=18",
|