@sanity/pkg-utils 2.2.16 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -7
- package/dist/_chunks/{build-ba8f4eab.cjs → build-0aed2000.cjs} +11 -8
- package/dist/_chunks/build-0aed2000.cjs.map +1 -0
- package/dist/_chunks/{buildAction-f35f5fe0.cjs → buildAction-196fba7b.cjs} +2 -2
- package/dist/_chunks/{buildAction-f35f5fe0.cjs.map → buildAction-196fba7b.cjs.map} +1 -1
- package/dist/_chunks/{check-c18ac13f.cjs → check-2deafe2a.cjs} +25 -31
- package/dist/_chunks/check-2deafe2a.cjs.map +1 -0
- package/dist/_chunks/{checkAction-be47c642.cjs → checkAction-7ac5a05e.cjs} +2 -2
- package/dist/_chunks/{checkAction-be47c642.cjs.map → checkAction-7ac5a05e.cjs.map} +1 -1
- package/dist/_chunks/{index-b295a336.cjs → index-984e18d1.cjs} +6 -3
- package/dist/_chunks/index-984e18d1.cjs.map +1 -0
- package/dist/_chunks/init-ab36343b.cjs +469 -0
- package/dist/_chunks/init-ab36343b.cjs.map +1 -0
- package/dist/_chunks/initAction-d18cf4f2.cjs +16 -0
- package/dist/_chunks/initAction-d18cf4f2.cjs.map +1 -0
- package/dist/_chunks/logger-c593f06b.cjs +97 -0
- package/dist/_chunks/logger-c593f06b.cjs.map +1 -0
- package/dist/_chunks/{resolveBuildContext-2239fc5e.cjs → resolveBuildContext-5ef90110.cjs} +13 -92
- package/dist/_chunks/resolveBuildContext-5ef90110.cjs.map +1 -0
- package/dist/_chunks/{watch-5bfb8b28.cjs → watch-63a93eb0.cjs} +10 -7
- package/dist/_chunks/watch-63a93eb0.cjs.map +1 -0
- package/dist/_chunks/{watchAction-788563ea.cjs → watchAction-95c0b481.cjs} +2 -2
- package/dist/_chunks/{watchAction-788563ea.cjs.map → watchAction-95c0b481.cjs.map} +1 -1
- package/dist/cli.cjs +17 -7
- package/dist/cli.cjs.map +1 -1
- package/dist/index.cjs +12 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +87 -0
- package/dist/index.js +465 -32
- package/dist/index.js.map +1 -1
- package/package.json +93 -79
- package/src/cli/index.ts +12 -3
- package/src/cli/initAction.ts +13 -0
- package/src/node/build.ts +1 -1
- package/src/node/check.ts +4 -2
- package/src/node/core/config/findConfigFile.ts +6 -14
- package/src/node/core/config/index.ts +1 -1
- package/src/node/core/config/loadConfig.ts +2 -1
- package/src/node/core/contexts/buildContext.ts +2 -1
- package/src/node/core/findCommonPath.test.ts +1 -0
- package/src/node/core/index.ts +3 -2
- package/src/node/core/pkg/loadPkg.ts +1 -0
- package/src/node/core/pkg/loadPkgWithReporting.ts +1 -0
- package/src/node/core/pkg/types.ts +13 -0
- package/src/node/core/pkg/validatePkg.ts +1 -0
- package/src/node/core/template/createFromTemplate.ts +85 -0
- package/src/node/core/template/define.ts +6 -0
- package/src/node/core/template/index.ts +3 -0
- package/src/node/core/template/types.ts +45 -0
- package/src/node/fileExists.ts +12 -0
- package/src/node/globFiles.ts +1 -1
- package/src/node/index.ts +1 -0
- package/src/node/init.ts +55 -0
- package/src/node/isEmptyDirectory.ts +5 -0
- package/src/node/printExtractMessages.ts +2 -1
- package/src/node/printPackageTree.ts +4 -13
- package/src/node/resolveBuildContext.ts +5 -4
- package/src/node/resolveBuildTasks.ts +2 -1
- package/src/node/resolveWatchTasks.ts +3 -2
- package/src/node/tasks/dts/buildTypes.ts +1 -0
- package/src/node/tasks/dts/createApiExtractorConfig.ts +1 -1
- package/src/node/tasks/dts/createTSDocConfig.ts +1 -1
- package/src/node/tasks/dts/doExtract.ts +2 -1
- package/src/node/tasks/dts/dtsTask.ts +1 -0
- package/src/node/tasks/dts/dtsWatchTask.ts +1 -0
- package/src/node/tasks/dts/extractTypes.ts +4 -3
- package/src/node/tasks/dts/getExtractMessagesConfig.ts +2 -1
- package/src/node/tasks/dts/printDiagnostic.ts +2 -1
- package/src/node/tasks/index.ts +1 -1
- package/src/node/tasks/node/reexportCjsTask.ts +3 -2
- package/src/node/tasks/rollup/resolveRollupConfig.ts +2 -1
- package/src/node/tasks/rollup/rollupTask.ts +2 -1
- package/src/node/tasks/rollup/rollupWatchTask.ts +2 -1
- package/src/node/tasks/types.ts +2 -1
- package/src/node/templates/default/index.ts +1 -0
- package/src/node/templates/default/template.ts +553 -0
- package/src/node/templates/index.ts +1 -0
- package/src/node/watch.ts +2 -1
- package/src/node/watchConfigFiles.ts +1 -0
- package/dist/_chunks/build-ba8f4eab.cjs.map +0 -1
- package/dist/_chunks/check-c18ac13f.cjs.map +0 -1
- package/dist/_chunks/index-b295a336.cjs.map +0 -1
- package/dist/_chunks/resolveBuildContext-2239fc5e.cjs.map +0 -1
- package/dist/_chunks/watch-5bfb8b28.cjs.map +0 -1
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
import getLatestVersion from 'get-latest-version'
|
|
2
|
+
import gitUrlParse from 'git-url-parse'
|
|
3
|
+
import {outdent} from 'outdent'
|
|
4
|
+
import parseGitConfig from 'parse-git-config'
|
|
5
|
+
import {resolve} from 'path'
|
|
6
|
+
import prettier, {Config as PrettierConfig} from 'prettier'
|
|
7
|
+
|
|
8
|
+
import {defineTemplateOption, isRecord, PackageJSON, PkgTemplate, PkgTemplateFile} from '../../core'
|
|
9
|
+
|
|
10
|
+
const RE_NAME = /^(?:@(?:[a-z0-9-*~][a-z0-9-*._~]*)\/)?[a-z0-9-~][a-z0-9-._~]*$/i
|
|
11
|
+
|
|
12
|
+
export const defaultTemplate: PkgTemplate = async ({cwd, logger, packagePath}) => {
|
|
13
|
+
const gitConfig = await parseGitConfig({cwd, type: 'global'})
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
options: [
|
|
17
|
+
defineTemplateOption<{owner: string; name: string}>({
|
|
18
|
+
name: 'repo',
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'git url',
|
|
21
|
+
validate: (v) => {
|
|
22
|
+
if (!v) return true
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
gitUrlParse(v)
|
|
26
|
+
|
|
27
|
+
return true
|
|
28
|
+
} catch (err) {
|
|
29
|
+
return 'invalid git url'
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
parse: (v) => {
|
|
33
|
+
if (!v) return null
|
|
34
|
+
|
|
35
|
+
const result = gitUrlParse(v)
|
|
36
|
+
|
|
37
|
+
return {source: result.source, owner: result.owner, name: result.name}
|
|
38
|
+
},
|
|
39
|
+
}),
|
|
40
|
+
defineTemplateOption({
|
|
41
|
+
name: 'pkgName',
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'package name',
|
|
44
|
+
initial: (options) => options.repo?.name || undefined,
|
|
45
|
+
validate: (v) => {
|
|
46
|
+
if (!v) return 'package name is required'
|
|
47
|
+
|
|
48
|
+
const match = RE_NAME.exec(v)
|
|
49
|
+
|
|
50
|
+
if (!match) {
|
|
51
|
+
return 'invalid package name'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return true
|
|
55
|
+
},
|
|
56
|
+
parse: (v) => {
|
|
57
|
+
if (!v) {
|
|
58
|
+
throw new Error('package name is required')
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const match = RE_NAME.exec(v)
|
|
62
|
+
|
|
63
|
+
if (!match) {
|
|
64
|
+
throw new Error('invalid package name')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const [scope, name] = v.split('/')
|
|
68
|
+
|
|
69
|
+
return {scope, name, fullName: v}
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
defineTemplateOption({
|
|
73
|
+
name: 'description',
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'package description',
|
|
76
|
+
}),
|
|
77
|
+
defineTemplateOption({
|
|
78
|
+
name: 'authorName',
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'package author name',
|
|
81
|
+
initial: gitConfig?.user?.name,
|
|
82
|
+
}),
|
|
83
|
+
defineTemplateOption({
|
|
84
|
+
name: 'authorEmail',
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'package author email',
|
|
87
|
+
initial: gitConfig?.user?.email,
|
|
88
|
+
}),
|
|
89
|
+
defineTemplateOption({
|
|
90
|
+
name: 'license',
|
|
91
|
+
type: 'string',
|
|
92
|
+
description: 'package license',
|
|
93
|
+
initial: 'MIT',
|
|
94
|
+
validate: (v) => {
|
|
95
|
+
if (!v) return 'license is required'
|
|
96
|
+
|
|
97
|
+
return true
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
],
|
|
101
|
+
|
|
102
|
+
features: [
|
|
103
|
+
{
|
|
104
|
+
name: 'eslint',
|
|
105
|
+
optional: true,
|
|
106
|
+
initial: true,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'typescript',
|
|
110
|
+
optional: true,
|
|
111
|
+
initial: true,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
|
|
115
|
+
async getFiles(options, features) {
|
|
116
|
+
const {pkgName, repo} = options
|
|
117
|
+
const {fullName: name} = pkgName
|
|
118
|
+
|
|
119
|
+
const author =
|
|
120
|
+
[options.authorName, options.authorEmail && `<${options.authorEmail}>`]
|
|
121
|
+
.filter(Boolean)
|
|
122
|
+
.join(' ') ?? undefined
|
|
123
|
+
|
|
124
|
+
const prettierConfig: PrettierConfig = {
|
|
125
|
+
bracketSpacing: false,
|
|
126
|
+
printWidth: 100,
|
|
127
|
+
semi: false,
|
|
128
|
+
singleQuote: true,
|
|
129
|
+
tabWidth: 2,
|
|
130
|
+
plugins: ['prettier-plugin-packagejson'],
|
|
131
|
+
overrides: [
|
|
132
|
+
{
|
|
133
|
+
files: ['*.yml'],
|
|
134
|
+
options: {
|
|
135
|
+
singleQuote: false,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const pkgJson: PackageJSON & {
|
|
142
|
+
prettier?: PrettierConfig
|
|
143
|
+
['lint-staged']?: Record<string, string[]>
|
|
144
|
+
} = {
|
|
145
|
+
name,
|
|
146
|
+
version: '0.0.0',
|
|
147
|
+
description: options.description ?? undefined,
|
|
148
|
+
keywords: [],
|
|
149
|
+
license: options.license,
|
|
150
|
+
author,
|
|
151
|
+
type: 'module',
|
|
152
|
+
exports: {
|
|
153
|
+
'.': {
|
|
154
|
+
types: undefined,
|
|
155
|
+
source: features.typescript ? './src/index.ts' : './src/index.js',
|
|
156
|
+
require: './dist/index.cjs',
|
|
157
|
+
import: './dist/index.js',
|
|
158
|
+
default: './dist/index.js',
|
|
159
|
+
},
|
|
160
|
+
'./package.json': './package.json',
|
|
161
|
+
},
|
|
162
|
+
main: './dist/index.cjs',
|
|
163
|
+
module: './dist/index.js',
|
|
164
|
+
source: features.typescript ? './src/index.ts' : './src/index.js',
|
|
165
|
+
files: ['dist', 'src'],
|
|
166
|
+
scripts: {
|
|
167
|
+
build: 'run-s clean pkg:build pkg:check',
|
|
168
|
+
clean: 'rimraf dist',
|
|
169
|
+
format: 'prettier --write --cache --ignore-unknown .',
|
|
170
|
+
'pkg:build': 'pkg build --strict',
|
|
171
|
+
'pkg:check': 'pkg check --strict',
|
|
172
|
+
},
|
|
173
|
+
prettier: prettierConfig,
|
|
174
|
+
'lint-staged': {
|
|
175
|
+
'*': ['prettier --write --cache --ignore-unknown'],
|
|
176
|
+
},
|
|
177
|
+
dependencies: {},
|
|
178
|
+
devDependencies: {
|
|
179
|
+
'@sanity/pkg-utils': '*',
|
|
180
|
+
'lint-staged': '*',
|
|
181
|
+
'npm-run-all': '*',
|
|
182
|
+
prettier: '*',
|
|
183
|
+
'prettier-plugin-packagejson': '*',
|
|
184
|
+
rimraf: '*',
|
|
185
|
+
},
|
|
186
|
+
engines: {
|
|
187
|
+
node: '>=18.0.0',
|
|
188
|
+
},
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const files: PkgTemplateFile[] = []
|
|
192
|
+
|
|
193
|
+
// .editorconfig
|
|
194
|
+
files.push({
|
|
195
|
+
name: '.editorconfig',
|
|
196
|
+
contents: outdent`
|
|
197
|
+
root = true
|
|
198
|
+
|
|
199
|
+
[*]
|
|
200
|
+
charset = utf-8
|
|
201
|
+
indent_style = space
|
|
202
|
+
indent_size = 2
|
|
203
|
+
end_of_line = lf
|
|
204
|
+
insert_final_newline = true
|
|
205
|
+
trim_trailing_whitespace = true
|
|
206
|
+
`,
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
// .gitignore
|
|
210
|
+
files.push({
|
|
211
|
+
name: '.gitignore',
|
|
212
|
+
contents: outdent`
|
|
213
|
+
*.local
|
|
214
|
+
*.log
|
|
215
|
+
|
|
216
|
+
.DS_Store
|
|
217
|
+
etc
|
|
218
|
+
dist
|
|
219
|
+
node_modules
|
|
220
|
+
`,
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
files.push({
|
|
224
|
+
name: '.prettierignore',
|
|
225
|
+
contents: outdent`
|
|
226
|
+
/dist
|
|
227
|
+
/pnpm-lock.yaml
|
|
228
|
+
`,
|
|
229
|
+
})
|
|
230
|
+
|
|
231
|
+
if (repo) {
|
|
232
|
+
pkgJson.repository = {
|
|
233
|
+
type: 'git',
|
|
234
|
+
url: `git+ssh://git@${repo.source}/${repo.owner}/${repo.name}.git`,
|
|
235
|
+
}
|
|
236
|
+
pkgJson.bugs = {
|
|
237
|
+
url: `https://${repo.source}/${repo.owner}/${repo.name}/issues`,
|
|
238
|
+
}
|
|
239
|
+
pkgJson.homepage = `https://${repo.source}/${repo.owner}/${repo.name}#readme`
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (features.typescript) {
|
|
243
|
+
pkgJson.types = './dist/index.d.ts'
|
|
244
|
+
|
|
245
|
+
const mainExport = pkgJson.exports?.['.']
|
|
246
|
+
|
|
247
|
+
if (isRecord(mainExport)) {
|
|
248
|
+
mainExport.types = './dist/index.d.ts'
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
pkgJson.scripts = {
|
|
252
|
+
...pkgJson.scripts,
|
|
253
|
+
['type:check']: 'tsc --build',
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const devDependencies = pkgJson.devDependencies
|
|
257
|
+
|
|
258
|
+
if (isRecord(devDependencies)) {
|
|
259
|
+
devDependencies['typescript'] = '*'
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (features.eslint) {
|
|
264
|
+
const eslintConfig: any = {
|
|
265
|
+
root: true,
|
|
266
|
+
env: {
|
|
267
|
+
browser: true,
|
|
268
|
+
es6: true,
|
|
269
|
+
node: true,
|
|
270
|
+
},
|
|
271
|
+
extends: ['eslint:recommended', 'plugin:prettier/recommended'],
|
|
272
|
+
parserOptions: {
|
|
273
|
+
ecmaVersion: 2020,
|
|
274
|
+
sourceType: 'module',
|
|
275
|
+
},
|
|
276
|
+
plugins: ['import', 'prettier'],
|
|
277
|
+
rules: {
|
|
278
|
+
'no-console': 'error',
|
|
279
|
+
'no-shadow': 'error',
|
|
280
|
+
'no-warning-comments': ['warn', {location: 'start', terms: ['todo', 'fixme']}],
|
|
281
|
+
},
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
files.push({
|
|
285
|
+
name: '.eslintignore',
|
|
286
|
+
contents: outdent`
|
|
287
|
+
/dist
|
|
288
|
+
`,
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
pkgJson.scripts = {
|
|
292
|
+
...pkgJson.scripts,
|
|
293
|
+
lint: features.typescript
|
|
294
|
+
? 'eslint . --ext .cjs,.js,.ts,.tsx'
|
|
295
|
+
: 'eslint . --ext .cjs,.js',
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
pkgJson.devDependencies = {
|
|
299
|
+
...pkgJson.devDependencies,
|
|
300
|
+
eslint: '*',
|
|
301
|
+
'eslint-config-prettier': '*',
|
|
302
|
+
'eslint-plugin-import': '*',
|
|
303
|
+
'eslint-plugin-prettier': '*',
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (features.typescript) {
|
|
307
|
+
pkgJson.devDependencies = {
|
|
308
|
+
...pkgJson.devDependencies,
|
|
309
|
+
'@typescript-eslint/eslint-plugin': '*',
|
|
310
|
+
'@typescript-eslint/parser': '*',
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const eslintConfigOverride: any = {
|
|
314
|
+
files: ['**/*.ts', '**/*.tsx'],
|
|
315
|
+
parser: '@typescript-eslint/parser',
|
|
316
|
+
parserOptions: {
|
|
317
|
+
project: ['./tsconfig.json'],
|
|
318
|
+
},
|
|
319
|
+
extends: [
|
|
320
|
+
'eslint:recommended',
|
|
321
|
+
'plugin:prettier/recommended',
|
|
322
|
+
'plugin:@typescript-eslint/eslint-recommended',
|
|
323
|
+
'plugin:@typescript-eslint/recommended',
|
|
324
|
+
].filter(Boolean),
|
|
325
|
+
plugins: ['import', '@typescript-eslint', 'prettier'].filter(Boolean),
|
|
326
|
+
rules: {
|
|
327
|
+
'@typescript-eslint/explicit-module-boundary-types': 'error',
|
|
328
|
+
'@typescript-eslint/interface-name-prefix': 'off',
|
|
329
|
+
'@typescript-eslint/member-delimiter-style': 'off',
|
|
330
|
+
'@typescript-eslint/no-empty-interface': 'off',
|
|
331
|
+
},
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
eslintConfig.overrides = [eslintConfigOverride]
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
files.push({
|
|
338
|
+
name: '.eslintrc.cjs',
|
|
339
|
+
contents: format(
|
|
340
|
+
resolve(packagePath, '.eslintrc.cjs'),
|
|
341
|
+
outdent`
|
|
342
|
+
'use strict'
|
|
343
|
+
|
|
344
|
+
/** @type import('eslint').Linter.Config */
|
|
345
|
+
module.exports = ${JSON.stringify(eslintConfig, null, 2)}
|
|
346
|
+
`,
|
|
347
|
+
prettierConfig
|
|
348
|
+
),
|
|
349
|
+
})
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (features.typescript) {
|
|
353
|
+
files.push({
|
|
354
|
+
name: 'tsconfig.settings.json',
|
|
355
|
+
contents: format(
|
|
356
|
+
resolve(packagePath, 'tsconfig.settings.json'),
|
|
357
|
+
outdent`
|
|
358
|
+
{
|
|
359
|
+
"compilerOptions": {
|
|
360
|
+
"module": "ES2020",
|
|
361
|
+
"target": "ES2020",
|
|
362
|
+
"declaration": true,
|
|
363
|
+
"declarationMap": true,
|
|
364
|
+
"sourceMap": true,
|
|
365
|
+
|
|
366
|
+
// Strict type-checking
|
|
367
|
+
"strict": true,
|
|
368
|
+
"noImplicitAny": true,
|
|
369
|
+
"strictNullChecks": true,
|
|
370
|
+
"strictFunctionTypes": true,
|
|
371
|
+
"strictPropertyInitialization": true,
|
|
372
|
+
"noImplicitThis": true,
|
|
373
|
+
"alwaysStrict": true,
|
|
374
|
+
|
|
375
|
+
// Additional checks
|
|
376
|
+
"noUnusedLocals": true,
|
|
377
|
+
"noUnusedParameters": true,
|
|
378
|
+
"noImplicitReturns": true,
|
|
379
|
+
"noFallthroughCasesInSwitch": true,
|
|
380
|
+
"skipLibCheck": true,
|
|
381
|
+
|
|
382
|
+
// Module resolution
|
|
383
|
+
"moduleResolution": "node",
|
|
384
|
+
"allowSyntheticDefaultImports": true,
|
|
385
|
+
"esModuleInterop": true
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
`,
|
|
389
|
+
prettierConfig
|
|
390
|
+
),
|
|
391
|
+
})
|
|
392
|
+
|
|
393
|
+
files.push({
|
|
394
|
+
name: 'tsconfig.dist.json',
|
|
395
|
+
contents: format(
|
|
396
|
+
resolve(packagePath, 'tsconfig.dist.json'),
|
|
397
|
+
outdent`
|
|
398
|
+
{
|
|
399
|
+
"extends": "./tsconfig.settings",
|
|
400
|
+
"include": ["./src"],
|
|
401
|
+
"compilerOptions": {
|
|
402
|
+
"rootDir": ".",
|
|
403
|
+
"outDir": "./dist",
|
|
404
|
+
"emitDeclarationOnly": true,
|
|
405
|
+
"resolveJsonModule": true
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
`,
|
|
409
|
+
prettierConfig
|
|
410
|
+
),
|
|
411
|
+
})
|
|
412
|
+
|
|
413
|
+
files.push({
|
|
414
|
+
name: 'tsconfig.json',
|
|
415
|
+
contents: format(
|
|
416
|
+
resolve(packagePath, 'tsconfig.json'),
|
|
417
|
+
outdent`
|
|
418
|
+
{
|
|
419
|
+
"extends": "./tsconfig.settings",
|
|
420
|
+
"include": ["./*.cjs", "./*.ts", "./package.config.ts", "./src"],
|
|
421
|
+
"compilerOptions": {
|
|
422
|
+
"rootDir": ".",
|
|
423
|
+
"outDir": "./dist",
|
|
424
|
+
"noEmit": true,
|
|
425
|
+
"allowJs": true,
|
|
426
|
+
"resolveJsonModule": true,
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
`,
|
|
430
|
+
prettierConfig
|
|
431
|
+
),
|
|
432
|
+
})
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// source file
|
|
436
|
+
if (features.typescript) {
|
|
437
|
+
files.push({
|
|
438
|
+
name: 'package.config.ts',
|
|
439
|
+
contents: format(
|
|
440
|
+
resolve(packagePath, 'package.config.ts'),
|
|
441
|
+
outdent`
|
|
442
|
+
import {defineConfig} from '@sanity/pkg-utils'
|
|
443
|
+
|
|
444
|
+
export default defineConfig({
|
|
445
|
+
extract: {
|
|
446
|
+
rules: {
|
|
447
|
+
// do not require internal members to be prefixed with \`_\`
|
|
448
|
+
'ae-internal-missing-underscore': 'off',
|
|
449
|
+
},
|
|
450
|
+
},
|
|
451
|
+
|
|
452
|
+
// the path to the tsconfig file for distributed builds
|
|
453
|
+
tsconfig: 'tsconfig.dist.json',
|
|
454
|
+
})
|
|
455
|
+
`,
|
|
456
|
+
prettierConfig
|
|
457
|
+
),
|
|
458
|
+
})
|
|
459
|
+
|
|
460
|
+
files.push({
|
|
461
|
+
name: 'src/index.ts',
|
|
462
|
+
contents: format(
|
|
463
|
+
resolve(packagePath, 'src/index.ts'),
|
|
464
|
+
outdent`
|
|
465
|
+
/** @public */
|
|
466
|
+
export function main(): void {
|
|
467
|
+
//
|
|
468
|
+
}
|
|
469
|
+
`,
|
|
470
|
+
prettierConfig
|
|
471
|
+
),
|
|
472
|
+
})
|
|
473
|
+
} else {
|
|
474
|
+
files.push({
|
|
475
|
+
name: 'package.config.js',
|
|
476
|
+
contents: format(
|
|
477
|
+
resolve(packagePath, 'package.config.js'),
|
|
478
|
+
outdent`
|
|
479
|
+
import {defineConfig} from '@sanity/pkg-utils'
|
|
480
|
+
|
|
481
|
+
export default defineConfig({
|
|
482
|
+
extract: {
|
|
483
|
+
rules: {
|
|
484
|
+
// do not require internal members to be prefixed with \`_\`
|
|
485
|
+
'ae-internal-missing-underscore': 'off',
|
|
486
|
+
},
|
|
487
|
+
},
|
|
488
|
+
})
|
|
489
|
+
`,
|
|
490
|
+
prettierConfig
|
|
491
|
+
),
|
|
492
|
+
})
|
|
493
|
+
|
|
494
|
+
files.push({
|
|
495
|
+
name: 'src/index.js',
|
|
496
|
+
contents: format(
|
|
497
|
+
resolve(packagePath, 'src/index.js'),
|
|
498
|
+
outdent`
|
|
499
|
+
/** @public */
|
|
500
|
+
export function main() {
|
|
501
|
+
//
|
|
502
|
+
}
|
|
503
|
+
`,
|
|
504
|
+
prettierConfig
|
|
505
|
+
),
|
|
506
|
+
})
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
// Resolve latest dependencies
|
|
510
|
+
try {
|
|
511
|
+
pkgJson.dependencies = await resolveLatestDeps(pkgJson.dependencies ?? {})
|
|
512
|
+
} catch (error) {
|
|
513
|
+
logger.warn(error instanceof Error ? error.message : error)
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// Resolve latest devDependencies
|
|
517
|
+
try {
|
|
518
|
+
pkgJson.devDependencies = await resolveLatestDeps(pkgJson.devDependencies ?? {})
|
|
519
|
+
} catch (error) {
|
|
520
|
+
logger.warn(error instanceof Error ? error.message : error)
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
files.push({
|
|
524
|
+
name: 'package.json',
|
|
525
|
+
contents: format(
|
|
526
|
+
resolve(packagePath, 'package.json'),
|
|
527
|
+
JSON.stringify(pkgJson, null, 2),
|
|
528
|
+
prettierConfig
|
|
529
|
+
),
|
|
530
|
+
})
|
|
531
|
+
|
|
532
|
+
return files
|
|
533
|
+
},
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
function format(filepath: string, input: string, prettierOptions: PrettierConfig) {
|
|
538
|
+
return prettier.format(input, {...prettierOptions, filepath})
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
async function resolveLatestDeps(deps: Record<string, string>) {
|
|
542
|
+
const depsEntries = Object.entries(deps)
|
|
543
|
+
const latestDeps: Record<string, string> = {}
|
|
544
|
+
|
|
545
|
+
for (const entry of depsEntries) {
|
|
546
|
+
const [name, version] = entry
|
|
547
|
+
const latestVersion = await getLatestVersion(name, version)
|
|
548
|
+
|
|
549
|
+
latestDeps[name] = latestVersion ? `^${latestVersion}` : version
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
return latestDeps
|
|
553
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './default'
|
package/src/node/watch.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
2
|
import {switchMap} from 'rxjs'
|
|
3
|
+
|
|
3
4
|
import {getPkgExtMap, loadConfig, loadPkgWithReporting} from './core'
|
|
4
5
|
import {createLogger} from './logger'
|
|
5
6
|
import {resolveBuildContext} from './resolveBuildContext'
|
|
6
7
|
import {resolveWatchTasks} from './resolveWatchTasks'
|
|
7
|
-
import {
|
|
8
|
+
import {TaskHandler, WatchTask, watchTaskHandlers} from './tasks'
|
|
8
9
|
import {watchConfigFiles} from './watchConfigFiles'
|
|
9
10
|
|
|
10
11
|
/** @public */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-ba8f4eab.cjs","sources":["../../src/node/resolveBuildTasks.ts","../../src/node/spinner.ts","../../src/node/build.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport {PkgExport, PkgFormat, PkgRuntime, BuildContext} from './core'\nimport {BuildTask, DtsTask, NodeReExportFromCJSTask, RollupTask, RollupTaskEntry} from './tasks'\n\n/** @internal */\nexport function resolveBuildTasks(ctx: BuildContext): BuildTask[] {\n const {config, cwd, pkg, target} = ctx\n\n const bundles = config?.bundles || []\n\n const tasks: BuildTask[] = []\n\n const exports = Object.entries(ctx.exports || {}).map(\n ([_path, exp]) => ({_path, ...exp} as PkgExport & {_path: string})\n )\n\n const dtsTask: DtsTask = {\n type: 'build:dts',\n entries: [],\n }\n\n const rollupTasks: Record<string, RollupTask> = {}\n\n function addRollupTaskEntry(format: PkgFormat, runtime: PkgRuntime, entry: RollupTaskEntry) {\n const buildId = `${format}:${runtime}`\n\n if (rollupTasks[buildId]) {\n rollupTasks[buildId].entries.push(entry)\n } else {\n rollupTasks[buildId] = {\n type: 'build:js',\n buildId,\n entries: [entry],\n runtime,\n format,\n target: target[runtime],\n }\n }\n }\n\n // Parse `dts` tasks\n for (const exp of exports) {\n const importId = path.join(pkg.name, exp._path)\n\n if (exp.types) {\n dtsTask.entries.push({\n importId,\n exportPath: exp._path,\n sourcePath: exp.source,\n targetPath: exp.types,\n })\n }\n }\n\n // Add dts task\n if (dtsTask.entries.length) {\n tasks.push(dtsTask)\n }\n\n if (!ctx.emitDeclarationOnly) {\n // Parse rollup:commonjs:* tasks\n for (const exp of exports) {\n const output = exp.require\n\n if (!output) continue\n\n addRollupTaskEntry('commonjs', ctx.runtime, {\n path: exp._path,\n source: exp.source,\n output,\n })\n }\n\n // Parse rollup:esm:* tasks\n for (const exp of exports) {\n const output = exp.import\n\n if (!output) continue\n\n addRollupTaskEntry('esm', ctx.runtime, {\n path: exp._path,\n source: exp.source,\n output,\n })\n }\n\n // Parse rollup:commonjs:browser tasks\n for (const exp of exports) {\n const output = exp.browser?.require\n\n if (!output) continue\n\n addRollupTaskEntry('commonjs', 'browser', {\n path: exp._path,\n source: exp.browser?.source || exp.source,\n output,\n })\n }\n\n // Parse rollup:esm:browser tasks\n for (const exp of exports) {\n const output = exp.browser?.import\n\n if (!output) continue\n\n addRollupTaskEntry('esm', 'browser', {\n path: exp._path,\n source: exp.browser?.source || exp.source,\n output,\n })\n }\n\n for (const bundle of bundles) {\n if (bundle.require) {\n addRollupTaskEntry('commonjs', bundle.runtime || ctx.runtime, {\n path: '__bundle__',\n source: bundle.source,\n output: bundle.require,\n })\n }\n\n if (bundle.import) {\n addRollupTaskEntry('commonjs', bundle.runtime || ctx.runtime, {\n path: '__bundle__',\n source: bundle.source,\n output: bundle.import,\n })\n }\n }\n\n tasks.push(...Object.values(rollupTasks))\n\n // Write legacy exports files\n if (config?.legacyExports) {\n for (const exp of exports) {\n if (exp._exported && exp._path !== '.') {\n const relativeTargetPath = (exp.browser?.import || exp.import || '').replace(\n /\\.[^/.]+$/,\n ''\n )\n\n if (relativeTargetPath) {\n fs.writeFileSync(\n path.resolve(cwd, `${exp._path}.js`),\n [`// AUTO-GENERATED – DO NOT EDIT`, `export * from '${relativeTargetPath}'`, ``].join(\n '\\n'\n )\n )\n }\n }\n }\n }\n }\n\n const nodeReexportCjsEntries: NodeReExportFromCJSTask['entries'] = []\n\n // Parse tasks to re-export from CommonJS for Node.js\n for (const exp of exports) {\n if (\n exp.node &&\n !exp.node.source &&\n exp.node.import &&\n exp.node.require &&\n (exp.node.import.endsWith('.cjs.js') || exp.node.import.endsWith('.cjs.mjs'))\n ) {\n const importId = path.join(pkg.name, exp._path)\n\n nodeReexportCjsEntries.push({\n importId,\n import: exp.node.import,\n require: exp.node.require,\n })\n }\n }\n\n if (nodeReexportCjsEntries.length) {\n tasks.push({\n type: 'node:reexport-cjs',\n entries: nodeReexportCjsEntries,\n })\n }\n\n return tasks\n}\n","/* eslint-disable no-console */\n\nimport chalk from 'chalk'\n\nexport function createSpinner(msg: string): {complete: () => void; error: () => void} {\n const startTime = Date.now()\n\n console.log(msg)\n\n return {\n complete: () => {\n console.log(`${chalk.green('[success]')} ${chalk.gray(`${Date.now() - startTime}ms`)}`)\n },\n error: () => {\n console.log(`${chalk.red(`[error]`)} ${chalk.gray(`${Date.now() - startTime}ms`)}`)\n },\n }\n}\n","import {getPkgExtMap, loadConfig, loadPkgWithReporting} from './core'\nimport {createLogger} from './logger'\nimport {resolveBuildContext} from './resolveBuildContext'\nimport {resolveBuildTasks} from './resolveBuildTasks'\nimport {createSpinner} from './spinner'\nimport {BuildTask, TaskHandler, buildTaskHandlers} from './tasks'\n\n/**\n * Build the distribution files of a npm package.\n *\n * @example\n * ```ts\n * import {build} from '@sanity/pkg-utils'\n *\n * build({\n * cwd: process.cwd(),\n * tsconfig: 'tsconfig.dist.json,\n * }).then(() => {\n * console.log('successfully built')\n * }).catch((err) => {\n * console.log(`build error: ${err.message}`)\n * })\n * ```\n *\n * @public\n */\nexport async function build(options: {\n cwd: string\n emitDeclarationOnly?: boolean\n strict?: boolean\n tsconfig?: string\n}): Promise<void> {\n const {cwd, emitDeclarationOnly, strict = false, tsconfig: tsconfigOption} = options\n const logger = createLogger()\n\n const pkg = await loadPkgWithReporting({cwd, logger})\n const config = await loadConfig({cwd})\n const extMap = getPkgExtMap({legacyExports: config?.legacyExports ?? false})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n\n const ctx = await resolveBuildContext({\n config,\n cwd,\n emitDeclarationOnly,\n extMap,\n logger,\n pkg,\n strict,\n tsconfig,\n })\n\n const buildTasks = resolveBuildTasks(ctx)\n\n for (const task of buildTasks) {\n const handler = buildTaskHandlers[task.type] as TaskHandler<BuildTask>\n const taskName = handler.name(ctx, task)\n\n const spinner = createSpinner(taskName)\n\n try {\n const result = await handler.exec(ctx, task).toPromise()\n\n spinner.complete()\n ctx.logger.log()\n\n handler.complete(ctx, task, result)\n } catch (err) {\n spinner.error()\n\n if (err instanceof Error) {\n const RE_CWD = new RegExp(`${cwd}`, 'g')\n\n ctx.logger.error(err.message.replace(RE_CWD, '.'))\n ctx.logger.log()\n }\n\n handler.error(ctx, task, err)\n\n process.exit(1)\n }\n }\n}\n"],"names":["resolveBuildTasks","ctx","_a","_b","_c","_d","_e","config","cwd","pkg","target","bundles","tasks","exports","Object","entries","map","_ref","_path","exp","dtsTask","type","rollupTasks","addRollupTaskEntry","format","runtime","entry","buildId","concat","push","importId","path","join","name","types","exportPath","sourcePath","source","targetPath","length","emitDeclarationOnly","output","require","import","browser","bundle","values","legacyExports","_exported","relativeTargetPath","replace","fs","writeFileSync","default","resolve","nodeReexportCjsEntries","node","endsWith","createSpinner","msg","startTime","Date","now","console","log","complete","chalk","green","gray","error","red","build","options","_ref2","strict","tsconfig","tsconfigOption","logger","createLogger","loadPkgWithReporting","loadConfig","extMap","getPkgExtMap","resolveBuildContext","buildTasks","task","handler","buildTaskHandlers","taskName","spinner","result","exec","toPromise","err","Error","RE_CWD","RegExp","message","process","exit"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-c18ac13f.cjs","sources":["../../src/node/getFilesize.ts","../../src/node/printPackageTree.ts","../../src/node/check.ts"],"sourcesContent":["import {statSync} from 'fs'\nimport prettyBytes from 'pretty-bytes'\n\nexport function getFilesize(file: string): string {\n const stats = statSync(file)\n\n return prettyBytes(stats.size)\n}\n","import fs from 'fs'\nimport path from 'path'\nimport chalk from 'chalk'\nimport treeify from 'treeify'\nimport {PkgExport, BuildContext} from './core'\nimport {getFilesize} from './getFilesize'\n\nexport function fileExists(file: string): boolean {\n try {\n fs.accessSync(file)\n\n return true\n } catch (_) {\n return false\n }\n}\n\nfunction getFileInfo(cwd: string, filePath: string) {\n const p = path.resolve(cwd, filePath)\n const exists = fileExists(p)\n const size = exists ? getFilesize(p) : undefined\n\n return {exists, size}\n}\n\nexport function printPackageTree(ctx: BuildContext): void {\n const {cwd, exports, logger, pkg} = ctx\n\n if (!exports) return\n\n logger.log(`${chalk.blue(pkg.name)}@${chalk.green(pkg.version)}`)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tree: Record<string, unknown> = {}\n\n if (pkg.type) {\n tree.type = chalk.yellow(pkg.type)\n }\n\n if (pkg.bin) {\n tree.bin = Object.fromEntries(\n Object.entries(pkg.bin).map(([name, file]) => [chalk.cyan(name), fileInfo(file)])\n )\n }\n\n function fileInfo(file: string) {\n const info = getFileInfo(cwd, file)\n\n if (!info.size) {\n return `${chalk.gray(file)} ${chalk.red('does not exist')}`\n }\n\n return `${chalk.yellow(file)} ${chalk.gray(info.size)}`\n }\n\n tree.exports = Object.fromEntries(\n Object.entries(exports)\n .filter(([, entry]) => entry._exported)\n .map(([exportPath, entry]) => {\n const exp: Omit<PkgExport, '_exported'> = {\n types: undefined,\n source: fileInfo(entry.source),\n browser: undefined,\n require: undefined,\n node: undefined,\n import: undefined,\n default: fileInfo(entry.default),\n }\n\n if (entry.types) {\n exp.types = fileInfo(entry.types)\n } else {\n delete exp.types\n }\n\n if (entry.browser) {\n exp.browser = {source: fileInfo(entry.browser.source)}\n\n if (entry.browser.import) exp.browser.import = fileInfo(entry.browser.import)\n if (entry.browser.require) exp.browser.require = fileInfo(entry.browser.require)\n } else {\n delete exp.browser\n }\n\n if (entry.require) {\n exp.require = fileInfo(entry.require)\n } else {\n delete exp.require\n }\n\n if (entry.node) {\n exp.node = {}\n\n if (entry.node.source) exp.node.source = fileInfo(entry.node.source)\n if (entry.node.import) exp.node.import = fileInfo(entry.node.import)\n if (entry.node.require) exp.node.require = fileInfo(entry.node.require)\n } else {\n delete exp.node\n }\n\n if (entry.import) {\n exp.import = fileInfo(entry.import)\n } else {\n delete exp.import\n }\n\n return [chalk.cyan(path.join(pkg.name, exportPath)), exp]\n })\n )\n\n logger.log(treeify.asTree(tree as Record<string, any>, true, true))\n}\n","import path from 'path'\nimport esbuild, {BuildFailure} from 'esbuild'\nimport {getPkgExtMap, loadConfig, loadPkgWithReporting} from './core'\nimport {createLogger} from './logger'\nimport {fileExists, printPackageTree} from './printPackageTree'\nimport {resolveBuildContext} from './resolveBuildContext'\n\n/** @public */\nexport async function check(options: {\n cwd: string\n strict?: boolean\n tsconfig?: string\n}): Promise<void> {\n const {cwd, strict = false, tsconfig: tsconfigOption} = options\n const logger = createLogger()\n\n const pkg = await loadPkgWithReporting({cwd, logger})\n const config = await loadConfig({cwd})\n const extMap = getPkgExtMap({legacyExports: config?.legacyExports ?? false})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, extMap, logger, pkg, strict, tsconfig})\n\n printPackageTree(ctx)\n\n if (strict) {\n const missingFiles: string[] = []\n\n // Check if there are missing files\n for (const [, exp] of Object.entries(ctx.exports || {})) {\n if (exp.source && !fileExists(path.resolve(cwd, exp.source))) {\n missingFiles.push(exp.source)\n }\n\n if (exp.require && !fileExists(path.resolve(cwd, exp.require))) {\n missingFiles.push(exp.require)\n }\n\n if (exp.import && !fileExists(path.resolve(cwd, exp.import))) {\n missingFiles.push(exp.import)\n }\n\n if (exp.types && !fileExists(path.resolve(cwd, exp.types))) {\n missingFiles.push(exp.types)\n }\n }\n\n if (missingFiles.length) {\n logger.error('missing files')\n process.exit(1)\n }\n\n // Check if the files are resolved\n const _paths: {require: string[]; import: string[]} = {\n require: [],\n import: [],\n }\n\n for (const exp of Object.values(ctx.exports || {})) {\n if (!exp._exported) continue\n if (exp.require) _paths.require.push(exp.require)\n if (exp.import) _paths.import.push(exp.import)\n }\n\n const external = Object.keys(pkg.dependencies || {}).concat(\n Object.keys(pkg.devDependencies || {})\n )\n\n if (_paths.import.length) {\n const code = _paths.import.map((id) => `import('${id}')`).join('\\n')\n\n try {\n const esbuildResult = await esbuild.build({\n external,\n stdin: {\n contents: code,\n loader: 'js',\n resolveDir: cwd,\n },\n format: 'esm',\n bundle: true,\n logLevel: 'silent',\n // otherwise output maps to stdout as we're using stdin\n outfile: '/dev/null',\n platform: 'node',\n })\n\n if (esbuildResult.warnings.length > 0) {\n logger.warn(...esbuildResult.warnings)\n }\n } catch (err) {\n const {errors} = err as BuildFailure\n\n for (const _err of errors) {\n if (_err.location) {\n logger.error(_err.detail || _err.text)\n logger.error(`${_err.location.line} | ${_err.location.lineText}`)\n logger.error(\n 'in',\n `./${_err.location.file}:${_err.location.line}:${_err.location.column}`\n )\n } else {\n logger.error(_err.detail || _err.text)\n }\n\n logger.log()\n }\n\n process.exit(1)\n }\n }\n\n if (_paths.require.length) {\n const code = _paths.require.map((id) => `require('${id}')`).join('\\n')\n\n const esbuildResult = await esbuild.build({\n external,\n stdin: {\n contents: code,\n loader: 'js',\n resolveDir: cwd,\n },\n format: 'cjs',\n bundle: true,\n // otherwise output maps to stdout as we're using stdin\n outfile: '/dev/null',\n platform: 'node',\n })\n\n if (esbuildResult.errors.length > 0) {\n // throw new Error(esbuildResult.errors.join(', '))\n logger.error(esbuildResult.errors.join(', '))\n process.exit(1)\n }\n\n if (esbuildResult.warnings.length > 0) {\n logger.warn(...esbuildResult.warnings)\n }\n }\n }\n}\n"],"names":["getFilesize","file","stats","statSync","prettyBytes","default","size","fileExists","fs","accessSync","_","getFileInfo","cwd","filePath","p","path","resolve","exists","printPackageTree","ctx","exports","logger","pkg","log","concat","chalk","blue","name","green","version","tree","type","yellow","bin","Object","fromEntries","entries","map","_ref","cyan","fileInfo","info","gray","red","filter","_ref2","entry","_exported","_ref3","exportPath","exp","types","source","browser","require","node","import","join","treeify","asTree","check","options","_ref4","strict","tsconfig","tsconfigOption","createLogger","loadPkgWithReporting","config","loadConfig","extMap","getPkgExtMap","legacyExports","resolveBuildContext","missingFiles","push","length","error","process","exit","_paths","values","external","keys","dependencies","devDependencies","code","id","esbuildResult","esbuild","build","stdin","contents","loader","resolveDir","format","bundle","logLevel","outfile","platform","warnings","warn","err","errors","_err","location","detail","text","line","lineText","column"],"mappings":"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"}
|