@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.
Files changed (42) hide show
  1. package/dist/_chunks/{build-30149f1c.cjs → build-b879ad71.cjs} +10 -7
  2. package/dist/_chunks/build-b879ad71.cjs.map +1 -0
  3. package/dist/_chunks/{buildAction-7e75c8b7.cjs → buildAction-232e6073.cjs} +4 -4
  4. package/dist/_chunks/{buildAction-7e75c8b7.cjs.map → buildAction-232e6073.cjs.map} +1 -1
  5. package/dist/_chunks/{check-0f269395.cjs → check-617f9494.cjs} +23 -19
  6. package/dist/_chunks/check-617f9494.cjs.map +1 -0
  7. package/dist/_chunks/{checkAction-8b9632b6.cjs → checkAction-a2d388ad.cjs} +3 -3
  8. package/dist/_chunks/{checkAction-8b9632b6.cjs.map → checkAction-a2d388ad.cjs.map} +1 -1
  9. package/dist/_chunks/{index-db00ad50.cjs → index-b63b3deb.cjs} +73 -19
  10. package/dist/_chunks/index-b63b3deb.cjs.map +1 -0
  11. package/dist/_chunks/{resolveBuildContext-e938cee6.cjs → resolveBuildContext-bba19cd6.cjs} +43 -40
  12. package/dist/_chunks/resolveBuildContext-bba19cd6.cjs.map +1 -0
  13. package/dist/_chunks/{watch-73fd460f.cjs → watch-6fb4e453.cjs} +14 -11
  14. package/dist/_chunks/watch-6fb4e453.cjs.map +1 -0
  15. package/dist/_chunks/{watchAction-ffba41fd.cjs → watchAction-8135afe0.cjs} +4 -4
  16. package/dist/_chunks/{watchAction-ffba41fd.cjs.map → watchAction-8135afe0.cjs.map} +1 -1
  17. package/dist/cli.cjs +4 -4
  18. package/dist/index.cjs +17 -16
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +17 -8
  21. package/dist/index.js +363 -295
  22. package/dist/index.js.map +1 -1
  23. package/package.json +4 -4
  24. package/src/node/build.ts +13 -2
  25. package/src/node/check.ts +4 -3
  26. package/src/node/core/contexts/buildContext.ts +2 -7
  27. package/src/node/core/pkg/loadPkgWithReporting.ts +11 -20
  28. package/src/node/index.ts +3 -2
  29. package/src/node/logger.ts +33 -0
  30. package/src/node/printPackageTree.ts +11 -11
  31. package/src/node/resolveBuildContext.ts +11 -25
  32. package/src/node/spinner.ts +3 -3
  33. package/src/node/tasks/dts/dtsTask.ts +7 -4
  34. package/src/node/tasks/rollup/rollupTask.ts +66 -21
  35. package/src/node/tasks/rollup/rollupWatchTask.ts +0 -1
  36. package/src/node/watch.ts +6 -3
  37. package/src/node/watchConfigFiles.ts +9 -8
  38. package/dist/_chunks/build-30149f1c.cjs.map +0 -1
  39. package/dist/_chunks/check-0f269395.cjs.map +0 -1
  40. package/dist/_chunks/index-db00ad50.cjs.map +0 -1
  41. package/dist/_chunks/resolveBuildContext-e938cee6.cjs.map +0 -1
  42. 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.1",
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 --experimental-loader ./scripts/_experimental-loader.js -r esbuild-register scripts/build",
44
- "check:pkg": "node --experimental-loader ./scripts/_experimental-loader.js -r esbuild-register scripts/check",
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 --experimental-loader ./scripts/_experimental-loader.js -r esbuild-register scripts/watch"
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
- const ctx = await resolveBuildContext({config, cwd, emitDeclarationOnly, pkg, strict, tsconfig})
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: {cwd: string}): Promise<PackageJSON> {
10
- try {
11
- const pkg = await loadPkg(options)
8
+ export async function loadPkgWithReporting(options: {
9
+ cwd: string
10
+ logger: Logger
11
+ }): Promise<PackageJSON> {
12
+ const {cwd, logger} = options
12
13
 
13
- if (pkg.type === 'commonjs') {
14
- console.warn(
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
- console.error(
20
+ logger.error(
30
21
  [
31
- `${chalk.red('fail')} \`${formatPath(issue.path)}\` `,
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
- console.error(err)
30
+ logger.error(err)
40
31
  }
41
32
 
42
33
  process.exit(1)
package/src/node/index.ts CHANGED
@@ -1,6 +1,7 @@
1
+ export * from './build'
2
+ export * from './check'
1
3
  export * from './core'
4
+ export * from './logger'
2
5
  export * from './resolveBuildTasks'
3
6
  export * from './tasks'
4
- export * from './build'
5
- export * from './check'
6
7
  export * from './watch'
@@ -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, any> = {}
34
+ const tree: Record<string, unknown> = {type: chalk.yellow(pkg.type)}
35
35
 
36
36
  if (pkg.bin) {
37
- tree.bin = pkg.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
- exp.default = fileInfo(entry.default)
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 {config, cwd, emitDeclarationOnly = false, pkg, strict, tsconfig: tsconfigPath} = options
50
- const logger = createLogger()
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)
@@ -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(` ${msg}`)
8
+ console.log(msg)
9
9
 
10
10
  return {
11
11
  complete: () => {
12
- console.log(`${chalk.green('ok ')} ${chalk.gray(`${Date.now() - startTime}ms`)}`)
12
+ console.log(`${chalk.green('[success]')} ${chalk.gray(`${Date.now() - startTime}ms`)}`)
13
13
  },
14
14
  error: () => {
15
- console.log(`${chalk.red(`failed`)} ${chalk.gray(`${Date.now() - startTime}ms`)}`)
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
- `build type definitions`,
14
- ...task.entries.map(
15
- (entry) =>
16
- ` ${chalk.blue(entry.importId)}: ${entry.sourcePath} -> ${entry.targetPath}`
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
- `build javascript files (target ${task.target.join(' + ')}, format ${
15
- task.format
16
- })\n ${task.entries
17
- .map((e) => `${chalk.blue(path.join(ctx.pkg.name, e.path))}: ${e.source} -> ${e.output}`)
18
- .join('\n ')}`,
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
- async function execPromise(ctx: BuildContext, task: RollupTask) {
40
- const {files, distPath} = ctx
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 {inputOptions, outputOptions} = resolveRollupConfig(ctx, task)
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
- console.log = () => undefined
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
- if (!warning.code || !['CIRCULAR_DEPENDENCY'].includes(warning.code)) {
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
- console.log = _console.log
71
- console.warn = _console.warn
72
- console.error = _console.error
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') {
@@ -58,7 +58,6 @@ export const rollupWatchTask: TaskHandler<RollupWatchTask, RollupWatcherEvent> =
58
58
  }
59
59
 
60
60
  if (event.code === 'ERROR') {
61
- // logger.log('')
62
61
  logger.error(event.code, event)
63
62
 
64
63
  return
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 configFiles$ = await watchConfigFiles({cwd})
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: {cwd: string}): Promise<Observable<string[]>> {
9
- const {cwd} = options
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
- /* eslint-disable no-console */
37
- console.log(
39
+ logger.log(
38
40
  '--------------------------------------------------------------------------------'
39
41
  )
40
- console.log(chalk.blue('info '), path.relative(cwd, fileEvent.file), 'changed')
41
- console.log('')
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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"}