@sanity/pkg-utils 1.3.1 → 1.5.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.
Files changed (104) hide show
  1. package/README.md +8 -0
  2. package/dist/__printPackageTree-3ff3ecd3.cjs +76 -0
  3. package/dist/__printPackageTree-3ff3ecd3.cjs.map +1 -0
  4. package/dist/__resolveBuildContext-85cfca8d.cjs +337 -0
  5. package/dist/__resolveBuildContext-85cfca8d.cjs.map +1 -0
  6. package/dist/_build-683d9922.cjs +168 -0
  7. package/dist/_build-683d9922.cjs.map +1 -0
  8. package/dist/_buildAction-f593323a.cjs +44 -0
  9. package/dist/_buildAction-f593323a.cjs.map +1 -0
  10. package/dist/_check-6843c26d.cjs +118 -0
  11. package/dist/_check-6843c26d.cjs.map +1 -0
  12. package/dist/_checkAction-0bca6a14.cjs +29 -0
  13. package/dist/_checkAction-0bca6a14.cjs.map +1 -0
  14. package/dist/_index-5765fada.cjs +584 -0
  15. package/dist/_index-5765fada.cjs.map +1 -0
  16. package/dist/_watch-ec1b35d6.cjs +217 -0
  17. package/dist/_watch-ec1b35d6.cjs.map +1 -0
  18. package/dist/_watchAction-a388fc00.cjs +43 -0
  19. package/dist/_watchAction-a388fc00.cjs.map +1 -0
  20. package/dist/cli.cjs +14 -31
  21. package/dist/cli.cjs.map +1 -1
  22. package/dist/index.cjs +43 -16
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.ts +282 -152
  25. package/dist/index.js +1055 -5198
  26. package/dist/index.js.map +1 -1
  27. package/package.json +37 -10
  28. package/src/cli/buildAction.ts +8 -0
  29. package/src/cli/checkAction.ts +9 -0
  30. package/src/cli/index.ts +42 -0
  31. package/src/cli/watchAction.ts +8 -0
  32. package/src/{core → node/_core}/_defaults.ts +1 -3
  33. package/src/{core → node/_core}/_isRecord.ts +1 -3
  34. package/src/{core → node/_core}/config/_loadConfig.ts +1 -3
  35. package/src/node/_core/config/_resolveConfigProperty.ts +15 -0
  36. package/src/{core → node/_core}/config/defineConfig.ts +1 -3
  37. package/src/{core → node/_core}/config/index.ts +0 -0
  38. package/src/node/_core/config/types.ts +69 -0
  39. package/src/node/_core/contexts/buildContext.ts +34 -0
  40. package/src/node/_core/contexts/index.ts +1 -0
  41. package/src/{core → node/_core}/index.ts +2 -0
  42. package/src/node/_core/pkg/_loadPkg.ts +55 -0
  43. package/src/node/_core/pkg/_loadPkgWithReporting.ts +29 -0
  44. package/src/node/_core/pkg/_parseExports.ts +45 -0
  45. package/src/{core → node/_core}/pkg/_types.ts +16 -5
  46. package/src/{core → node/_core}/pkg/index.ts +1 -0
  47. package/src/{build/tasks/dts → node/_core/ts}/_loadTSConfig.ts +1 -0
  48. package/src/node/_core/ts/index.ts +1 -0
  49. package/src/node/_getFilesize.ts +8 -0
  50. package/src/node/_globFiles.ts +5 -0
  51. package/src/node/_printExtractMessages.ts +56 -0
  52. package/src/node/_printPackageTree.ts +72 -0
  53. package/src/{build/_parseWebTarget.ts → node/_resolveBrowserTarget.ts} +2 -2
  54. package/src/{build/_parseBrowserslistVersions.ts → node/_resolveBrowserslistVersions.ts} +1 -1
  55. package/src/node/_resolveBuildContext.ts +104 -0
  56. package/src/node/_resolveBuildTasks.ts +129 -0
  57. package/src/{build/_parseNodeTarget.ts → node/_resolveNodeTarget.ts} +2 -2
  58. package/src/node/_resolveWatchTasks.ts +129 -0
  59. package/src/node/_spinner.ts +26 -0
  60. package/src/node/_tasks/_types.ts +57 -0
  61. package/src/node/_tasks/dts/_DtsError.ts +11 -0
  62. package/src/{build/tasks → node/_tasks}/dts/_buildTypes.ts +30 -16
  63. package/src/node/_tasks/dts/_createApiExtractorConfig.ts +41 -0
  64. package/src/{build/tasks → node/_tasks}/dts/_createTSDocConfig.ts +2 -6
  65. package/src/node/_tasks/dts/_doExtract.ts +57 -0
  66. package/src/node/_tasks/dts/_dtsTask.ts +40 -0
  67. package/src/node/_tasks/dts/_dtsWatchTask.ts +43 -0
  68. package/src/node/_tasks/dts/_extractTypes.ts +164 -0
  69. package/src/node/_tasks/dts/_types.ts +25 -0
  70. package/src/node/_tasks/dts/index.ts +3 -0
  71. package/src/node/_tasks/index.ts +19 -0
  72. package/src/node/_tasks/rollup/_resolveRollupConfig.ts +132 -0
  73. package/src/node/_tasks/rollup/_rollupTask.ts +73 -0
  74. package/src/node/_tasks/rollup/_rollupWatchTask.ts +78 -0
  75. package/src/node/_tasks/rollup/index.ts +2 -0
  76. package/src/node/_watchConfigFiles.ts +52 -0
  77. package/src/node/_watchFiles.ts +29 -0
  78. package/src/node/build.ts +47 -0
  79. package/src/node/check.ts +136 -0
  80. package/src/node/index.ts +6 -0
  81. package/src/node/watch.ts +56 -0
  82. package/dist/_build-5bf997de.cjs +0 -5549
  83. package/dist/_build-5bf997de.cjs.map +0 -1
  84. package/src/build/_parseTasks.ts +0 -87
  85. package/src/build/_types.ts +0 -26
  86. package/src/build/build.ts +0 -101
  87. package/src/build/index.ts +0 -2
  88. package/src/build/tasks/_types.ts +0 -8
  89. package/src/build/tasks/dts/_createApiExtractorConfig.ts +0 -88
  90. package/src/build/tasks/dts/_extractTypes.ts +0 -100
  91. package/src/build/tasks/dts/dts.ts +0 -59
  92. package/src/build/tasks/dts/index.ts +0 -1
  93. package/src/build/tasks/extract/_extractTask.ts +0 -49
  94. package/src/build/tasks/extract/index.ts +0 -1
  95. package/src/build/tasks/index.ts +0 -4
  96. package/src/build/tasks/rollup/_resolveRollupConfig.ts +0 -95
  97. package/src/build/tasks/rollup/index.ts +0 -1
  98. package/src/build/tasks/rollup/rollup.ts +0 -96
  99. package/src/cli.ts +0 -25
  100. package/src/core/config/_resolveConfigProperty.ts +0 -14
  101. package/src/core/config/types.ts +0 -52
  102. package/src/core/pkg/_loadPkg.ts +0 -13
  103. package/src/core/pkg/_parseExports.ts +0 -40
  104. package/src/index.ts +0 -2
@@ -2,18 +2,14 @@ import {readFile} from 'fs/promises'
2
2
  import {TSDocConfigFile} from '@microsoft/tsdoc-config'
3
3
  import {parse} from 'jsonc-parser'
4
4
 
5
- /**
6
- * @public
7
- */
5
+ /** @public */
8
6
  export interface TSDocCustomTag {
9
7
  name: string
10
8
  syntaxKind: 'block' | 'modifier'
11
9
  allowMultiple?: boolean
12
10
  }
13
11
 
14
- /**
15
- * @internal
16
- */
12
+ /** @internal */
17
13
  export async function _createTSDocConfig(opts: {
18
14
  customTags: TSDocCustomTag[]
19
15
  }): Promise<TSDocConfigFile | undefined> {
@@ -0,0 +1,57 @@
1
+ import path from 'path'
2
+ import {promisify} from 'util'
3
+ import rimrafCallback from 'rimraf'
4
+ import {_BuildContext} from '../../_core'
5
+ import {_buildTypes} from './_buildTypes'
6
+ import {_DtsError} from './_DtsError'
7
+ import {_extractTypes} from './_extractTypes'
8
+ import {_DtsResult, _DtsTask, _DtsWatchTask} from './_types'
9
+
10
+ const rimraf = promisify(rimrafCallback)
11
+
12
+ export async function _doExtract(
13
+ ctx: _BuildContext,
14
+ task: _DtsTask | _DtsWatchTask
15
+ ): Promise<_DtsResult> {
16
+ const {config, cwd, dist, files, ts} = ctx
17
+
18
+ if (!ts.config || !ts.configPath) return {type: 'dts', messages: []}
19
+
20
+ const sourcePath = task.sourcePath
21
+ const exportPath = task.exportPath === '.' ? './index' : task.exportPath
22
+ const distPath = path.resolve(cwd, dist)
23
+ const filePath = path.relative(distPath, path.resolve(cwd, task.targetPath))
24
+
25
+ const tmpDirPath = path.resolve(distPath, '__dts__')
26
+ const tmpDir = {
27
+ path: tmpDirPath,
28
+ removeCallback: () => rimraf(tmpDirPath),
29
+ }
30
+
31
+ const types = await _buildTypes({
32
+ cwd,
33
+ outDir: tmpDir.path,
34
+ sourcePath,
35
+ tsconfig: ts.config,
36
+ })
37
+
38
+ const {messages} = await _extractTypes({
39
+ cwd,
40
+ exportPath,
41
+ files,
42
+ filePath,
43
+ projectPath: cwd,
44
+ rules: config?.extract?.rules,
45
+ sourcePath: types.path,
46
+ tsconfigPath: path.resolve(cwd, ts.configPath),
47
+ distPath,
48
+ })
49
+
50
+ await tmpDir.removeCallback()
51
+
52
+ if (messages.some((msg) => msg.logLevel === 'error')) {
53
+ throw new _DtsError('encountered errors when extracting types', messages)
54
+ }
55
+
56
+ return {type: 'dts', messages}
57
+ }
@@ -0,0 +1,40 @@
1
+ import chalk from 'chalk'
2
+ import {Observable} from 'rxjs'
3
+ import {_printExtractMessages} from '../../_printExtractMessages'
4
+ import {_TaskHandler} from '../_types'
5
+ import {_doExtract} from './_doExtract'
6
+ import {_DtsError} from './_DtsError'
7
+ import {_DtsResult, _DtsTask} from './_types'
8
+
9
+ /** @internal */
10
+ export const _dtsTask: _TaskHandler<_DtsTask, _DtsResult> = {
11
+ name: (_ctx, task) =>
12
+ [
13
+ `build type definitions`,
14
+ ` ${chalk.blue(task.importId)}: ${task.sourcePath} -> ${task.targetPath}`,
15
+ ].join('\n'),
16
+ exec: (ctx, task) => {
17
+ return new Observable((observer) => {
18
+ _doExtract(ctx, task)
19
+ .then((result) => {
20
+ observer.next(result)
21
+ observer.complete()
22
+ })
23
+ .catch((err) => {
24
+ observer.error(err)
25
+ })
26
+ })
27
+ },
28
+ complete: (ctx, _task, result) => {
29
+ _printExtractMessages(ctx, result.messages)
30
+ },
31
+ error: (ctx, _task, err) => {
32
+ const {logger} = ctx
33
+
34
+ if (err instanceof _DtsError) {
35
+ _printExtractMessages(ctx, err.messages)
36
+ } else if (err instanceof Error) {
37
+ logger.error(err)
38
+ }
39
+ },
40
+ }
@@ -0,0 +1,43 @@
1
+ import chalk from 'chalk'
2
+ import {Observable} from 'rxjs'
3
+ import {_printExtractMessages} from '../../_printExtractMessages'
4
+ import {_TaskHandler} from '../_types'
5
+ import {_doExtract} from './_doExtract'
6
+ import {_DtsError} from './_DtsError'
7
+ import {_DtsResult, _DtsWatchTask} from './_types'
8
+
9
+ /** @internal */
10
+ export const _dtsWatchTask: _TaskHandler<_DtsWatchTask, _DtsResult> = {
11
+ name: (_ctx, task) =>
12
+ [
13
+ `build type definitions`,
14
+ ` ${chalk.blue(task.importId)}: ${task.sourcePath} -> ${task.targetPath}`,
15
+ ].join('\n'),
16
+ exec: (ctx, task) => {
17
+ return new Observable((observer) => {
18
+ _doExtract(ctx, task)
19
+ .then((result) => {
20
+ observer.next(result)
21
+ observer.complete()
22
+ })
23
+ .catch((err) => observer.error(err))
24
+ })
25
+ },
26
+ complete: (ctx, _task, result) => {
27
+ const {logger} = ctx
28
+
29
+ _printExtractMessages(ctx, result.messages)
30
+
31
+ logger.warn('watching typescript definitions is currently not supported')
32
+ logger.log()
33
+ },
34
+ error: (ctx, _task, err) => {
35
+ const {logger} = ctx
36
+
37
+ if (err instanceof _DtsError) {
38
+ _printExtractMessages(ctx, err.messages)
39
+ } else if (err instanceof Error) {
40
+ logger.error(err)
41
+ }
42
+ },
43
+ }
@@ -0,0 +1,164 @@
1
+ import fs from 'fs/promises'
2
+ import path from 'path'
3
+ import {
4
+ Extractor,
5
+ ExtractorConfig,
6
+ ExtractorLogLevel,
7
+ ExtractorMessage,
8
+ ExtractorResult,
9
+ IExtractorMessagesConfig,
10
+ } from '@microsoft/api-extractor'
11
+ import mkdirp from 'mkdirp'
12
+ import prettier from 'prettier'
13
+ import {PkgRuleLevel, PkgConfigOptions, _BuildFile} from '../../_core'
14
+ import {_createApiExtractorConfig} from './_createApiExtractorConfig'
15
+ import {_createTSDocConfig} from './_createTSDocConfig'
16
+
17
+ const _LOG_LEVELS: Record<PkgRuleLevel, ExtractorLogLevel> = {
18
+ error: 'error' as ExtractorLogLevel.Error,
19
+ info: 'info' as ExtractorLogLevel.Info,
20
+ off: 'none' as ExtractorLogLevel.None,
21
+ warn: 'warning' as ExtractorLogLevel.Warning,
22
+ }
23
+
24
+ export async function _extractTypes(options: {
25
+ cwd: string
26
+ distPath: string
27
+ exportPath: string
28
+ filePath: string
29
+ files: _BuildFile[]
30
+ projectPath: string
31
+ rules?: NonNullable<PkgConfigOptions['extract']>['rules']
32
+ sourcePath: string
33
+ tsconfigPath: string
34
+ }): Promise<{extractorResult: ExtractorResult; messages: ExtractorMessage[]}> {
35
+ const {distPath, exportPath, files, filePath, projectPath, rules, sourcePath, tsconfigPath} =
36
+ options
37
+
38
+ const tsdocConfigFile = await _createTSDocConfig({
39
+ customTags: [],
40
+ })
41
+
42
+ function _ruleToLogLevel(
43
+ key: keyof NonNullable<NonNullable<PkgConfigOptions['extract']>['rules']>,
44
+ defaultLevel?: ExtractorLogLevel
45
+ ) {
46
+ const r = rules?.[key]
47
+
48
+ return (r ? _LOG_LEVELS[r] : defaultLevel || 'warning') as ExtractorLogLevel
49
+ }
50
+
51
+ const messagesConfig: IExtractorMessagesConfig = {
52
+ compilerMessageReporting: {
53
+ default: {
54
+ logLevel: 'warning' as ExtractorLogLevel,
55
+ },
56
+ },
57
+
58
+ extractorMessageReporting: {
59
+ default: {
60
+ logLevel: 'warning' as ExtractorLogLevel,
61
+ addToApiReportFile: false,
62
+ },
63
+
64
+ 'ae-forgotten-export': {
65
+ logLevel: _ruleToLogLevel('ae-forgotten-export', 'error' as ExtractorLogLevel),
66
+ addToApiReportFile: false,
67
+ },
68
+
69
+ 'ae-incompatible-release-tags': {
70
+ logLevel: _ruleToLogLevel('ae-incompatible-release-tags', 'error' as ExtractorLogLevel),
71
+ addToApiReportFile: false,
72
+ },
73
+
74
+ 'ae-internal-missing-underscore': {
75
+ logLevel: _ruleToLogLevel('ae-internal-missing-underscore'),
76
+ addToApiReportFile: false,
77
+ },
78
+
79
+ 'ae-missing-release-tag': {
80
+ logLevel: _ruleToLogLevel('ae-missing-release-tag', 'error' as ExtractorLogLevel),
81
+ addToApiReportFile: false,
82
+ },
83
+
84
+ 'ae-wrong-input-file-type': {
85
+ logLevel: 'none' as ExtractorLogLevel,
86
+ addToApiReportFile: false,
87
+ },
88
+ },
89
+
90
+ tsdocMessageReporting: {
91
+ default: {
92
+ logLevel: 'warning' as ExtractorLogLevel,
93
+ addToApiReportFile: false,
94
+ },
95
+
96
+ // 'tsdoc-link-tag-unescaped-text': {
97
+ // logLevel: 'warning' as ExtractorLogLevel,
98
+ // addToApiReportFile: false
99
+ // },
100
+
101
+ // 'tsdoc-unsupported-tag': {
102
+ // logLevel: 'none' as ExtractorLogLevel,
103
+ // addToApiReportFile: false
104
+ // },
105
+
106
+ // 'tsdoc-undefined-tag': {
107
+ // logLevel: 'none' as ExtractorLogLevel,
108
+ // addToApiReportFile: false
109
+ // }
110
+ },
111
+ }
112
+
113
+ const extractorConfig: ExtractorConfig = ExtractorConfig.prepare({
114
+ configObject: _createApiExtractorConfig({
115
+ distPath,
116
+ exportPath,
117
+ filePath,
118
+ messages: messagesConfig,
119
+ projectPath,
120
+ sourcePath,
121
+ tsconfigPath,
122
+ }),
123
+ configObjectFullPath: undefined,
124
+ tsdocConfigFile,
125
+ packageJsonFullPath: path.resolve(projectPath, 'package.json'),
126
+ })
127
+
128
+ const messages: ExtractorMessage[] = []
129
+
130
+ // Invoke API Extractor
131
+ const extractorResult = Extractor.invoke(extractorConfig, {
132
+ // Equivalent to the "--local" command-line parameter
133
+ localBuild: true,
134
+ // Equivalent to the "--verbose" command-line parameter
135
+ showVerboseMessages: true,
136
+ // handle messages
137
+ messageCallback(message: ExtractorMessage) {
138
+ messages.push(message)
139
+ message.handled = true
140
+ },
141
+ })
142
+
143
+ const typesPath = path.resolve(distPath, filePath)
144
+ const typesBuf = await fs.readFile(typesPath)
145
+ const prettierConfig = await prettier.resolveConfig(typesPath)
146
+
147
+ await mkdirp(path.dirname(typesPath))
148
+
149
+ await fs.writeFile(
150
+ typesPath,
151
+ prettier.format(typesBuf.toString(), {
152
+ ...prettierConfig,
153
+ filepath: typesPath,
154
+ })
155
+ )
156
+
157
+ // Add to `files` in context
158
+ files.push({
159
+ type: 'types',
160
+ path: typesPath,
161
+ })
162
+
163
+ return {extractorResult, messages}
164
+ }
@@ -0,0 +1,25 @@
1
+ import {ExtractorMessage} from '@microsoft/api-extractor'
2
+
3
+ /** @internal */
4
+ export interface _DtsWatchTask {
5
+ type: 'watch:dts'
6
+ exportPath: string
7
+ importId: string
8
+ sourcePath: string
9
+ targetPath: string
10
+ }
11
+
12
+ /** @internal */
13
+ export interface _DtsTask {
14
+ type: 'build:dts'
15
+ exportPath: string
16
+ importId: string
17
+ sourcePath: string
18
+ targetPath: string
19
+ }
20
+
21
+ /** @internal */
22
+ export interface _DtsResult {
23
+ type: 'dts'
24
+ messages: ExtractorMessage[]
25
+ }
@@ -0,0 +1,3 @@
1
+ export * from './_dtsTask'
2
+ export * from './_dtsWatchTask'
3
+ export * from './_types'
@@ -0,0 +1,19 @@
1
+ import {_BuildTaskHandlers, _WatchTaskHandlers} from './_types'
2
+ import {_dtsTask, _dtsWatchTask} from './dts'
3
+ import {_rollupTask, _rollupWatchTask} from './rollup'
4
+
5
+ export * from './_types'
6
+ export * from './dts'
7
+ export * from './rollup'
8
+
9
+ /** @internal */
10
+ export const _buildTaskHandlers: _BuildTaskHandlers = {
11
+ 'build:dts': _dtsTask,
12
+ 'build:js': _rollupTask,
13
+ }
14
+
15
+ /** @internal */
16
+ export const _watchTaskHandlers: _WatchTaskHandlers = {
17
+ 'watch:dts': _dtsWatchTask,
18
+ 'watch:js': _rollupWatchTask,
19
+ }
@@ -0,0 +1,132 @@
1
+ import path from 'path'
2
+ import alias from '@rollup/plugin-alias'
3
+ import commonjs from '@rollup/plugin-commonjs'
4
+ import json from '@rollup/plugin-json'
5
+ import {nodeResolve} from '@rollup/plugin-node-resolve'
6
+ import replace from '@rollup/plugin-replace'
7
+ import {InputOptions, OutputOptions} from 'rollup'
8
+ import esbuild from 'rollup-plugin-esbuild'
9
+ import {_BuildContext} from '../../_core'
10
+ import {_RollupTask, _RollupWatchTask} from '../_types'
11
+
12
+ export interface _RollupConfig {
13
+ inputOptions: InputOptions
14
+ outputOptions: OutputOptions
15
+ }
16
+
17
+ /** @internal */
18
+ export function _resolveRollupConfig(
19
+ ctx: _BuildContext,
20
+ buildTask: _RollupTask | _RollupWatchTask
21
+ ): _RollupConfig {
22
+ const {format, runtime, target} = buildTask
23
+ const {config, cwd, external, dist: outDir, pkg, ts} = ctx
24
+ const outputExt = format === 'commonjs' ? '.cjs' : pkg.type === 'module' ? '.mjs' : '.js'
25
+
26
+ const pathAliases = Object.fromEntries(
27
+ Object.entries(ts.config?.options.paths || {}).map(([key, val]) => {
28
+ return [key, path.resolve(cwd, ts.config?.options.baseUrl || '.', val[0])]
29
+ })
30
+ )
31
+
32
+ const entries = buildTask.entries.map((entry) => {
33
+ return {
34
+ ...entry,
35
+ name: path.relative(outDir, entry.output).replace(/\.[^/.]+$/, ''),
36
+ }
37
+ }, {})
38
+
39
+ return {
40
+ inputOptions: {
41
+ context: cwd,
42
+
43
+ external: (id) => {
44
+ const idParts = id.split('/')
45
+
46
+ const name = idParts[0].startsWith('@') ? `${idParts[0]}/${idParts[1]}` : idParts[0]
47
+
48
+ if (name && external.includes(name)) {
49
+ return true
50
+ }
51
+
52
+ return false
53
+ },
54
+
55
+ input: entries.reduce<{[entryAlias: string]: string}>((acc, entry) => {
56
+ return {...acc, [entry.name]: entry.source}
57
+ }, {}),
58
+
59
+ onwarn(warning, rollupWarn) {
60
+ if (!warning.code || !['CIRCULAR_DEPENDENCY'].includes(warning.code)) {
61
+ rollupWarn(warning)
62
+ }
63
+ },
64
+
65
+ plugins: [
66
+ replace({
67
+ preventAssignment: true,
68
+ values: {
69
+ ...(pkg.name === '@sanity/pkg-utils'
70
+ ? {}
71
+ : {
72
+ 'process.env.PKG_FILE_PATH': (arg) => {
73
+ const sourcePath = './' + path.relative(cwd, arg)
74
+ const entry = entries.find((e) => e.source === sourcePath)
75
+
76
+ if (!entry) {
77
+ throw new Error(`could not find source entry: ${sourcePath}`)
78
+ }
79
+
80
+ return JSON.stringify(
81
+ path.relative(cwd, path.resolve(outDir, entry.name + outputExt))
82
+ )
83
+ },
84
+ 'process.env.PKG_FORMAT': JSON.stringify(format),
85
+ 'process.env.PKG_RUNTIME': JSON.stringify(runtime),
86
+ 'process.env.PKG_VERSION': JSON.stringify(process.env.PKG_VERSION || pkg.version),
87
+ }),
88
+ },
89
+ }),
90
+ alias({
91
+ entries: {...pathAliases},
92
+ }),
93
+ nodeResolve({
94
+ // mainFields: ['module', 'jsnext', 'main'],
95
+ browser: runtime === 'browser',
96
+ // exportConditions: [runtime === 'node' ? 'node' : 'browser'],
97
+ extensions: ['.cjs', '.mjs', '.js', '.jsx', '.json', '.node'],
98
+ preferBuiltins: true, // runtime === 'node',
99
+ }),
100
+ commonjs({
101
+ esmExternals: false,
102
+ extensions: ['.js'],
103
+ // include: /\/node_modules\//,
104
+ // requireReturnsDefault: 'namespace',
105
+ }),
106
+ json(),
107
+ esbuild({
108
+ minify: config?.minify ?? true,
109
+ jsx: 'transform', // default, or 'preserve'
110
+ jsxFactory: 'React.createElement',
111
+ jsxFragment: 'React.Fragment',
112
+ target,
113
+ tsconfig: ctx.ts.configPath || 'tsconfig.json', // 'tsconfig.json', // default
114
+ }),
115
+ ],
116
+
117
+ treeshake: {
118
+ propertyReadSideEffects: false,
119
+ },
120
+ },
121
+ outputOptions: {
122
+ chunkFileNames: () => `_[name]-[hash]${outputExt}`,
123
+ dir: outDir,
124
+ entryFileNames: () => `[name]${outputExt}`,
125
+ format,
126
+ // esModule: true,
127
+ exports: 'auto',
128
+ // freeze: true,
129
+ sourcemap: config?.sourcemap ?? true,
130
+ },
131
+ }
132
+ }
@@ -0,0 +1,73 @@
1
+ /* eslint-disable no-console */
2
+
3
+ import path from 'path'
4
+ import chalk from 'chalk'
5
+ import {rollup} from 'rollup'
6
+ import {Observable} from 'rxjs'
7
+ import {_BuildContext} from '../../_core'
8
+ import {_RollupTask, _TaskHandler} from '../_types'
9
+ import {_resolveRollupConfig} from './_resolveRollupConfig'
10
+
11
+ /** @internal */
12
+ export const _rollupTask: _TaskHandler<_RollupTask> = {
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 ')}`,
19
+ exec: (ctx, task) => {
20
+ return new Observable((observer) => {
21
+ _execPromise(ctx, task)
22
+ .then((result) => {
23
+ observer.next(result)
24
+ observer.complete()
25
+ })
26
+ .catch((err) => observer.error(err))
27
+ })
28
+ },
29
+ complete: () => {
30
+ //
31
+ },
32
+ error: (_ctx, _task, err) => {
33
+ if (err instanceof Error) {
34
+ console.log(err)
35
+ }
36
+ },
37
+ }
38
+
39
+ async function _execPromise(ctx: _BuildContext, task: _RollupTask) {
40
+ const {files, dist: outDir} = ctx
41
+
42
+ const {inputOptions, outputOptions} = _resolveRollupConfig(ctx, task)
43
+
44
+ // Create bundle
45
+ const bundle = await rollup(inputOptions)
46
+
47
+ // an array of file names this bundle depends on
48
+ // console.log(bundle.watchFiles)
49
+
50
+ // generate output specific code in-memory
51
+ // you can call this function multiple times on the same bundle object
52
+ const {output} = await bundle.generate(outputOptions)
53
+
54
+ for (const chunkOrAsset of output) {
55
+ if (chunkOrAsset.type === 'asset') {
56
+ files.push({
57
+ type: 'asset',
58
+ path: path.resolve(outDir, chunkOrAsset.fileName),
59
+ })
60
+ } else {
61
+ files.push({
62
+ type: 'chunk',
63
+ path: path.resolve(outDir, chunkOrAsset.fileName),
64
+ })
65
+ }
66
+ }
67
+
68
+ // or write the bundle to disk
69
+ await bundle.write(outputOptions)
70
+
71
+ // closes the bundle
72
+ await bundle.close()
73
+ }
@@ -0,0 +1,78 @@
1
+ import path from 'path'
2
+ import chalk from 'chalk'
3
+ import {RollupWatcherEvent, RollupWatchOptions, watch as rollupWatch} from 'rollup'
4
+ import {Observable} from 'rxjs'
5
+ import {_RollupWatchTask, _TaskHandler} from '../_types'
6
+ import {_resolveRollupConfig} from './_resolveRollupConfig'
7
+
8
+ /** @internal */
9
+ export const _rollupWatchTask: _TaskHandler<_RollupWatchTask, RollupWatcherEvent> = {
10
+ name: (ctx, task) =>
11
+ `build javascript files (target ${task.target.join(' + ')}, format ${
12
+ task.format
13
+ })\n ${task.entries
14
+ .map((e) => `${chalk.blue(path.join(ctx.pkg.name, e.path))}: ${e.source} -> ${e.output}`)
15
+ .join('\n ')}`,
16
+ exec: (ctx, task) => {
17
+ const {inputOptions, outputOptions} = _resolveRollupConfig(ctx, task)
18
+
19
+ return new Observable((observer) => {
20
+ const watchOptions: RollupWatchOptions = {
21
+ ...inputOptions,
22
+ output: outputOptions,
23
+ }
24
+
25
+ const watcher = rollupWatch(watchOptions)
26
+
27
+ watcher.on('event', (event) => {
28
+ observer.next(event)
29
+ })
30
+
31
+ return () => {
32
+ watcher.close()
33
+ }
34
+ })
35
+ },
36
+ complete: (ctx, task, event) => {
37
+ const {logger} = ctx
38
+
39
+ if (event.code === 'BUNDLE_END') {
40
+ logger.success(
41
+ `build javascript files (target ${task.target.join(' + ')}, format ${
42
+ task.format
43
+ })\n ${task.entries
44
+ .map((e) => `${chalk.blue(path.join(ctx.pkg.name, e.path))}: ${e.source} -> ${e.output}`)
45
+ .join('\n ')}`
46
+ )
47
+ logger.log('')
48
+
49
+ return
50
+ }
51
+
52
+ if (event.code === 'BUNDLE_START') {
53
+ return
54
+ }
55
+
56
+ if (event.code === 'END') {
57
+ return
58
+ }
59
+
60
+ if (event.code === 'ERROR') {
61
+ // logger.log('')
62
+ logger.error(event.code, event)
63
+
64
+ return
65
+ }
66
+
67
+ if (event.code === 'START') {
68
+ return
69
+ }
70
+ },
71
+ error: (ctx, _task, err) => {
72
+ const {logger} = ctx
73
+
74
+ if (err instanceof Error) {
75
+ logger.log(err)
76
+ }
77
+ },
78
+ }
@@ -0,0 +1,2 @@
1
+ export * from './_rollupTask'
2
+ export * from './_rollupWatchTask'