@a35hie/ts-pkg 0.1.0 → 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 +3 -3
- package/build.ts +12 -0
- package/dist/cli.js +313 -0
- package/dist/main.d.ts +77 -137
- package/dist/main.js +180 -189
- package/dist/main.js.map +6 -6
- package/package.config.ts +1 -1
- package/package.json +1 -1
- package/src/cli.ts +40 -0
- package/src/generator/createPackageJson.ts +2 -1
- package/src/main.ts +2 -5
- package/src/resolvers/dependencies.ts +23 -5
- package/src/schemas/package.ts +8 -5
- package/src/utils/merge.ts +32 -11
package/dist/main.js
CHANGED
|
@@ -1,297 +1,288 @@
|
|
|
1
|
-
import { createRequire } from
|
|
2
|
-
var
|
|
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
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
3
19
|
|
|
4
20
|
// src/presets/scripts.ts
|
|
5
21
|
var scriptPresets = {
|
|
6
22
|
typescript: {
|
|
7
|
-
build:
|
|
8
|
-
|
|
9
|
-
typecheck:
|
|
23
|
+
build: "tsc",
|
|
24
|
+
"build:watch": "tsc --watch",
|
|
25
|
+
typecheck: "tsc --noEmit"
|
|
10
26
|
},
|
|
11
27
|
react: {
|
|
12
|
-
dev:
|
|
13
|
-
build:
|
|
14
|
-
preview:
|
|
28
|
+
dev: "vite",
|
|
29
|
+
build: "vite build",
|
|
30
|
+
preview: "vite preview"
|
|
15
31
|
},
|
|
16
32
|
node: {
|
|
17
|
-
start:
|
|
18
|
-
dev:
|
|
19
|
-
build:
|
|
33
|
+
start: "node dist/index.js",
|
|
34
|
+
dev: "tsx watch src/index.ts",
|
|
35
|
+
build: "tsup src/index.ts --format esm,cjs --dts"
|
|
20
36
|
},
|
|
21
37
|
testing: {
|
|
22
|
-
test:
|
|
23
|
-
|
|
24
|
-
|
|
38
|
+
test: "vitest",
|
|
39
|
+
"test:watch": "vitest watch",
|
|
40
|
+
"test:coverage": "vitest --coverage"
|
|
25
41
|
},
|
|
26
42
|
prettier: {
|
|
27
|
-
format:
|
|
28
|
-
|
|
43
|
+
format: "prettier --write .",
|
|
44
|
+
"format:check": "prettier --check ."
|
|
29
45
|
},
|
|
30
46
|
eslint: {
|
|
31
|
-
lint:
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
}
|
|
47
|
+
lint: "eslint .",
|
|
48
|
+
"lint:fix": "eslint . --fix"
|
|
49
|
+
}
|
|
50
|
+
};
|
|
35
51
|
function getPresetScripts(presets) {
|
|
36
|
-
const merged = {}
|
|
52
|
+
const merged = {};
|
|
37
53
|
for (const preset of presets) {
|
|
38
|
-
const scripts = scriptPresets[preset]
|
|
54
|
+
const scripts = scriptPresets[preset];
|
|
39
55
|
if (scripts) {
|
|
40
|
-
Object.assign(merged, scripts)
|
|
56
|
+
Object.assign(merged, scripts);
|
|
41
57
|
}
|
|
42
58
|
}
|
|
43
|
-
return merged
|
|
59
|
+
return merged;
|
|
44
60
|
}
|
|
45
61
|
function mergeScripts(presetScripts, customScripts) {
|
|
46
|
-
return { ...presetScripts, ...customScripts }
|
|
62
|
+
return { ...presetScripts, ...customScripts };
|
|
47
63
|
}
|
|
48
64
|
|
|
49
65
|
// src/resolvers/dependencies.ts
|
|
50
66
|
function parseDependency(dep) {
|
|
51
|
-
if (typeof dep ===
|
|
52
|
-
const atIndex = dep.lastIndexOf(
|
|
67
|
+
if (typeof dep === "string") {
|
|
68
|
+
const atIndex = dep.lastIndexOf("@");
|
|
53
69
|
if (atIndex > 0) {
|
|
54
70
|
return {
|
|
55
71
|
name: dep.slice(0, atIndex),
|
|
56
|
-
version: dep.slice(atIndex + 1)
|
|
57
|
-
}
|
|
72
|
+
version: dep.slice(atIndex + 1)
|
|
73
|
+
};
|
|
58
74
|
}
|
|
59
|
-
return { name: dep }
|
|
75
|
+
return { name: dep };
|
|
60
76
|
}
|
|
61
|
-
const [name, version] = Object.entries(dep)[0]
|
|
62
|
-
return { name, version }
|
|
77
|
+
const [name, version] = Object.entries(dep)[0];
|
|
78
|
+
return { name, version };
|
|
63
79
|
}
|
|
64
80
|
async function fetchLatestVersion(packageName) {
|
|
65
|
-
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}
|
|
81
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`;
|
|
66
82
|
const response = await fetch(url, {
|
|
67
|
-
headers: { Accept:
|
|
68
|
-
})
|
|
83
|
+
headers: { Accept: "application/json" }
|
|
84
|
+
});
|
|
69
85
|
if (!response.ok) {
|
|
70
|
-
throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`)
|
|
86
|
+
throw new Error(`Failed to fetch ${packageName}: ${response.statusText}`);
|
|
71
87
|
}
|
|
72
|
-
const data = await response.json()
|
|
73
|
-
return data[
|
|
88
|
+
const data = await response.json();
|
|
89
|
+
return data["dist-tags"].latest;
|
|
74
90
|
}
|
|
75
|
-
var versionCache = new Map
|
|
91
|
+
var versionCache = new Map;
|
|
76
92
|
async function resolveDependenciesCached(deps) {
|
|
77
|
-
if (!deps
|
|
78
|
-
return {}
|
|
93
|
+
if (!deps) {
|
|
94
|
+
return {};
|
|
95
|
+
}
|
|
96
|
+
if (!Array.isArray(deps)) {
|
|
97
|
+
return deps;
|
|
79
98
|
}
|
|
80
|
-
|
|
99
|
+
if (deps.length === 0) {
|
|
100
|
+
return {};
|
|
101
|
+
}
|
|
102
|
+
const results = [];
|
|
81
103
|
for (const dep of deps) {
|
|
82
|
-
const { name, version } = parseDependency(dep)
|
|
104
|
+
const { name, version } = parseDependency(dep);
|
|
83
105
|
if (version) {
|
|
84
|
-
results.push([name, version])
|
|
85
|
-
continue
|
|
106
|
+
results.push([name, version]);
|
|
107
|
+
continue;
|
|
86
108
|
}
|
|
87
|
-
let resolvedVersion = versionCache.get(name)
|
|
109
|
+
let resolvedVersion = versionCache.get(name);
|
|
88
110
|
if (!resolvedVersion) {
|
|
89
|
-
resolvedVersion = `^${await fetchLatestVersion(name)}
|
|
90
|
-
versionCache.set(name, resolvedVersion)
|
|
111
|
+
resolvedVersion = `^${await fetchLatestVersion(name)}`;
|
|
112
|
+
versionCache.set(name, resolvedVersion);
|
|
91
113
|
}
|
|
92
|
-
results.push([name, resolvedVersion])
|
|
114
|
+
results.push([name, resolvedVersion]);
|
|
93
115
|
}
|
|
94
|
-
return Object.fromEntries(results)
|
|
116
|
+
return Object.fromEntries(results);
|
|
95
117
|
}
|
|
96
118
|
|
|
97
119
|
// src/utils/merge.ts
|
|
98
120
|
function deepMerge(target, source) {
|
|
99
|
-
const result = { ...target }
|
|
121
|
+
const result = { ...target };
|
|
100
122
|
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)
|
|
123
|
+
const sourceValue = source[key];
|
|
124
|
+
const targetValue = target[key];
|
|
125
|
+
if (sourceValue === undefined)
|
|
126
|
+
continue;
|
|
127
|
+
if (typeof sourceValue === "object" && sourceValue !== null && !Array.isArray(sourceValue) && typeof targetValue === "object" && targetValue !== null && !Array.isArray(targetValue)) {
|
|
128
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
113
129
|
} else {
|
|
114
|
-
result[key] = sourceValue
|
|
130
|
+
result[key] = sourceValue;
|
|
115
131
|
}
|
|
116
132
|
}
|
|
117
|
-
return result
|
|
133
|
+
return result;
|
|
118
134
|
}
|
|
119
|
-
function
|
|
120
|
-
|
|
135
|
+
function mergeDependencies(target, source) {
|
|
136
|
+
if (!target && !source)
|
|
137
|
+
return;
|
|
138
|
+
if (!target)
|
|
139
|
+
return source;
|
|
140
|
+
if (!source)
|
|
141
|
+
return target;
|
|
142
|
+
if (Array.isArray(target) && Array.isArray(source)) {
|
|
143
|
+
return [...target, ...source];
|
|
144
|
+
}
|
|
145
|
+
if (!Array.isArray(target) && !Array.isArray(source)) {
|
|
146
|
+
return { ...target, ...source };
|
|
147
|
+
}
|
|
148
|
+
const targetObj = Array.isArray(target) ? {} : target;
|
|
149
|
+
const sourceObj = Array.isArray(source) ? {} : source;
|
|
150
|
+
const targetArr = Array.isArray(target) ? target : [];
|
|
151
|
+
const sourceArr = Array.isArray(source) ? source : [];
|
|
152
|
+
return [...targetArr, ...sourceArr, { ...targetObj, ...sourceObj }];
|
|
121
153
|
}
|
|
122
154
|
async function resolveExtends(config) {
|
|
123
155
|
if (!config.extends) {
|
|
124
|
-
return config
|
|
156
|
+
return config;
|
|
125
157
|
}
|
|
126
|
-
let baseConfig
|
|
127
|
-
if (typeof config.extends ===
|
|
128
|
-
const imported = await import(config.extends)
|
|
129
|
-
baseConfig = imported.default ?? imported
|
|
158
|
+
let baseConfig;
|
|
159
|
+
if (typeof config.extends === "string") {
|
|
160
|
+
const imported = await import(config.extends);
|
|
161
|
+
baseConfig = imported.default ?? imported;
|
|
130
162
|
} else {
|
|
131
|
-
baseConfig = config.extends
|
|
163
|
+
baseConfig = config.extends;
|
|
132
164
|
}
|
|
133
|
-
baseConfig = await resolveExtends(baseConfig)
|
|
134
|
-
const { extends: _, ...currentWithoutExtends } = config
|
|
165
|
+
baseConfig = await resolveExtends(baseConfig);
|
|
166
|
+
const { extends: _, ...currentWithoutExtends } = config;
|
|
135
167
|
return {
|
|
136
168
|
...baseConfig,
|
|
137
169
|
...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
|
-
),
|
|
170
|
+
dependencies: mergeDependencies(baseConfig.dependencies, currentWithoutExtends.dependencies),
|
|
171
|
+
devDependencies: mergeDependencies(baseConfig.devDependencies, currentWithoutExtends.devDependencies),
|
|
172
|
+
peerDependencies: mergeDependencies(baseConfig.peerDependencies, currentWithoutExtends.peerDependencies),
|
|
150
173
|
scripts: { ...baseConfig.scripts, ...currentWithoutExtends.scripts },
|
|
151
174
|
scriptPresets: [
|
|
152
|
-
...
|
|
153
|
-
...
|
|
154
|
-
]
|
|
155
|
-
}
|
|
175
|
+
...baseConfig.scriptPresets ?? [],
|
|
176
|
+
...currentWithoutExtends.scriptPresets ?? []
|
|
177
|
+
]
|
|
178
|
+
};
|
|
156
179
|
}
|
|
157
180
|
|
|
158
181
|
// src/utils/conditions.ts
|
|
159
182
|
function getContext() {
|
|
160
183
|
return {
|
|
161
|
-
env:
|
|
184
|
+
env: "development",
|
|
162
185
|
platform: process.platform,
|
|
163
186
|
nodeVersion: process.version,
|
|
164
|
-
ci: process.env.CI ===
|
|
165
|
-
}
|
|
187
|
+
ci: process.env.CI === "true" || process.env.CI === "1"
|
|
188
|
+
};
|
|
166
189
|
}
|
|
167
190
|
function evaluateCondition(when, context) {
|
|
168
191
|
if (when.env !== undefined && context.env !== when.env) {
|
|
169
|
-
return false
|
|
192
|
+
return false;
|
|
170
193
|
}
|
|
171
194
|
if (when.platform !== undefined && context.platform !== when.platform) {
|
|
172
|
-
return false
|
|
195
|
+
return false;
|
|
173
196
|
}
|
|
174
197
|
if (when.ci !== undefined && context.ci !== when.ci) {
|
|
175
|
-
return false
|
|
198
|
+
return false;
|
|
176
199
|
}
|
|
177
200
|
if (when.nodeVersion !== undefined) {
|
|
178
201
|
if (!context.nodeVersion.startsWith(when.nodeVersion)) {
|
|
179
|
-
return false
|
|
202
|
+
return false;
|
|
180
203
|
}
|
|
181
204
|
}
|
|
182
|
-
return true
|
|
205
|
+
return true;
|
|
183
206
|
}
|
|
184
207
|
function applyConditions(baseConfig, conditions) {
|
|
185
208
|
if (!conditions || conditions.length === 0) {
|
|
186
|
-
return baseConfig
|
|
209
|
+
return baseConfig;
|
|
187
210
|
}
|
|
188
|
-
const context = getContext()
|
|
189
|
-
let result = { ...baseConfig }
|
|
211
|
+
const context = getContext();
|
|
212
|
+
let result = { ...baseConfig };
|
|
190
213
|
for (const condition of conditions) {
|
|
191
214
|
if (evaluateCondition(condition.when, context)) {
|
|
192
|
-
result = deepMerge(result, condition.set)
|
|
215
|
+
result = deepMerge(result, condition.set);
|
|
193
216
|
}
|
|
194
217
|
}
|
|
195
|
-
return result
|
|
218
|
+
return result;
|
|
196
219
|
}
|
|
197
220
|
|
|
198
221
|
// src/generator/createPackageJson.ts
|
|
199
222
|
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)
|
|
223
|
+
const { indent = 2 } = options;
|
|
224
|
+
let resolved = await resolveExtends(config);
|
|
225
|
+
const presetScripts = resolved.scriptPresets ? getPresetScripts(resolved.scriptPresets) : {};
|
|
226
|
+
const finalScripts = mergeScripts(presetScripts, resolved.scripts);
|
|
206
227
|
const [dependencies, devDependencies, peerDependencies] = await Promise.all([
|
|
207
228
|
resolveDependenciesCached(resolved.dependencies),
|
|
208
229
|
resolveDependenciesCached(resolved.devDependencies),
|
|
209
|
-
resolveDependenciesCached(resolved.peerDependencies)
|
|
210
|
-
])
|
|
230
|
+
resolveDependenciesCached(resolved.peerDependencies)
|
|
231
|
+
]);
|
|
211
232
|
const packageJson = {
|
|
212
233
|
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)
|
|
234
|
+
...resolved.version && { version: resolved.version },
|
|
235
|
+
...resolved.description && { description: resolved.description },
|
|
236
|
+
...resolved.keywords?.length && { keywords: resolved.keywords },
|
|
237
|
+
...resolved.homepage && { homepage: resolved.homepage },
|
|
238
|
+
...resolved.bugs && { bugs: resolved.bugs },
|
|
239
|
+
...resolved.license && { license: resolved.license },
|
|
240
|
+
...resolved.author && { author: resolved.author },
|
|
241
|
+
...resolved.contributors?.length && {
|
|
242
|
+
contributors: resolved.contributors
|
|
243
|
+
},
|
|
244
|
+
...resolved.repository && { repository: resolved.repository },
|
|
245
|
+
...resolved.type && { type: resolved.type },
|
|
246
|
+
...resolved.main && { main: resolved.main },
|
|
247
|
+
...resolved.module && { module: resolved.module },
|
|
248
|
+
...resolved.types && { types: resolved.types },
|
|
249
|
+
...resolved.exports && { exports: resolved.exports },
|
|
250
|
+
...resolved.bin && { bin: resolved.bin },
|
|
251
|
+
...resolved.files?.length && { files: resolved.files },
|
|
252
|
+
...Object.keys(finalScripts).length && { scripts: finalScripts },
|
|
253
|
+
...Object.keys(dependencies).length && { dependencies },
|
|
254
|
+
...Object.keys(devDependencies).length && { devDependencies },
|
|
255
|
+
...Object.keys(peerDependencies).length && { peerDependencies },
|
|
256
|
+
...resolved.optionalDependencies && {
|
|
257
|
+
optionalDependencies: resolved.optionalDependencies
|
|
258
|
+
},
|
|
259
|
+
...resolved.engines && { engines: resolved.engines },
|
|
260
|
+
...resolved.os?.length && { os: resolved.os },
|
|
261
|
+
...resolved.cpu?.length && { cpu: resolved.cpu },
|
|
262
|
+
...resolved.private !== undefined && { private: resolved.private },
|
|
263
|
+
...resolved.publishConfig && { publishConfig: resolved.publishConfig },
|
|
264
|
+
...resolved.workspaces?.length && { workspaces: resolved.workspaces }
|
|
265
|
+
};
|
|
266
|
+
const finalPackageJson = applyConditions(packageJson, resolved.conditions);
|
|
267
|
+
return JSON.stringify(finalPackageJson, null, indent);
|
|
247
268
|
}
|
|
248
269
|
async function writePackageJson(config, options = {}) {
|
|
249
|
-
const { outputPath =
|
|
250
|
-
const json = await createPackageJson(config, options)
|
|
251
|
-
await
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
`
|
|
256
|
-
)
|
|
257
|
-
console.log(`✨ Generated ${outputPath}`)
|
|
270
|
+
const { outputPath = "package.json" } = options;
|
|
271
|
+
const json = await createPackageJson(config, options);
|
|
272
|
+
const { writeFile } = await import("node:fs/promises");
|
|
273
|
+
await writeFile(outputPath, json + `
|
|
274
|
+
`);
|
|
275
|
+
console.log(`✨ Generated ${outputPath}`);
|
|
258
276
|
}
|
|
259
277
|
|
|
260
278
|
// src/main.ts
|
|
261
279
|
function definePackageConfig(config) {
|
|
262
|
-
return config
|
|
263
|
-
}
|
|
264
|
-
async function main() {
|
|
265
|
-
const configPath = process.argv[2] ?? 'package.config.ts'
|
|
266
|
-
const outputPath = process.argv[3] ?? 'package.json'
|
|
267
|
-
try {
|
|
268
|
-
const configModule = await import(Bun.pathToFileURL(configPath).href)
|
|
269
|
-
const config = configModule.default ?? configModule
|
|
270
|
-
await writePackageJson(config, { outputPath })
|
|
271
|
-
} catch (error) {
|
|
272
|
-
if (error.code === 'ERR_MODULE_NOT_FOUND') {
|
|
273
|
-
console.error(`❌ Config file not found: ${configPath}`)
|
|
274
|
-
console.error(`
|
|
275
|
-
Create a package.config.ts file with:`)
|
|
276
|
-
console.error(`
|
|
277
|
-
import { definePackageConfig } from './src/main'
|
|
278
|
-
|
|
279
|
-
export default definePackageConfig({
|
|
280
|
-
name: 'my-package',
|
|
281
|
-
version: '1.0.0',
|
|
282
|
-
scriptPresets: ['typescript', 'testing'],
|
|
283
|
-
dependencies: ['lodash', 'zod'],
|
|
284
|
-
devDependencies: ['typescript', 'vitest'],
|
|
285
|
-
})
|
|
286
|
-
`)
|
|
287
|
-
process.exit(1)
|
|
288
|
-
}
|
|
289
|
-
throw error
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
if (__require.main == __require.module) {
|
|
293
|
-
main()
|
|
280
|
+
return config;
|
|
294
281
|
}
|
|
295
|
-
export {
|
|
282
|
+
export {
|
|
283
|
+
writePackageJson,
|
|
284
|
+
definePackageConfig,
|
|
285
|
+
createPackageJson
|
|
286
|
+
};
|
|
296
287
|
|
|
297
|
-
//# debugId=
|
|
288
|
+
//# debugId=D40340B51AB1306D64756E2164756E21
|
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
|
-
"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
|
|
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
|
|
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": "
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "D40340B51AB1306D64756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/package.config.ts
CHANGED
package/package.json
CHANGED
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()
|