@sanity/pkg-utils 2.0.0-beta.1 → 2.0.0-beta.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/dist/_chunks/{build-30149f1c.cjs → build-b879ad71.cjs} +10 -7
- package/dist/_chunks/build-b879ad71.cjs.map +1 -0
- package/dist/_chunks/{buildAction-7e75c8b7.cjs → buildAction-232e6073.cjs} +4 -4
- package/dist/_chunks/{buildAction-7e75c8b7.cjs.map → buildAction-232e6073.cjs.map} +1 -1
- package/dist/_chunks/{check-0f269395.cjs → check-617f9494.cjs} +23 -19
- package/dist/_chunks/check-617f9494.cjs.map +1 -0
- package/dist/_chunks/{checkAction-8b9632b6.cjs → checkAction-a2d388ad.cjs} +3 -3
- package/dist/_chunks/{checkAction-8b9632b6.cjs.map → checkAction-a2d388ad.cjs.map} +1 -1
- package/dist/_chunks/{index-db00ad50.cjs → index-b63b3deb.cjs} +73 -19
- package/dist/_chunks/index-b63b3deb.cjs.map +1 -0
- package/dist/_chunks/{resolveBuildContext-e938cee6.cjs → resolveBuildContext-bba19cd6.cjs} +43 -40
- package/dist/_chunks/resolveBuildContext-bba19cd6.cjs.map +1 -0
- package/dist/_chunks/{watch-73fd460f.cjs → watch-6fb4e453.cjs} +14 -11
- package/dist/_chunks/watch-6fb4e453.cjs.map +1 -0
- package/dist/_chunks/{watchAction-ffba41fd.cjs → watchAction-8135afe0.cjs} +4 -4
- package/dist/_chunks/{watchAction-ffba41fd.cjs.map → watchAction-8135afe0.cjs.map} +1 -1
- package/dist/cli.cjs +4 -4
- package/dist/index.cjs +17 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +17 -8
- package/dist/index.js +363 -295
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/node/build.ts +13 -2
- package/src/node/check.ts +4 -3
- package/src/node/core/contexts/buildContext.ts +2 -7
- package/src/node/core/pkg/loadPkgWithReporting.ts +11 -20
- package/src/node/index.ts +3 -2
- package/src/node/logger.ts +33 -0
- package/src/node/printPackageTree.ts +11 -11
- package/src/node/resolveBuildContext.ts +11 -25
- package/src/node/spinner.ts +3 -3
- package/src/node/tasks/dts/dtsTask.ts +7 -4
- package/src/node/tasks/rollup/rollupTask.ts +66 -21
- package/src/node/tasks/rollup/rollupWatchTask.ts +0 -1
- package/src/node/watch.ts +6 -3
- package/src/node/watchConfigFiles.ts +9 -8
- package/dist/_chunks/build-30149f1c.cjs.map +0 -1
- package/dist/_chunks/check-0f269395.cjs.map +0 -1
- package/dist/_chunks/index-db00ad50.cjs.map +0 -1
- package/dist/_chunks/resolveBuildContext-e938cee6.cjs.map +0 -1
- package/dist/_chunks/watch-73fd460f.cjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@sanity/pkg-utils",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.2",
|
|
5
5
|
"author": "Sanity.io <hello@sanity.io>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"description": "Simple utilities for modern npm packages.",
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
],
|
|
41
41
|
"scripts": {
|
|
42
42
|
"build": "run-s clean build:pkg check:pkg",
|
|
43
|
-
"build:pkg": "node --
|
|
44
|
-
"check:pkg": "node --
|
|
43
|
+
"build:pkg": "node --loader esbuild-register/loader -r esbuild-register scripts/build",
|
|
44
|
+
"check:pkg": "node --loader esbuild-register/loader -r esbuild-register scripts/check",
|
|
45
45
|
"check:types": "tsc --build",
|
|
46
46
|
"clean": "rimraf dist test/env/__tmp__",
|
|
47
47
|
"commit": "cz",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"prepublishOnly": "pnpm run build",
|
|
52
52
|
"release": "semantic-release",
|
|
53
53
|
"test": "vitest run",
|
|
54
|
-
"watch": "node --
|
|
54
|
+
"watch": "node --loader esbuild-register/loader -r esbuild-register scripts/watch"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@babel/core": "^7.20.5",
|
package/src/node/build.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {loadConfig, loadPkgWithReporting} from './core'
|
|
2
|
+
import {createLogger} from './logger'
|
|
2
3
|
import {resolveBuildContext} from './resolveBuildContext'
|
|
3
4
|
import {resolveBuildTasks} from './resolveBuildTasks'
|
|
4
5
|
import {createSpinner} from './spinner'
|
|
@@ -30,11 +31,21 @@ export async function build(options: {
|
|
|
30
31
|
tsconfig?: string
|
|
31
32
|
}): Promise<void> {
|
|
32
33
|
const {cwd, emitDeclarationOnly, strict = false, tsconfig: tsconfigOption} = options
|
|
34
|
+
const logger = createLogger()
|
|
33
35
|
|
|
34
|
-
const pkg = await loadPkgWithReporting({cwd})
|
|
36
|
+
const pkg = await loadPkgWithReporting({cwd, logger})
|
|
35
37
|
const config = await loadConfig({cwd})
|
|
36
38
|
const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'
|
|
37
|
-
|
|
39
|
+
|
|
40
|
+
const ctx = await resolveBuildContext({
|
|
41
|
+
config,
|
|
42
|
+
cwd,
|
|
43
|
+
emitDeclarationOnly,
|
|
44
|
+
logger,
|
|
45
|
+
pkg,
|
|
46
|
+
strict,
|
|
47
|
+
tsconfig,
|
|
48
|
+
})
|
|
38
49
|
|
|
39
50
|
const buildTasks = resolveBuildTasks(ctx)
|
|
40
51
|
|
package/src/node/check.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
2
|
import esbuild, {BuildFailure} from 'esbuild'
|
|
3
3
|
import {loadConfig, loadPkgWithReporting} from './core'
|
|
4
|
+
import {createLogger} from './logger'
|
|
4
5
|
import {fileExists, printPackageTree} from './printPackageTree'
|
|
5
6
|
import {resolveBuildContext} from './resolveBuildContext'
|
|
6
7
|
|
|
@@ -11,12 +12,12 @@ export async function check(options: {
|
|
|
11
12
|
tsconfig?: string
|
|
12
13
|
}): Promise<void> {
|
|
13
14
|
const {cwd, strict = false, tsconfig: tsconfigOption} = options
|
|
15
|
+
const logger = createLogger()
|
|
14
16
|
|
|
15
|
-
const pkg = await loadPkgWithReporting({cwd})
|
|
17
|
+
const pkg = await loadPkgWithReporting({cwd, logger})
|
|
16
18
|
const config = await loadConfig({cwd})
|
|
17
19
|
const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'
|
|
18
|
-
const ctx = await resolveBuildContext({config, cwd, pkg, strict, tsconfig})
|
|
19
|
-
const {logger} = ctx
|
|
20
|
+
const ctx = await resolveBuildContext({config, cwd, logger, pkg, strict, tsconfig})
|
|
20
21
|
|
|
21
22
|
printPackageTree(ctx)
|
|
22
23
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import ts from 'typescript'
|
|
2
|
+
import {Logger} from '../../logger'
|
|
2
3
|
import {PkgExports, PkgRuntime, PkgConfigOptions} from '../config'
|
|
3
4
|
import {PackageJSON} from '../pkg'
|
|
4
5
|
|
|
@@ -17,13 +18,7 @@ export interface BuildContext {
|
|
|
17
18
|
exports: PkgExports | undefined
|
|
18
19
|
external: string[]
|
|
19
20
|
files: BuildFile[]
|
|
20
|
-
logger:
|
|
21
|
-
log: (...args: unknown[]) => void
|
|
22
|
-
info: (...args: unknown[]) => void
|
|
23
|
-
warn: (...args: unknown[]) => void
|
|
24
|
-
error: (...args: unknown[]) => void
|
|
25
|
-
success: (...args: unknown[]) => void
|
|
26
|
-
}
|
|
21
|
+
logger: Logger
|
|
27
22
|
pkg: PackageJSON
|
|
28
23
|
runtime: PkgRuntime
|
|
29
24
|
strict: boolean
|
|
@@ -1,34 +1,25 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
|
|
3
1
|
import chalk from 'chalk'
|
|
4
2
|
import {ZodError} from 'zod'
|
|
3
|
+
import {Logger} from '../../logger'
|
|
5
4
|
import {loadPkg} from './loadPkg'
|
|
6
5
|
import {PackageJSON} from './types'
|
|
7
6
|
|
|
8
7
|
/** @internal */
|
|
9
|
-
export async function loadPkgWithReporting(options: {
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
export async function loadPkgWithReporting(options: {
|
|
9
|
+
cwd: string
|
|
10
|
+
logger: Logger
|
|
11
|
+
}): Promise<PackageJSON> {
|
|
12
|
+
const {cwd, logger} = options
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
[
|
|
16
|
-
`${chalk.yellow('warn')} `,
|
|
17
|
-
'Packages with `"type": "commonjs"` may not be compatible with popular bundlers like ',
|
|
18
|
-
'webpack and rollup, and projects such as Astro and SvelteKit. Please consider using ',
|
|
19
|
-
'`"type": "module"` instead.',
|
|
20
|
-
].join('')
|
|
21
|
-
)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return pkg
|
|
14
|
+
try {
|
|
15
|
+
return await loadPkg({cwd})
|
|
25
16
|
} catch (err) {
|
|
26
17
|
if (err instanceof ZodError) {
|
|
27
18
|
for (const issue of err.issues) {
|
|
28
19
|
if (issue.code === 'invalid_type') {
|
|
29
|
-
|
|
20
|
+
logger.error(
|
|
30
21
|
[
|
|
31
|
-
|
|
22
|
+
`\`${formatPath(issue.path)}\` `,
|
|
32
23
|
`in \`./package.json\` must be of type ${chalk.magenta(issue.expected)} `,
|
|
33
24
|
`(received ${chalk.magenta(issue.received)})`,
|
|
34
25
|
].join('')
|
|
@@ -36,7 +27,7 @@ export async function loadPkgWithReporting(options: {cwd: string}): Promise<Pack
|
|
|
36
27
|
}
|
|
37
28
|
}
|
|
38
29
|
} else {
|
|
39
|
-
|
|
30
|
+
logger.error(err)
|
|
40
31
|
}
|
|
41
32
|
|
|
42
33
|
process.exit(1)
|
package/src/node/index.ts
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import chalk from 'chalk'
|
|
2
|
+
|
|
3
|
+
/** @internal */
|
|
4
|
+
export interface Logger {
|
|
5
|
+
log: (...args: unknown[]) => void
|
|
6
|
+
info: (...args: unknown[]) => void
|
|
7
|
+
warn: (...args: unknown[]) => void
|
|
8
|
+
error: (...args: unknown[]) => void
|
|
9
|
+
success: (...args: unknown[]) => void
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
export function createLogger(): Logger {
|
|
14
|
+
return {
|
|
15
|
+
/* eslint-disable no-console */
|
|
16
|
+
log: (...args) => {
|
|
17
|
+
console.log(...args)
|
|
18
|
+
},
|
|
19
|
+
info: (...args) => {
|
|
20
|
+
console.log(chalk.blue('[info]'), ...args)
|
|
21
|
+
},
|
|
22
|
+
warn: (...args) => {
|
|
23
|
+
console.log(chalk.yellow('[warning]'), ...args)
|
|
24
|
+
},
|
|
25
|
+
error: (...args) => {
|
|
26
|
+
console.log(chalk.red('[error]'), ...args)
|
|
27
|
+
},
|
|
28
|
+
success: (...args) => {
|
|
29
|
+
console.log(chalk.green('[success]'), ...args)
|
|
30
|
+
},
|
|
31
|
+
/* eslint-enable no-console */
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -31,10 +31,12 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
31
31
|
logger.log(`${chalk.blue(pkg.name)}@${chalk.green(pkg.version)}`)
|
|
32
32
|
|
|
33
33
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
-
const tree: Record<string,
|
|
34
|
+
const tree: Record<string, unknown> = {type: chalk.yellow(pkg.type)}
|
|
35
35
|
|
|
36
36
|
if (pkg.bin) {
|
|
37
|
-
tree.bin =
|
|
37
|
+
tree.bin = Object.fromEntries(
|
|
38
|
+
Object.entries(pkg.bin).map(([name, file]) => [chalk.cyan(name), fileInfo(file)])
|
|
39
|
+
)
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
function fileInfo(file: string) {
|
|
@@ -44,7 +46,7 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
44
46
|
return `${chalk.gray(file)} ${chalk.red('does not exist')}`
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
return `${file} ${chalk.gray(info.size)}`
|
|
49
|
+
return `${chalk.yellow(file)} ${chalk.gray(info.size)}`
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
tree.exports = Object.fromEntries(
|
|
@@ -52,13 +54,13 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
52
54
|
.filter(([, entry]) => entry._exported)
|
|
53
55
|
.map(([exportPath, entry]) => {
|
|
54
56
|
const exp: Omit<PkgExport, '_exported'> = {
|
|
55
|
-
source: entry.source,
|
|
56
57
|
types: undefined,
|
|
58
|
+
source: fileInfo(entry.source),
|
|
57
59
|
browser: undefined,
|
|
58
60
|
node: undefined,
|
|
59
61
|
import: undefined,
|
|
60
62
|
require: undefined,
|
|
61
|
-
default: entry.default,
|
|
63
|
+
default: fileInfo(entry.default),
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
if (entry.types) {
|
|
@@ -68,7 +70,7 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
if (entry.browser) {
|
|
71
|
-
exp.browser = {source: entry.browser.source}
|
|
73
|
+
exp.browser = {source: fileInfo(entry.browser.source)}
|
|
72
74
|
|
|
73
75
|
if (entry.browser.import) exp.browser.import = fileInfo(entry.browser.import)
|
|
74
76
|
if (entry.browser.require) exp.browser.require = fileInfo(entry.browser.require)
|
|
@@ -77,7 +79,7 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
77
79
|
}
|
|
78
80
|
|
|
79
81
|
if (entry.node) {
|
|
80
|
-
exp.node = {source: entry.node.source}
|
|
82
|
+
exp.node = {source: fileInfo(entry.node.source)}
|
|
81
83
|
|
|
82
84
|
if (entry.node.import) exp.node.import = fileInfo(entry.node.import)
|
|
83
85
|
if (entry.node.require) exp.node.require = fileInfo(entry.node.require)
|
|
@@ -97,11 +99,9 @@ export function printPackageTree(ctx: BuildContext): void {
|
|
|
97
99
|
delete exp.require
|
|
98
100
|
}
|
|
99
101
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return [chalk.green(path.join(pkg.name, exportPath)), exp]
|
|
102
|
+
return [chalk.cyan(path.join(pkg.name, exportPath)), exp]
|
|
103
103
|
})
|
|
104
104
|
)
|
|
105
105
|
|
|
106
|
-
logger.log(treeify.asTree(tree, true, true))
|
|
106
|
+
logger.log(treeify.asTree(tree as Record<string, any>, true, true))
|
|
107
107
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
2
|
import {
|
|
4
3
|
PkgConfigOptions,
|
|
5
4
|
PkgExports,
|
|
@@ -12,42 +11,29 @@ import {
|
|
|
12
11
|
resolveConfigProperty,
|
|
13
12
|
} from './core'
|
|
14
13
|
import {findCommonDirPath, pathContains} from './core/findCommonPath'
|
|
14
|
+
import {Logger} from './logger'
|
|
15
15
|
import {resolveBrowserslistVersions} from './resolveBrowserslistVersions'
|
|
16
16
|
import {resolveBrowserTarget} from './resolveBrowserTarget'
|
|
17
17
|
import {resolveNodeTarget} from './resolveNodeTarget'
|
|
18
18
|
|
|
19
|
-
function createLogger(): BuildContext['logger'] {
|
|
20
|
-
return {
|
|
21
|
-
/* eslint-disable no-console */
|
|
22
|
-
log: (...args) => {
|
|
23
|
-
console.log(...args)
|
|
24
|
-
},
|
|
25
|
-
info: (...args) => {
|
|
26
|
-
console.log(chalk.blue(' info'), ...args)
|
|
27
|
-
},
|
|
28
|
-
warn: (...args) => {
|
|
29
|
-
console.log(chalk.yellow(' warn'), ...args)
|
|
30
|
-
},
|
|
31
|
-
error: (...args) => {
|
|
32
|
-
console.log(chalk.red(' fail'), ...args)
|
|
33
|
-
},
|
|
34
|
-
success: (...args) => {
|
|
35
|
-
console.log(chalk.green(' ok '), ...args)
|
|
36
|
-
},
|
|
37
|
-
/* eslint-enable no-console */
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
19
|
export async function resolveBuildContext(options: {
|
|
42
20
|
config?: PkgConfigOptions
|
|
43
21
|
cwd: string
|
|
44
22
|
emitDeclarationOnly?: boolean
|
|
23
|
+
logger: Logger
|
|
45
24
|
pkg: PackageJSON
|
|
46
25
|
strict: boolean
|
|
47
26
|
tsconfig: string
|
|
48
27
|
}): Promise<BuildContext> {
|
|
49
|
-
const {
|
|
50
|
-
|
|
28
|
+
const {
|
|
29
|
+
config,
|
|
30
|
+
cwd,
|
|
31
|
+
emitDeclarationOnly = false,
|
|
32
|
+
logger,
|
|
33
|
+
pkg,
|
|
34
|
+
strict,
|
|
35
|
+
tsconfig: tsconfigPath,
|
|
36
|
+
} = options
|
|
51
37
|
const tsconfig = await loadTSConfig({cwd, tsconfigPath})
|
|
52
38
|
const targetVersions = resolveBrowserslistVersions(pkg.browserslist || DEFAULT_BROWSERSLIST_QUERY)
|
|
53
39
|
const nodeTarget = resolveNodeTarget(targetVersions)
|
package/src/node/spinner.ts
CHANGED
|
@@ -5,14 +5,14 @@ import chalk from 'chalk'
|
|
|
5
5
|
export function createSpinner(msg: string): {complete: () => void; error: () => void} {
|
|
6
6
|
const startTime = Date.now()
|
|
7
7
|
|
|
8
|
-
console.log(
|
|
8
|
+
console.log(msg)
|
|
9
9
|
|
|
10
10
|
return {
|
|
11
11
|
complete: () => {
|
|
12
|
-
console.log(`${chalk.green('
|
|
12
|
+
console.log(`${chalk.green('[success]')} ${chalk.gray(`${Date.now() - startTime}ms`)}`)
|
|
13
13
|
},
|
|
14
14
|
error: () => {
|
|
15
|
-
console.log(`${chalk.red(`
|
|
15
|
+
console.log(`${chalk.red(`[error]`)} ${chalk.gray(`${Date.now() - startTime}ms`)}`)
|
|
16
16
|
},
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -10,10 +10,13 @@ import {DtsResult, DtsTask} from './types'
|
|
|
10
10
|
export const dtsTask: TaskHandler<DtsTask, DtsResult> = {
|
|
11
11
|
name: (_ctx, task) =>
|
|
12
12
|
[
|
|
13
|
-
`
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
`Build type definitions...`,
|
|
14
|
+
` entries:`,
|
|
15
|
+
...task.entries.map((entry) =>
|
|
16
|
+
[
|
|
17
|
+
` - ${chalk.cyan(entry.importId)}: `,
|
|
18
|
+
`${chalk.yellow(entry.sourcePath)} ${chalk.gray('→')} ${chalk.yellow(entry.targetPath)}`,
|
|
19
|
+
].join('')
|
|
17
20
|
),
|
|
18
21
|
].join('\n'),
|
|
19
22
|
exec: (ctx, task) => {
|
|
@@ -11,11 +11,20 @@ import {resolveRollupConfig} from './resolveRollupConfig'
|
|
|
11
11
|
/** @internal */
|
|
12
12
|
export const rollupTask: TaskHandler<RollupTask> = {
|
|
13
13
|
name: (ctx, task) =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.
|
|
14
|
+
[
|
|
15
|
+
`Build javascript files...`,
|
|
16
|
+
` format: ${chalk.yellow(task.format)}`,
|
|
17
|
+
` target:`,
|
|
18
|
+
...task.target.map((t) => ` - ${chalk.yellow(t)}`),
|
|
19
|
+
` entries:`,
|
|
20
|
+
...task.entries.map((e) =>
|
|
21
|
+
[
|
|
22
|
+
` - `,
|
|
23
|
+
`${chalk.cyan(path.join(ctx.pkg.name, e.path))}: `,
|
|
24
|
+
`${chalk.yellow(e.source)} ${chalk.gray('→')} ${chalk.yellow(e.output)}`,
|
|
25
|
+
].join('')
|
|
26
|
+
),
|
|
27
|
+
].join('\n'),
|
|
19
28
|
exec: (ctx, task) => {
|
|
20
29
|
return new Observable((observer) => {
|
|
21
30
|
execPromise(ctx, task)
|
|
@@ -36,30 +45,43 @@ export const rollupTask: TaskHandler<RollupTask> = {
|
|
|
36
45
|
},
|
|
37
46
|
}
|
|
38
47
|
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
const outDir = path.relative(ctx.cwd, distPath)
|
|
42
|
-
|
|
43
|
-
const _console = {
|
|
48
|
+
function createSpyConsole() {
|
|
49
|
+
const original = {
|
|
44
50
|
log: console.log,
|
|
45
51
|
warn: console.warn,
|
|
46
52
|
error: console.error,
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
const {
|
|
55
|
+
const messages: {type: 'log' | 'warn' | 'error'; args: unknown[]}[] = []
|
|
56
|
+
|
|
57
|
+
console.log = (...args: unknown[]) => messages.push({type: 'log', args})
|
|
58
|
+
console.warn = (...args: unknown[]) => messages.push({type: 'warn', args})
|
|
59
|
+
console.error = (...args: unknown[]) => messages.push({type: 'error', args})
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
messages,
|
|
63
|
+
restore: () => {
|
|
64
|
+
console.log = original.log
|
|
65
|
+
console.warn = original.warn
|
|
66
|
+
console.error = original.error
|
|
67
|
+
},
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function execPromise(ctx: BuildContext, task: RollupTask) {
|
|
72
|
+
const {distPath, files, logger} = ctx
|
|
73
|
+
const outDir = path.relative(ctx.cwd, distPath)
|
|
74
|
+
|
|
75
|
+
// Prevent rollup from printing warnings to the console
|
|
76
|
+
const spyConsole = createSpyConsole()
|
|
50
77
|
|
|
51
|
-
|
|
52
|
-
console.warn = () => undefined
|
|
53
|
-
console.error = () => undefined
|
|
78
|
+
const {inputOptions, outputOptions} = resolveRollupConfig(ctx, task)
|
|
54
79
|
|
|
55
80
|
// Create bundle
|
|
56
81
|
const bundle = await rollup({
|
|
57
82
|
...inputOptions,
|
|
58
83
|
onwarn(warning) {
|
|
59
|
-
|
|
60
|
-
// rollupWarn(warning)
|
|
61
|
-
_console.warn.bind(console)(chalk.yellow('warn '), warning.message)
|
|
62
|
-
}
|
|
84
|
+
spyConsole.messages.push({type: 'warn', args: [warning.message]})
|
|
63
85
|
},
|
|
64
86
|
})
|
|
65
87
|
|
|
@@ -67,9 +89,32 @@ async function execPromise(ctx: BuildContext, task: RollupTask) {
|
|
|
67
89
|
// you can call this function multiple times on the same bundle object
|
|
68
90
|
const {output} = await bundle.generate(outputOptions)
|
|
69
91
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
92
|
+
// Restore console
|
|
93
|
+
spyConsole.restore()
|
|
94
|
+
|
|
95
|
+
for (const msg of spyConsole.messages) {
|
|
96
|
+
const text = String(msg.args[0])
|
|
97
|
+
|
|
98
|
+
if (text.startsWith('Dynamic import can only')) {
|
|
99
|
+
continue // ignore
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (text.startsWith('Sourcemap is likely to be incorrect')) {
|
|
103
|
+
continue // ignore
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (msg.type === 'log') {
|
|
107
|
+
logger.info(...msg.args)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (msg.type === 'warn') {
|
|
111
|
+
logger.warn(...msg.args)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (msg.type === 'error') {
|
|
115
|
+
logger.error(...msg.args)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
73
118
|
|
|
74
119
|
for (const chunkOrAsset of output) {
|
|
75
120
|
if (chunkOrAsset.type === 'asset') {
|
package/src/node/watch.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
2
|
import {switchMap} from 'rxjs'
|
|
3
3
|
import {loadConfig, loadPkgWithReporting} from './core'
|
|
4
|
+
import {createLogger} from './logger'
|
|
4
5
|
import {resolveBuildContext} from './resolveBuildContext'
|
|
5
6
|
import {resolveWatchTasks} from './resolveWatchTasks'
|
|
6
7
|
import {WatchTask, TaskHandler, watchTaskHandlers} from './tasks'
|
|
@@ -14,7 +15,9 @@ export async function watch(options: {
|
|
|
14
15
|
}): Promise<void> {
|
|
15
16
|
const {cwd, strict = false, tsconfig: tsconfigOption} = options
|
|
16
17
|
|
|
17
|
-
const
|
|
18
|
+
const logger = createLogger()
|
|
19
|
+
|
|
20
|
+
const configFiles$ = await watchConfigFiles({cwd, logger})
|
|
18
21
|
|
|
19
22
|
const ctx$ = configFiles$.pipe(
|
|
20
23
|
switchMap(async (configFiles) => {
|
|
@@ -26,11 +29,11 @@ export async function watch(options: {
|
|
|
26
29
|
throw new Error('missing package.json')
|
|
27
30
|
}
|
|
28
31
|
|
|
29
|
-
const pkg = await loadPkgWithReporting({cwd})
|
|
32
|
+
const pkg = await loadPkgWithReporting({cwd, logger})
|
|
30
33
|
const config = await loadConfig({cwd})
|
|
31
34
|
const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'
|
|
32
35
|
|
|
33
|
-
return resolveBuildContext({config, cwd, pkg, strict, tsconfig})
|
|
36
|
+
return resolveBuildContext({config, cwd, logger, pkg, strict, tsconfig})
|
|
34
37
|
})
|
|
35
38
|
)
|
|
36
39
|
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import path from 'path'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
2
|
import {Observable} from 'rxjs'
|
|
4
3
|
import {distinctUntilChanged, scan, startWith} from 'rxjs/operators'
|
|
5
4
|
import {globFiles} from './globFiles'
|
|
5
|
+
import {Logger} from './logger'
|
|
6
6
|
import {watchFiles} from './watchFiles'
|
|
7
7
|
|
|
8
|
-
export async function watchConfigFiles(options: {
|
|
9
|
-
|
|
8
|
+
export async function watchConfigFiles(options: {
|
|
9
|
+
cwd: string
|
|
10
|
+
logger: Logger
|
|
11
|
+
}): Promise<Observable<string[]>> {
|
|
12
|
+
const {cwd, logger} = options
|
|
10
13
|
|
|
11
14
|
const initialFiles = await globFiles([
|
|
12
15
|
path.resolve(cwd, 'package.json'),
|
|
@@ -33,13 +36,11 @@ export async function watchConfigFiles(options: {cwd: string}): Promise<Observab
|
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
if (fileEvent.type === 'change') {
|
|
36
|
-
|
|
37
|
-
console.log(
|
|
39
|
+
logger.log(
|
|
38
40
|
'--------------------------------------------------------------------------------'
|
|
39
41
|
)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/* eslint-enable no-console */
|
|
42
|
+
logger.info(path.relative(cwd, fileEvent.file), 'changed')
|
|
43
|
+
logger.log('')
|
|
43
44
|
|
|
44
45
|
return files.slice(0) // trigger update
|
|
45
46
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-30149f1c.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, 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 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('ok ')} ${chalk.gray(`${Date.now() - startTime}ms`)}`)\n },\n error: () => {\n console.log(`${chalk.red(`failed`)} ${chalk.gray(`${Date.now() - startTime}ms`)}`)\n },\n }\n}\n","import {loadConfig, loadPkgWithReporting} from './core'\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\n const pkg = await loadPkgWithReporting({cwd})\n const config = await loadConfig({cwd})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, emitDeclarationOnly, pkg, strict, tsconfig})\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","_path","exp","dtsTask","type","rollupTasks","addRollupTaskEntry","format","runtime","entry","buildId","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","createSpinner","msg","startTime","Date","now","console","log","complete","chalk","green","gray","error","red","build","options","strict","tsconfig","tsconfigOption","loadPkgWithReporting","loadConfig","resolveBuildContext","buildTasks","task","handler","buildTaskHandlers","taskName","spinner","result","exec","toPromise","logger","err","Error","RE_CWD","RegExp","message","process","exit"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-0f269395.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, any> = {}\n\n if (pkg.bin) {\n tree.bin = pkg.bin\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 `${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 source: entry.source,\n types: undefined,\n browser: undefined,\n node: undefined,\n import: undefined,\n require: undefined,\n default: 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: 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.node) {\n exp.node = {source: entry.node.source}\n\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 if (entry.require) {\n exp.require = fileInfo(entry.require)\n } else {\n delete exp.require\n }\n\n exp.default = fileInfo(entry.default)\n\n return [chalk.green(path.join(pkg.name, exportPath)), exp]\n })\n )\n\n logger.log(treeify.asTree(tree, true, true))\n}\n","import path from 'path'\nimport esbuild, {BuildFailure} from 'esbuild'\nimport {loadConfig, loadPkgWithReporting} from './core'\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\n const pkg = await loadPkgWithReporting({cwd})\n const config = await loadConfig({cwd})\n const tsconfig = tsconfigOption || config?.tsconfig || 'tsconfig.json'\n const ctx = await resolveBuildContext({config, cwd, pkg, strict, tsconfig})\n const {logger} = ctx\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","chalk","blue","name","green","version","tree","bin","fileInfo","info","gray","red","Object","fromEntries","entries","filter","entry","_exported","map","exportPath","exp","source","types","browser","node","import","require","join","treeify","asTree","check","options","strict","tsconfig","tsconfigOption","loadPkgWithReporting","config","loadConfig","resolveBuildContext","missingFiles","push","length","error","process","exit","_paths","values","external","keys","dependencies","concat","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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"}
|