@a35hie/ts-pkg 0.1.0 → 0.1.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/dist/main.d.ts +77 -137
- package/dist/main.js +175 -170
- package/dist/main.js.map +5 -5
- package/package.config.ts +1 -1
- package/package.json +1 -1
- package/src/main.ts +2 -0
- package/src/resolvers/dependencies.ts +23 -5
- package/src/schemas/package.ts +8 -5
- package/src/utils/merge.ts +32 -11
package/dist/main.d.ts
CHANGED
|
@@ -1,147 +1,87 @@
|
|
|
1
1
|
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
|
-
export type License =
|
|
4
|
-
| 'MIT'
|
|
5
|
-
| 'Apache-2.0'
|
|
6
|
-
| 'GPL-2.0-only'
|
|
7
|
-
| 'GPL-2.0-or-later'
|
|
8
|
-
| 'GPL-3.0-only'
|
|
9
|
-
| 'GPL-3.0-or-later'
|
|
10
|
-
| 'LGPL-2.1-only'
|
|
11
|
-
| 'LGPL-2.1-or-later'
|
|
12
|
-
| 'LGPL-3.0-only'
|
|
13
|
-
| 'LGPL-3.0-or-later'
|
|
14
|
-
| 'BSD-2-Clause'
|
|
15
|
-
| 'BSD-3-Clause'
|
|
16
|
-
| 'ISC'
|
|
17
|
-
| 'MPL-2.0'
|
|
18
|
-
| 'AGPL-3.0-only'
|
|
19
|
-
| 'AGPL-3.0-or-later'
|
|
20
|
-
| 'Unlicense'
|
|
21
|
-
| 'WTFPL'
|
|
22
|
-
| 'CC0-1.0'
|
|
23
|
-
| 'CC-BY-4.0'
|
|
24
|
-
| 'CC-BY-SA-4.0'
|
|
25
|
-
| 'Zlib'
|
|
26
|
-
| 'BSL-1.0'
|
|
27
|
-
| 'EPL-2.0'
|
|
28
|
-
| 'EUPL-1.2'
|
|
29
|
-
| 'CDDL-1.0'
|
|
30
|
-
| 'Artistic-2.0'
|
|
31
|
-
| 'OSL-3.0'
|
|
32
|
-
| 'AFL-3.0'
|
|
33
|
-
| 'LPPL-1.3c'
|
|
34
|
-
| (string & {})
|
|
3
|
+
export type License = "MIT" | "Apache-2.0" | "GPL-2.0-only" | "GPL-2.0-or-later" | "GPL-3.0-only" | "GPL-3.0-or-later" | "LGPL-2.1-only" | "LGPL-2.1-or-later" | "LGPL-3.0-only" | "LGPL-3.0-or-later" | "BSD-2-Clause" | "BSD-3-Clause" | "ISC" | "MPL-2.0" | "AGPL-3.0-only" | "AGPL-3.0-or-later" | "Unlicense" | "WTFPL" | "CC0-1.0" | "CC-BY-4.0" | "CC-BY-SA-4.0" | "Zlib" | "BSL-1.0" | "EPL-2.0" | "EUPL-1.2" | "CDDL-1.0" | "Artistic-2.0" | "OSL-3.0" | "AFL-3.0" | "LPPL-1.3c" | (string & {});
|
|
35
4
|
export interface StandardPackageJson {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
files?: string[]
|
|
84
|
-
scripts?: Record<string, string>
|
|
85
|
-
dependencies?: Record<string, string>
|
|
86
|
-
devDependencies?: Record<string, string>
|
|
87
|
-
peerDependencies?: Record<string, string>
|
|
88
|
-
optionalDependencies?: Record<string, string>
|
|
89
|
-
engines?: Record<string, string>
|
|
90
|
-
os?: string[]
|
|
91
|
-
cpu?: string[]
|
|
92
|
-
private?: boolean
|
|
93
|
-
publishConfig?: Record<string, unknown>
|
|
94
|
-
workspaces?: string[]
|
|
95
|
-
type?: 'module' | 'commonjs'
|
|
5
|
+
name: string;
|
|
6
|
+
version?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
keywords?: string[];
|
|
9
|
+
homepage?: string;
|
|
10
|
+
bugs?: string | {
|
|
11
|
+
url?: string;
|
|
12
|
+
email?: string;
|
|
13
|
+
};
|
|
14
|
+
license?: License;
|
|
15
|
+
author?: string | {
|
|
16
|
+
name: string;
|
|
17
|
+
email?: string;
|
|
18
|
+
url?: string;
|
|
19
|
+
};
|
|
20
|
+
contributors?: (string | {
|
|
21
|
+
name: string;
|
|
22
|
+
email?: string;
|
|
23
|
+
url?: string;
|
|
24
|
+
})[];
|
|
25
|
+
repository?: string | {
|
|
26
|
+
type: string;
|
|
27
|
+
url: string;
|
|
28
|
+
directory?: string;
|
|
29
|
+
};
|
|
30
|
+
main?: string;
|
|
31
|
+
module?: string;
|
|
32
|
+
types?: string;
|
|
33
|
+
exports?: Record<string, string | {
|
|
34
|
+
import?: string;
|
|
35
|
+
require?: string;
|
|
36
|
+
types?: string;
|
|
37
|
+
}>;
|
|
38
|
+
bin?: string | Record<string, string>;
|
|
39
|
+
files?: string[];
|
|
40
|
+
scripts?: Record<string, string>;
|
|
41
|
+
dependencies?: Record<string, string>;
|
|
42
|
+
devDependencies?: Record<string, string>;
|
|
43
|
+
peerDependencies?: Record<string, string>;
|
|
44
|
+
optionalDependencies?: Record<string, string>;
|
|
45
|
+
engines?: Record<string, string>;
|
|
46
|
+
os?: string[];
|
|
47
|
+
cpu?: string[];
|
|
48
|
+
private?: boolean;
|
|
49
|
+
publishConfig?: Record<string, unknown>;
|
|
50
|
+
workspaces?: string[];
|
|
51
|
+
type?: "module" | "commonjs";
|
|
96
52
|
}
|
|
97
|
-
export type ScriptPreset =
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
| 'node'
|
|
101
|
-
| 'testing'
|
|
102
|
-
| 'prettier'
|
|
103
|
-
| 'eslint'
|
|
104
|
-
export type DependencyInput = string | Record<string, string>
|
|
53
|
+
export type ScriptPreset = "typescript" | "react" | "node" | "testing" | "prettier" | "eslint";
|
|
54
|
+
export type DependencyInput = string | Record<string, string>;
|
|
55
|
+
export type DependenciesInput = DependencyInput[] | Record<string, string>;
|
|
105
56
|
export interface ConditionalConfig {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
57
|
+
when: {
|
|
58
|
+
env?: string;
|
|
59
|
+
platform?: NodeJS.Platform;
|
|
60
|
+
nodeVersion?: string;
|
|
61
|
+
ci?: boolean;
|
|
62
|
+
};
|
|
63
|
+
set: Partial<StandardPackageJson>;
|
|
113
64
|
}
|
|
114
|
-
export interface PackageConfig extends Omit<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
repository?: boolean
|
|
128
|
-
author?: boolean
|
|
129
|
-
}
|
|
65
|
+
export interface PackageConfig extends Omit<StandardPackageJson, "scripts" | "dependencies" | "devDependencies" | "peerDependencies"> {
|
|
66
|
+
extends?: string | PackageConfig;
|
|
67
|
+
scriptPresets?: ScriptPreset[];
|
|
68
|
+
scripts?: Record<string, string>;
|
|
69
|
+
dependencies?: DependenciesInput;
|
|
70
|
+
devDependencies?: DependenciesInput;
|
|
71
|
+
peerDependencies?: DependenciesInput;
|
|
72
|
+
conditions?: ConditionalConfig[];
|
|
73
|
+
autoInfer?: {
|
|
74
|
+
version?: boolean;
|
|
75
|
+
repository?: boolean;
|
|
76
|
+
author?: boolean;
|
|
77
|
+
};
|
|
130
78
|
}
|
|
131
79
|
export interface GenerateOptions {
|
|
132
|
-
|
|
133
|
-
|
|
80
|
+
indent?: number;
|
|
81
|
+
outputPath?: string;
|
|
134
82
|
}
|
|
135
|
-
export declare function createPackageJson(
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
): Promise<string>
|
|
139
|
-
export declare function writePackageJson(
|
|
140
|
-
config: PackageConfig,
|
|
141
|
-
options?: GenerateOptions
|
|
142
|
-
): Promise<void>
|
|
143
|
-
export declare function definePackageConfig(
|
|
144
|
-
config: PackageConfig
|
|
145
|
-
): PackageConfig
|
|
83
|
+
export declare function createPackageJson(config: PackageConfig, options?: GenerateOptions): Promise<string>;
|
|
84
|
+
export declare function writePackageJson(config: PackageConfig, options?: GenerateOptions): Promise<void>;
|
|
85
|
+
export declare function definePackageConfig(config: PackageConfig): PackageConfig;
|
|
146
86
|
|
|
147
|
-
export {}
|
|
87
|
+
export {};
|
package/dist/main.js
CHANGED
|
@@ -1,278 +1,279 @@
|
|
|
1
|
-
import { createRequire } from
|
|
2
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url)
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
3
3
|
|
|
4
4
|
// src/presets/scripts.ts
|
|
5
5
|
var scriptPresets = {
|
|
6
6
|
typescript: {
|
|
7
|
-
build:
|
|
8
|
-
|
|
9
|
-
typecheck:
|
|
7
|
+
build: "tsc",
|
|
8
|
+
"build:watch": "tsc --watch",
|
|
9
|
+
typecheck: "tsc --noEmit"
|
|
10
10
|
},
|
|
11
11
|
react: {
|
|
12
|
-
dev:
|
|
13
|
-
build:
|
|
14
|
-
preview:
|
|
12
|
+
dev: "vite",
|
|
13
|
+
build: "vite build",
|
|
14
|
+
preview: "vite preview"
|
|
15
15
|
},
|
|
16
16
|
node: {
|
|
17
|
-
start:
|
|
18
|
-
dev:
|
|
19
|
-
build:
|
|
17
|
+
start: "node dist/index.js",
|
|
18
|
+
dev: "tsx watch src/index.ts",
|
|
19
|
+
build: "tsup src/index.ts --format esm,cjs --dts"
|
|
20
20
|
},
|
|
21
21
|
testing: {
|
|
22
|
-
test:
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
test: "vitest",
|
|
23
|
+
"test:watch": "vitest watch",
|
|
24
|
+
"test:coverage": "vitest --coverage"
|
|
25
25
|
},
|
|
26
26
|
prettier: {
|
|
27
|
-
format:
|
|
28
|
-
|
|
27
|
+
format: "prettier --write .",
|
|
28
|
+
"format:check": "prettier --check ."
|
|
29
29
|
},
|
|
30
30
|
eslint: {
|
|
31
|
-
lint:
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
}
|
|
31
|
+
lint: "eslint .",
|
|
32
|
+
"lint:fix": "eslint . --fix"
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
35
|
function getPresetScripts(presets) {
|
|
36
|
-
const merged = {}
|
|
36
|
+
const merged = {};
|
|
37
37
|
for (const preset of presets) {
|
|
38
|
-
const scripts = scriptPresets[preset]
|
|
38
|
+
const scripts = scriptPresets[preset];
|
|
39
39
|
if (scripts) {
|
|
40
|
-
Object.assign(merged, scripts)
|
|
40
|
+
Object.assign(merged, scripts);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
return merged
|
|
43
|
+
return merged;
|
|
44
44
|
}
|
|
45
45
|
function mergeScripts(presetScripts, customScripts) {
|
|
46
|
-
return { ...presetScripts, ...customScripts }
|
|
46
|
+
return { ...presetScripts, ...customScripts };
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
// src/resolvers/dependencies.ts
|
|
50
50
|
function parseDependency(dep) {
|
|
51
|
-
if (typeof dep ===
|
|
52
|
-
const atIndex = dep.lastIndexOf(
|
|
51
|
+
if (typeof dep === "string") {
|
|
52
|
+
const atIndex = dep.lastIndexOf("@");
|
|
53
53
|
if (atIndex > 0) {
|
|
54
54
|
return {
|
|
55
55
|
name: dep.slice(0, atIndex),
|
|
56
|
-
version: dep.slice(atIndex + 1)
|
|
57
|
-
}
|
|
56
|
+
version: dep.slice(atIndex + 1)
|
|
57
|
+
};
|
|
58
58
|
}
|
|
59
|
-
return { name: dep }
|
|
59
|
+
return { name: dep };
|
|
60
60
|
}
|
|
61
|
-
const [name, version] = Object.entries(dep)[0]
|
|
62
|
-
return { name, version }
|
|
61
|
+
const [name, version] = Object.entries(dep)[0];
|
|
62
|
+
return { name, version };
|
|
63
63
|
}
|
|
64
64
|
async function fetchLatestVersion(packageName) {
|
|
65
|
-
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}
|
|
65
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`;
|
|
66
66
|
const response = await fetch(url, {
|
|
67
|
-
headers: { Accept:
|
|
68
|
-
})
|
|
67
|
+
headers: { Accept: "application/json" }
|
|
68
|
+
});
|
|
69
69
|
if (!response.ok) {
|
|
70
|
-
throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`)
|
|
70
|
+
throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`);
|
|
71
71
|
}
|
|
72
|
-
const data = await response.json()
|
|
73
|
-
return data[
|
|
72
|
+
const data = await response.json();
|
|
73
|
+
return data["dist-tags"].latest;
|
|
74
74
|
}
|
|
75
|
-
var versionCache = new Map
|
|
75
|
+
var versionCache = new Map;
|
|
76
76
|
async function resolveDependenciesCached(deps) {
|
|
77
|
-
if (!deps
|
|
78
|
-
return {}
|
|
77
|
+
if (!deps) {
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
if (!Array.isArray(deps)) {
|
|
81
|
+
return deps;
|
|
82
|
+
}
|
|
83
|
+
if (deps.length === 0) {
|
|
84
|
+
return {};
|
|
79
85
|
}
|
|
80
|
-
const results = []
|
|
86
|
+
const results = [];
|
|
81
87
|
for (const dep of deps) {
|
|
82
|
-
const { name, version } = parseDependency(dep)
|
|
88
|
+
const { name, version } = parseDependency(dep);
|
|
83
89
|
if (version) {
|
|
84
|
-
results.push([name, version])
|
|
85
|
-
continue
|
|
90
|
+
results.push([name, version]);
|
|
91
|
+
continue;
|
|
86
92
|
}
|
|
87
|
-
let resolvedVersion = versionCache.get(name)
|
|
93
|
+
let resolvedVersion = versionCache.get(name);
|
|
88
94
|
if (!resolvedVersion) {
|
|
89
|
-
resolvedVersion = `^${await fetchLatestVersion(name)}
|
|
90
|
-
versionCache.set(name, resolvedVersion)
|
|
95
|
+
resolvedVersion = `^${await fetchLatestVersion(name)}`;
|
|
96
|
+
versionCache.set(name, resolvedVersion);
|
|
91
97
|
}
|
|
92
|
-
results.push([name, resolvedVersion])
|
|
98
|
+
results.push([name, resolvedVersion]);
|
|
93
99
|
}
|
|
94
|
-
return Object.fromEntries(results)
|
|
100
|
+
return Object.fromEntries(results);
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
// src/utils/merge.ts
|
|
98
104
|
function deepMerge(target, source) {
|
|
99
|
-
const result = { ...target }
|
|
105
|
+
const result = { ...target };
|
|
100
106
|
for (const key of Object.keys(source)) {
|
|
101
|
-
const sourceValue = source[key]
|
|
102
|
-
const targetValue = target[key]
|
|
103
|
-
if (sourceValue === undefined)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
!Array.isArray(sourceValue) &&
|
|
108
|
-
typeof targetValue === 'object' &&
|
|
109
|
-
targetValue !== null &&
|
|
110
|
-
!Array.isArray(targetValue)
|
|
111
|
-
) {
|
|
112
|
-
result[key] = deepMerge(targetValue, sourceValue)
|
|
107
|
+
const sourceValue = source[key];
|
|
108
|
+
const targetValue = target[key];
|
|
109
|
+
if (sourceValue === undefined)
|
|
110
|
+
continue;
|
|
111
|
+
if (typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && typeof targetValue === "object" && targetValue !== null && !Array.isArray(targetValue)) {
|
|
112
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
113
113
|
} else {
|
|
114
|
-
result[key] = sourceValue
|
|
114
|
+
result[key] = sourceValue;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
return result
|
|
117
|
+
return result;
|
|
118
118
|
}
|
|
119
|
-
function
|
|
120
|
-
|
|
119
|
+
function mergeDependencies(target, source) {
|
|
120
|
+
if (!target && !source)
|
|
121
|
+
return;
|
|
122
|
+
if (!target)
|
|
123
|
+
return source;
|
|
124
|
+
if (!source)
|
|
125
|
+
return target;
|
|
126
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
127
|
+
return [...target, ...source];
|
|
128
|
+
}
|
|
129
|
+
if (!Array.isArray(target) && !Array.isArray(source)) {
|
|
130
|
+
return { ...target, ...source };
|
|
131
|
+
}
|
|
132
|
+
const targetObj = Array.isArray(target) ? {} : target;
|
|
133
|
+
const sourceObj = Array.isArray(source) ? {} : source;
|
|
134
|
+
const targetArr = Array.isArray(target) ? target : [];
|
|
135
|
+
const sourceArr = Array.isArray(source) ? source : [];
|
|
136
|
+
return [...targetArr, ...sourceArr, { ...targetObj, ...sourceObj }];
|
|
121
137
|
}
|
|
122
138
|
async function resolveExtends(config) {
|
|
123
139
|
if (!config.extends) {
|
|
124
|
-
return config
|
|
140
|
+
return config;
|
|
125
141
|
}
|
|
126
|
-
let baseConfig
|
|
127
|
-
if (typeof config.extends ===
|
|
128
|
-
const imported = await import(config.extends)
|
|
129
|
-
baseConfig = imported.default ?? imported
|
|
142
|
+
let baseConfig;
|
|
143
|
+
if (typeof config.extends === "string") {
|
|
144
|
+
const imported = await import(config.extends);
|
|
145
|
+
baseConfig = imported.default ?? imported;
|
|
130
146
|
} else {
|
|
131
|
-
baseConfig = config.extends
|
|
147
|
+
baseConfig = config.extends;
|
|
132
148
|
}
|
|
133
|
-
baseConfig = await resolveExtends(baseConfig)
|
|
134
|
-
const { extends: _, ...currentWithoutExtends } = config
|
|
149
|
+
baseConfig = await resolveExtends(baseConfig);
|
|
150
|
+
const { extends: _, ...currentWithoutExtends } = config;
|
|
135
151
|
return {
|
|
136
152
|
...baseConfig,
|
|
137
153
|
...currentWithoutExtends,
|
|
138
|
-
dependencies:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
),
|
|
142
|
-
devDependencies: mergeArrays(
|
|
143
|
-
baseConfig.devDependencies,
|
|
144
|
-
currentWithoutExtends.devDependencies
|
|
145
|
-
),
|
|
146
|
-
peerDependencies: mergeArrays(
|
|
147
|
-
baseConfig.peerDependencies,
|
|
148
|
-
currentWithoutExtends.peerDependencies
|
|
149
|
-
),
|
|
154
|
+
dependencies: mergeDependencies(baseConfig.dependencies, currentWithoutExtends.dependencies),
|
|
155
|
+
devDependencies: mergeDependencies(baseConfig.devDependencies, currentWithoutExtends.devDependencies),
|
|
156
|
+
peerDependencies: mergeDependencies(baseConfig.peerDependencies, currentWithoutExtends.peerDependencies),
|
|
150
157
|
scripts: { ...baseConfig.scripts, ...currentWithoutExtends.scripts },
|
|
151
158
|
scriptPresets: [
|
|
152
|
-
...
|
|
153
|
-
...
|
|
154
|
-
]
|
|
155
|
-
}
|
|
159
|
+
...baseConfig.scriptPresets ?? [],
|
|
160
|
+
...currentWithoutExtends.scriptPresets ?? []
|
|
161
|
+
]
|
|
162
|
+
};
|
|
156
163
|
}
|
|
157
164
|
|
|
158
165
|
// src/utils/conditions.ts
|
|
159
166
|
function getContext() {
|
|
160
167
|
return {
|
|
161
|
-
env:
|
|
168
|
+
env: "development",
|
|
162
169
|
platform: process.platform,
|
|
163
170
|
nodeVersion: process.version,
|
|
164
|
-
ci: process.env.CI ===
|
|
165
|
-
}
|
|
171
|
+
ci: process.env.CI === "true" || process.env.CI === "1"
|
|
172
|
+
};
|
|
166
173
|
}
|
|
167
174
|
function evaluateCondition(when, context) {
|
|
168
175
|
if (when.env !== undefined && context.env !== when.env) {
|
|
169
|
-
return false
|
|
176
|
+
return false;
|
|
170
177
|
}
|
|
171
178
|
if (when.platform !== undefined && context.platform !== when.platform) {
|
|
172
|
-
return false
|
|
179
|
+
return false;
|
|
173
180
|
}
|
|
174
181
|
if (when.ci !== undefined && context.ci !== when.ci) {
|
|
175
|
-
return false
|
|
182
|
+
return false;
|
|
176
183
|
}
|
|
177
184
|
if (when.nodeVersion !== undefined) {
|
|
178
185
|
if (!context.nodeVersion.startsWith(when.nodeVersion)) {
|
|
179
|
-
return false
|
|
186
|
+
return false;
|
|
180
187
|
}
|
|
181
188
|
}
|
|
182
|
-
return true
|
|
189
|
+
return true;
|
|
183
190
|
}
|
|
184
191
|
function applyConditions(baseConfig, conditions) {
|
|
185
192
|
if (!conditions || conditions.length === 0) {
|
|
186
|
-
return baseConfig
|
|
193
|
+
return baseConfig;
|
|
187
194
|
}
|
|
188
|
-
const context = getContext()
|
|
189
|
-
let result = { ...baseConfig }
|
|
195
|
+
const context = getContext();
|
|
196
|
+
let result = { ...baseConfig };
|
|
190
197
|
for (const condition of conditions) {
|
|
191
198
|
if (evaluateCondition(condition.when, context)) {
|
|
192
|
-
result = deepMerge(result, condition.set)
|
|
199
|
+
result = deepMerge(result, condition.set);
|
|
193
200
|
}
|
|
194
201
|
}
|
|
195
|
-
return result
|
|
202
|
+
return result;
|
|
196
203
|
}
|
|
197
204
|
|
|
198
205
|
// src/generator/createPackageJson.ts
|
|
199
206
|
async function createPackageJson(config, options = {}) {
|
|
200
|
-
const { indent = 2 } = options
|
|
201
|
-
let resolved = await resolveExtends(config)
|
|
202
|
-
const presetScripts = resolved.scriptPresets
|
|
203
|
-
|
|
204
|
-
: {}
|
|
205
|
-
const finalScripts = mergeScripts(presetScripts, resolved.scripts)
|
|
207
|
+
const { indent = 2 } = options;
|
|
208
|
+
let resolved = await resolveExtends(config);
|
|
209
|
+
const presetScripts = resolved.scriptPresets ? getPresetScripts(resolved.scriptPresets) : {};
|
|
210
|
+
const finalScripts = mergeScripts(presetScripts, resolved.scripts);
|
|
206
211
|
const [dependencies, devDependencies, peerDependencies] = await Promise.all([
|
|
207
212
|
resolveDependenciesCached(resolved.dependencies),
|
|
208
213
|
resolveDependenciesCached(resolved.devDependencies),
|
|
209
|
-
resolveDependenciesCached(resolved.peerDependencies)
|
|
210
|
-
])
|
|
214
|
+
resolveDependenciesCached(resolved.peerDependencies)
|
|
215
|
+
]);
|
|
211
216
|
const packageJson = {
|
|
212
217
|
name: resolved.name,
|
|
213
|
-
...
|
|
214
|
-
...
|
|
215
|
-
...
|
|
216
|
-
...
|
|
217
|
-
...
|
|
218
|
-
...
|
|
219
|
-
...
|
|
220
|
-
...
|
|
221
|
-
contributors: resolved.contributors
|
|
222
|
-
}
|
|
223
|
-
...
|
|
224
|
-
...
|
|
225
|
-
...
|
|
226
|
-
...
|
|
227
|
-
...
|
|
228
|
-
...
|
|
229
|
-
...
|
|
230
|
-
...
|
|
231
|
-
...
|
|
232
|
-
...
|
|
233
|
-
...
|
|
234
|
-
...
|
|
235
|
-
...
|
|
236
|
-
optionalDependencies: resolved.optionalDependencies
|
|
237
|
-
}
|
|
238
|
-
...
|
|
239
|
-
...
|
|
240
|
-
...
|
|
241
|
-
...
|
|
242
|
-
...
|
|
243
|
-
...
|
|
244
|
-
}
|
|
245
|
-
const finalPackageJson = applyConditions(packageJson, resolved.conditions)
|
|
246
|
-
return JSON.stringify(finalPackageJson, null, indent)
|
|
218
|
+
...resolved.version && { version: resolved.version },
|
|
219
|
+
...resolved.description && { description: resolved.description },
|
|
220
|
+
...resolved.keywords?.length && { keywords: resolved.keywords },
|
|
221
|
+
...resolved.homepage && { homepage: resolved.homepage },
|
|
222
|
+
...resolved.bugs && { bugs: resolved.bugs },
|
|
223
|
+
...resolved.license && { license: resolved.license },
|
|
224
|
+
...resolved.author && { author: resolved.author },
|
|
225
|
+
...resolved.contributors?.length && {
|
|
226
|
+
contributors: resolved.contributors
|
|
227
|
+
},
|
|
228
|
+
...resolved.repository && { repository: resolved.repository },
|
|
229
|
+
...resolved.type && { type: resolved.type },
|
|
230
|
+
...resolved.main && { main: resolved.main },
|
|
231
|
+
...resolved.module && { module: resolved.module },
|
|
232
|
+
...resolved.types && { types: resolved.types },
|
|
233
|
+
...resolved.exports && { exports: resolved.exports },
|
|
234
|
+
...resolved.bin && { bin: resolved.bin },
|
|
235
|
+
...resolved.files?.length && { files: resolved.files },
|
|
236
|
+
...Object.keys(finalScripts).length && { scripts: finalScripts },
|
|
237
|
+
...Object.keys(dependencies).length && { dependencies },
|
|
238
|
+
...Object.keys(devDependencies).length && { devDependencies },
|
|
239
|
+
...Object.keys(peerDependencies).length && { peerDependencies },
|
|
240
|
+
...resolved.optionalDependencies && {
|
|
241
|
+
optionalDependencies: resolved.optionalDependencies
|
|
242
|
+
},
|
|
243
|
+
...resolved.engines && { engines: resolved.engines },
|
|
244
|
+
...resolved.os?.length && { os: resolved.os },
|
|
245
|
+
...resolved.cpu?.length && { cpu: resolved.cpu },
|
|
246
|
+
...resolved.private !== undefined && { private: resolved.private },
|
|
247
|
+
...resolved.publishConfig && { publishConfig: resolved.publishConfig },
|
|
248
|
+
...resolved.workspaces?.length && { workspaces: resolved.workspaces }
|
|
249
|
+
};
|
|
250
|
+
const finalPackageJson = applyConditions(packageJson, resolved.conditions);
|
|
251
|
+
return JSON.stringify(finalPackageJson, null, indent);
|
|
247
252
|
}
|
|
248
253
|
async function writePackageJson(config, options = {}) {
|
|
249
|
-
const { outputPath =
|
|
250
|
-
const json = await createPackageJson(config, options)
|
|
251
|
-
await Bun.write(
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
`
|
|
255
|
-
`
|
|
256
|
-
)
|
|
257
|
-
console.log(`✨ Generated ${outputPath}`)
|
|
254
|
+
const { outputPath = "package.json" } = options;
|
|
255
|
+
const json = await createPackageJson(config, options);
|
|
256
|
+
await Bun.write(outputPath, json + `
|
|
257
|
+
`);
|
|
258
|
+
console.log(`✨ Generated ${outputPath}`);
|
|
258
259
|
}
|
|
259
260
|
|
|
260
261
|
// src/main.ts
|
|
261
262
|
function definePackageConfig(config) {
|
|
262
|
-
return config
|
|
263
|
+
return config;
|
|
263
264
|
}
|
|
264
265
|
async function main() {
|
|
265
|
-
const configPath = process.argv[2] ??
|
|
266
|
-
const outputPath = process.argv[3] ??
|
|
266
|
+
const configPath = process.argv[2] ?? "package.config.ts";
|
|
267
|
+
const outputPath = process.argv[3] ?? "package.json";
|
|
267
268
|
try {
|
|
268
|
-
const configModule = await import(Bun.pathToFileURL(configPath).href)
|
|
269
|
-
const config = configModule.default ?? configModule
|
|
270
|
-
await writePackageJson(config, { outputPath })
|
|
269
|
+
const configModule = await import(Bun.pathToFileURL(configPath).href);
|
|
270
|
+
const config = configModule.default ?? configModule;
|
|
271
|
+
await writePackageJson(config, { outputPath });
|
|
271
272
|
} catch (error) {
|
|
272
|
-
if (error.code ===
|
|
273
|
-
console.error(`❌ Config file not found: ${configPath}`)
|
|
273
|
+
if (error.code === "ERR_MODULE_NOT_FOUND") {
|
|
274
|
+
console.error(`❌ Config file not found: ${configPath}`);
|
|
274
275
|
console.error(`
|
|
275
|
-
Create a package.config.ts file with:`)
|
|
276
|
+
Create a package.config.ts file with:`);
|
|
276
277
|
console.error(`
|
|
277
278
|
import { definePackageConfig } from './src/main'
|
|
278
279
|
|
|
@@ -283,15 +284,19 @@ export default definePackageConfig({
|
|
|
283
284
|
dependencies: ['lodash', 'zod'],
|
|
284
285
|
devDependencies: ['typescript', 'vitest'],
|
|
285
286
|
})
|
|
286
|
-
`)
|
|
287
|
-
process.exit(1)
|
|
287
|
+
`);
|
|
288
|
+
process.exit(1);
|
|
288
289
|
}
|
|
289
|
-
throw error
|
|
290
|
+
throw error;
|
|
290
291
|
}
|
|
291
292
|
}
|
|
292
293
|
if (__require.main == __require.module) {
|
|
293
|
-
main()
|
|
294
|
+
main();
|
|
294
295
|
}
|
|
295
|
-
export {
|
|
296
|
+
export {
|
|
297
|
+
writePackageJson,
|
|
298
|
+
definePackageConfig,
|
|
299
|
+
createPackageJson
|
|
300
|
+
};
|
|
296
301
|
|
|
297
|
-
//# debugId=
|
|
302
|
+
//# debugId=0021DE6288BCB32D64756E2164756E21
|
package/dist/main.js.map
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"sources": ["../src/presets/scripts.ts", "../src/resolvers/dependencies.ts", "../src/utils/merge.ts", "../src/utils/conditions.ts", "../src/generator/createPackageJson.ts", "../src/main.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ScriptPreset } from '../schemas/package'\n\ntype ScriptDefinitions = Record<string, string>\n\nconst scriptPresets: Record<ScriptPreset, ScriptDefinitions> = {\n typescript: {\n build: 'tsc',\n 'build:watch': 'tsc --watch',\n typecheck: 'tsc --noEmit',\n },\n\n react: {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n },\n\n node: {\n start: 'node dist/index.js',\n dev: 'tsx watch src/index.ts',\n build: 'tsup src/index.ts --format esm,cjs --dts',\n },\n\n testing: {\n test: 'vitest',\n 'test:watch': 'vitest watch',\n 'test:coverage': 'vitest --coverage',\n },\n\n prettier: {\n format: 'prettier --write .',\n 'format:check': 'prettier --check .',\n },\n\n eslint: {\n lint: 'eslint .',\n 'lint:fix': 'eslint . --fix',\n },\n}\n\nexport function getPresetScripts(presets: ScriptPreset[]): ScriptDefinitions {\n const merged: ScriptDefinitions = {}\n\n for (const preset of presets) {\n const scripts = scriptPresets[preset]\n if (scripts) {\n Object.assign(merged, scripts)\n }\n }\n\n return merged\n}\n\nexport function mergeScripts(\n presetScripts: ScriptDefinitions,\n customScripts?: ScriptDefinitions\n): ScriptDefinitions {\n return { ...presetScripts, ...customScripts }\n}\n",
|
|
6
|
-
"import type { DependencyInput } 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:
|
|
7
|
-
"import type { PackageConfig,
|
|
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
|
+
"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
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 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 ConditionalConfig,\n type GenerateOptions,\n type License,\n}\n\n// Run if main module\nif (import.meta.main) {\n main()\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"
|
|
11
11
|
],
|
|
12
|
-
"mappings": ";;;;AAIA,IAAM,gBAAyD;AAAA,EAC7D,YAAY;AAAA,IACV,OAAO;AAAA,IACP,eAAe;AAAA,IACf,WAAW;AAAA,EACb;AAAA,EAEA,OAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EAEA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EAEA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AAAA,EAEA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,gBAAgB;AAAA,EAClB;AAAA,EAEA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACF;AAEO,SAAS,gBAAgB,CAAC,SAA4C;AAAA,EAC3E,MAAM,SAA4B,CAAC;AAAA,EAEnC,WAAW,UAAU,SAAS;AAAA,IAC5B,MAAM,UAAU,cAAc;AAAA,IAC9B,IAAI,SAAS;AAAA,MACX,OAAO,OAAO,QAAQ,OAAO;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,YAAY,CAC1B,eACA,eACmB;AAAA,EACnB,OAAO,KAAK,kBAAkB,cAAc;AAAA;;;AC9C9C,SAAS,eAAe,CAAC,KAGvB;AAAA,EACA,IAAI,OAAO,QAAQ,UAAU;AAAA,IAC3B,MAAM,UAAU,IAAI,YAAY,GAAG;AAAA,IACnC,IAAI,UAAU,GAAG;AAAA,MACf,OAAO;AAAA,QACL,MAAM,IAAI,MAAM,GAAG,OAAO;AAAA,QAC1B,SAAS,IAAI,MAAM,UAAU,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,IACA,OAAO,EAAE,MAAM,IAAI;AAAA,EACrB;AAAA,EAGA,OAAO,MAAM,WAAW,OAAO,QAAQ,GAAG,EAAE;AAAA,EAC5C,OAAO,EAAE,MAAM,QAAQ;AAAA;AAIzB,eAAe,kBAAkB,CAAC,aAAsC;AAAA,EACtE,MAAM,MAAM,8BAA8B,mBAAmB,WAAW;AAAA,EAExE,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,SAAS,EAAE,QAAQ,mBAAmB;AAAA,EACxC,CAAC;AAAA,EAED,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,IAAI,MAAM,mBAAmB,gBAAgB,SAAS,YAAY;AAAA,EAC1E;AAAA,EAEA,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,EAClC,OAAO,KAAK,aAAa;AAAA;
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "0021DE6288BCB32D64756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/package.config.ts
CHANGED
package/package.json
CHANGED
package/src/main.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type {
|
|
|
3
3
|
StandardPackageJson,
|
|
4
4
|
ScriptPreset,
|
|
5
5
|
DependencyInput,
|
|
6
|
+
DependenciesInput,
|
|
6
7
|
ConditionalConfig,
|
|
7
8
|
License,
|
|
8
9
|
} from './schemas/package'
|
|
@@ -55,6 +56,7 @@ export {
|
|
|
55
56
|
type StandardPackageJson,
|
|
56
57
|
type ScriptPreset,
|
|
57
58
|
type DependencyInput,
|
|
59
|
+
type DependenciesInput,
|
|
58
60
|
type ConditionalConfig,
|
|
59
61
|
type GenerateOptions,
|
|
60
62
|
type License,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DependencyInput } from '../schemas/package'
|
|
1
|
+
import type { DependencyInput, DependenciesInput } from '../schemas/package'
|
|
2
2
|
|
|
3
3
|
interface NpmPackageInfo {
|
|
4
4
|
'dist-tags': {
|
|
@@ -62,9 +62,18 @@ async function resolveDependency(
|
|
|
62
62
|
|
|
63
63
|
// Resolve all dependencies in parallel with batching
|
|
64
64
|
export async function resolveDependencies(
|
|
65
|
-
deps:
|
|
65
|
+
deps: DependenciesInput | undefined
|
|
66
66
|
): Promise<Record<string, string>> {
|
|
67
|
-
if (!deps
|
|
67
|
+
if (!deps) {
|
|
68
|
+
return {}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// If already an object (standard format), return as-is
|
|
72
|
+
if (!Array.isArray(deps)) {
|
|
73
|
+
return deps
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (deps.length === 0) {
|
|
68
77
|
return {}
|
|
69
78
|
}
|
|
70
79
|
|
|
@@ -77,9 +86,18 @@ export async function resolveDependencies(
|
|
|
77
86
|
const versionCache = new Map<string, string>()
|
|
78
87
|
|
|
79
88
|
export async function resolveDependenciesCached(
|
|
80
|
-
deps:
|
|
89
|
+
deps: DependenciesInput | undefined
|
|
81
90
|
): Promise<Record<string, string>> {
|
|
82
|
-
if (!deps
|
|
91
|
+
if (!deps) {
|
|
92
|
+
return {}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// If already an object (standard format), return as-is
|
|
96
|
+
if (!Array.isArray(deps)) {
|
|
97
|
+
return deps
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (deps.length === 0) {
|
|
83
101
|
return {}
|
|
84
102
|
}
|
|
85
103
|
|
package/src/schemas/package.ts
CHANGED
|
@@ -76,9 +76,12 @@ export type ScriptPreset =
|
|
|
76
76
|
| 'prettier'
|
|
77
77
|
| 'eslint'
|
|
78
78
|
|
|
79
|
-
// Dependency can be: 'lodash' | 'lodash@^4' | { lodash: '^4.0.0' }
|
|
79
|
+
// Dependency can be: 'lodash' | 'lodash@^4' | { lodash: '^4.0.0' } | Record<string, string>
|
|
80
80
|
export type DependencyInput = string | Record<string, string>
|
|
81
81
|
|
|
82
|
+
// Dependencies can be array (magical) or object (standard)
|
|
83
|
+
export type DependenciesInput = DependencyInput[] | Record<string, string>
|
|
84
|
+
|
|
82
85
|
// Conditional config block
|
|
83
86
|
export interface ConditionalConfig {
|
|
84
87
|
when: {
|
|
@@ -102,10 +105,10 @@ export interface PackageConfig extends Omit<
|
|
|
102
105
|
scriptPresets?: ScriptPreset[]
|
|
103
106
|
scripts?: Record<string, string>
|
|
104
107
|
|
|
105
|
-
// Magical dependency inputs (auto-resolve versions)
|
|
106
|
-
dependencies?:
|
|
107
|
-
devDependencies?:
|
|
108
|
-
peerDependencies?:
|
|
108
|
+
// Magical dependency inputs (auto-resolve versions) or standard object format
|
|
109
|
+
dependencies?: DependenciesInput
|
|
110
|
+
devDependencies?: DependenciesInput
|
|
111
|
+
peerDependencies?: DependenciesInput
|
|
109
112
|
|
|
110
113
|
// Conditional configuration
|
|
111
114
|
conditions?: ConditionalConfig[]
|
package/src/utils/merge.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PackageConfig } from '../schemas/package'
|
|
1
|
+
import type { PackageConfig, DependenciesInput } from '../schemas/package'
|
|
2
2
|
|
|
3
3
|
// Deep merge two objects, with source overriding target
|
|
4
4
|
export function deepMerge<T extends Record<string, unknown>>(
|
|
@@ -33,12 +33,33 @@ export function deepMerge<T extends Record<string, unknown>>(
|
|
|
33
33
|
return result
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
// Merge
|
|
37
|
-
export function
|
|
38
|
-
target:
|
|
39
|
-
source:
|
|
40
|
-
):
|
|
41
|
-
|
|
36
|
+
// Merge dependencies (handles both array and object formats)
|
|
37
|
+
export function mergeDependencies(
|
|
38
|
+
target: DependenciesInput | undefined,
|
|
39
|
+
source: DependenciesInput | undefined
|
|
40
|
+
): DependenciesInput | undefined {
|
|
41
|
+
if (!target && !source) return undefined
|
|
42
|
+
if (!target) return source
|
|
43
|
+
if (!source) return target
|
|
44
|
+
|
|
45
|
+
// If both are arrays, concat them
|
|
46
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
47
|
+
return [...target, ...source]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// If both are objects, merge them
|
|
51
|
+
if (!Array.isArray(target) && !Array.isArray(source)) {
|
|
52
|
+
return { ...target, ...source }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Mixed formats: convert array to object entries and merge
|
|
56
|
+
const targetObj = Array.isArray(target) ? {} : target
|
|
57
|
+
const sourceObj = Array.isArray(source) ? {} : source
|
|
58
|
+
const targetArr = Array.isArray(target) ? target : []
|
|
59
|
+
const sourceArr = Array.isArray(source) ? source : []
|
|
60
|
+
|
|
61
|
+
// Return as array with both arrays and object merged
|
|
62
|
+
return [...targetArr, ...sourceArr, { ...targetObj, ...sourceObj }]
|
|
42
63
|
}
|
|
43
64
|
|
|
44
65
|
// Resolve extends chain
|
|
@@ -68,16 +89,16 @@ export async function resolveExtends(
|
|
|
68
89
|
return {
|
|
69
90
|
...baseConfig,
|
|
70
91
|
...currentWithoutExtends,
|
|
71
|
-
// Merge
|
|
72
|
-
dependencies:
|
|
92
|
+
// Merge dependencies (handles both array and object formats)
|
|
93
|
+
dependencies: mergeDependencies(
|
|
73
94
|
baseConfig.dependencies,
|
|
74
95
|
currentWithoutExtends.dependencies
|
|
75
96
|
),
|
|
76
|
-
devDependencies:
|
|
97
|
+
devDependencies: mergeDependencies(
|
|
77
98
|
baseConfig.devDependencies,
|
|
78
99
|
currentWithoutExtends.devDependencies
|
|
79
100
|
),
|
|
80
|
-
peerDependencies:
|
|
101
|
+
peerDependencies: mergeDependencies(
|
|
81
102
|
baseConfig.peerDependencies,
|
|
82
103
|
currentWithoutExtends.peerDependencies
|
|
83
104
|
),
|