jiek 2.2.7 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/bin/build.cjs +2 -0
  2. package/bin/index.cjs +2 -0
  3. package/bin-helper/index.cjs +19 -31
  4. package/dist/.internal/.chunks/filterSupport.4rM7f6jB.cjs +114 -0
  5. package/dist/.internal/.chunks/filterSupport.BXWpLBpT.js +104 -0
  6. package/dist/{cli.js → .internal/.chunks/index.B6RQz1DZ.js} +1 -737
  7. package/dist/.internal/.chunks/index.BHuJRlvZ.js +9059 -0
  8. package/dist/.internal/.chunks/index.Daihq2aI.cjs +9071 -0
  9. package/dist/{cli.cjs → .internal/.chunks/index.DlHFuTjM.cjs} +1 -759
  10. package/dist/.internal/.chunks/loadConfig.CFfzkm_p.js +110 -0
  11. package/dist/.internal/.chunks/loadConfig.OOKddvHF.cjs +117 -0
  12. package/dist/{cli-only-build.cjs → .internal/bin/common.cjs} +225 -444
  13. package/dist/.internal/bin/common.d.cts +18 -0
  14. package/dist/.internal/bin/common.d.ts +18 -0
  15. package/dist/{cli-only-build.js → .internal/bin/common.js} +220 -438
  16. package/dist/.internal/bin/parseArgv.cjs +33 -0
  17. package/dist/.internal/bin/parseArgv.d.cts +5 -0
  18. package/dist/.internal/bin/parseArgv.d.ts +5 -0
  19. package/dist/.internal/bin/parseArgv.js +27 -0
  20. package/dist/.internal/bridge.cjs +30 -0
  21. package/dist/.internal/bridge.d.cts +39 -0
  22. package/dist/.internal/bridge.d.ts +39 -0
  23. package/dist/.internal/bridge.js +27 -0
  24. package/dist/.internal/rollup/base.cjs +10 -0
  25. package/dist/{cli-only-build.d.cts → .internal/rollup/base.d.cts} +8 -15
  26. package/dist/{cli-only-build.d.ts → .internal/rollup/base.d.ts} +8 -15
  27. package/dist/.internal/rollup/base.js +7 -0
  28. package/dist/.internal/rollup/bundle-analyzer.cjs +51 -0
  29. package/dist/.internal/rollup/bundle-analyzer.d.cts +92 -0
  30. package/dist/.internal/rollup/bundle-analyzer.d.ts +92 -0
  31. package/dist/.internal/rollup/bundle-analyzer.js +45 -0
  32. package/dist/.internal/utils/filterSupport.cjs +18 -0
  33. package/dist/.internal/utils/filterSupport.d.cts +15 -0
  34. package/dist/.internal/utils/filterSupport.d.ts +15 -0
  35. package/dist/.internal/utils/filterSupport.js +8 -0
  36. package/dist/.internal/utils/getInternalModuleName.cjs +5 -0
  37. package/dist/.internal/utils/getInternalModuleName.d.cts +3 -0
  38. package/dist/.internal/utils/getInternalModuleName.d.ts +3 -0
  39. package/dist/.internal/utils/getInternalModuleName.js +3 -0
  40. package/dist/.internal/utils/intersection.cjs +5 -0
  41. package/dist/.internal/utils/intersection.d.cts +3 -0
  42. package/dist/.internal/utils/intersection.d.ts +3 -0
  43. package/dist/.internal/utils/intersection.js +3 -0
  44. package/dist/.internal/utils/loadConfig.cjs +14 -0
  45. package/dist/.internal/utils/loadConfig.d.cts +10 -0
  46. package/dist/.internal/utils/loadConfig.d.ts +10 -0
  47. package/dist/.internal/utils/loadConfig.js +9 -0
  48. package/dist/.internal/utils/recursiveListFiles.cjs +19 -0
  49. package/dist/.internal/utils/recursiveListFiles.d.cts +3 -0
  50. package/dist/.internal/utils/recursiveListFiles.d.ts +3 -0
  51. package/dist/.internal/utils/recursiveListFiles.js +13 -0
  52. package/dist/.internal/utils/resolveExports.cjs +118 -0
  53. package/dist/.internal/utils/resolveExports.d.cts +26 -0
  54. package/dist/.internal/utils/resolveExports.d.ts +26 -0
  55. package/dist/.internal/utils/resolveExports.js +111 -0
  56. package/dist/.internal/utils/ts.cjs +68 -0
  57. package/dist/.internal/utils/ts.d.cts +3 -0
  58. package/dist/.internal/utils/ts.d.ts +3 -0
  59. package/dist/.internal/utils/ts.js +62 -0
  60. package/dist/bin/build.cjs +10 -0
  61. package/dist/bin/index.cjs +501 -0
  62. package/dist/index.d.cts +12 -114
  63. package/dist/index.d.ts +12 -114
  64. package/dist/rollup/index.cjs +280 -4573
  65. package/dist/rollup/index.d.cts +7 -1
  66. package/dist/rollup/index.d.ts +7 -1
  67. package/dist/rollup/index.js +268 -4558
  68. package/package.json +15 -23
  69. package/src/bin/build.cts +5 -0
  70. package/src/bin/common.ts +3 -0
  71. package/src/bin/index.cts +7 -0
  72. package/src/bridge.ts +1 -1
  73. package/src/commands/base.ts +3 -3
  74. package/src/commands/build/analyzer.ts +5 -5
  75. package/src/commands/build/client/analyzer.tsx +1 -1
  76. package/src/commands/build/client/index.ts +5 -7
  77. package/src/commands/build.ts +226 -211
  78. package/src/commands/meta.ts +1 -1
  79. package/src/commands/publish.ts +113 -32
  80. package/src/index.ts +6 -1
  81. package/src/rollup/base.ts +2 -2
  82. package/src/rollup/index.ts +321 -124
  83. package/src/rollup/plugins/with-external.ts +23 -0
  84. package/src/rollup/utils/externalResolver.ts +20 -8
  85. package/src/utils/checkDependency.ts +1 -1
  86. package/src/utils/filterSupport.ts +17 -16
  87. package/src/utils/getInternalModuleName.ts +5 -0
  88. package/src/utils/intersection.ts +1 -0
  89. package/src/utils/{recusiveListFiles.ts → recursiveListFiles.ts} +2 -2
  90. package/src/utils/{getExports.ts → resolveExports.ts} +16 -14
  91. package/bin/jiek-build.js +0 -16
  92. package/bin/jiek.js +0 -13
  93. package/cli/package.json +0 -1
  94. package/cli-only-build/package.json +0 -1
  95. package/dist/cli.d.cts +0 -14
  96. package/dist/cli.d.ts +0 -14
  97. package/src/cli-only-build.ts +0 -11
  98. package/src/cli.ts +0 -6
  99. /package/{src/bin/build.ts → .jiek-production-tag} +0 -0
  100. /package/src/{parseArgv.ts → bin/parseArgv.ts} +0 -0
@@ -7,15 +7,27 @@ import process from 'node:process'
7
7
  import { type BumperType, TAGS, bump } from '@jiek/utils/bumper'
8
8
  import { program } from 'commander'
9
9
  import detectIndent from 'detect-indent'
10
+ import type { Config } from 'jiek'
11
+ import type { JSONPath } from 'jsonc-parser'
10
12
  import { applyEdits, modify } from 'jsonc-parser'
11
13
 
12
- import type { ProjectsGraph } from '../utils/filterSupport'
13
- import { getSelectedProjectsGraph } from '../utils/filterSupport'
14
- import { getExports } from '../utils/getExports'
15
- import { loadConfig } from '../utils/loadConfig'
14
+ import type { ProjectsGraph } from '#~/utils/filterSupport'
15
+ import { getSelectedProjectsGraph } from '#~/utils/filterSupport'
16
+ import { loadConfig } from '#~/utils/loadConfig'
17
+ import type { ResolveExportsOptions } from '#~/utils/resolveExports'
18
+ import { resolveExports } from '#~/utils/resolveExports'
19
+
20
+ import { getInternalModuleName } from '#~/utils/getInternalModuleName'
16
21
  import { outdirDescription } from './descriptions'
17
22
 
18
23
  declare module 'jiek' {
24
+ interface ConfigExperimental {
25
+ /**
26
+ * Polyfill `imports` fields in package.json to local dependencies and exports fields.
27
+ * @default false
28
+ */
29
+ importsDowngrade?: boolean
30
+ }
19
31
  export interface Config {
20
32
  publish?: {
21
33
  /**
@@ -107,37 +119,71 @@ async function prepublish({ bumper }: {
107
119
  bumperEnv ? JSON.parse(bumperEnv) as string | boolean : false
108
120
  )
109
121
 
110
- const generateNewManifest = (dir: string, manifest: NonNullable<ProjectsGraph['value']>[string]) => {
111
- const { name, type, exports: entrypoints = {} } = manifest
122
+ const generateNewManifest = (
123
+ dir: string,
124
+ manifest: NonNullable<ProjectsGraph['value']>[string],
125
+ config: Config
126
+ ) => {
127
+ const {
128
+ name,
129
+ type,
130
+ exports: entrypoints,
131
+ imports: internalEntrypoints
132
+ } = manifest
112
133
  if (!name) {
113
134
  throw new Error(`package.json in ${dir} must have a name field`)
114
135
  }
115
136
 
116
137
  const pkgIsModule = type === 'module'
117
138
  const newManifest = { ...manifest }
118
- const [resolvedEntrypoints, exports, resolvedOutdir] = getExports({
119
- entrypoints,
139
+ const commonOptions = {
120
140
  pkgIsModule,
121
141
  pkgName: name,
122
- config: loadConfig(dir),
142
+ config,
123
143
  dir,
124
- defaultOutdir: outdir,
125
144
  noFilter: true,
126
145
  isPublish: true
127
- })
128
- newManifest.exports = {
129
- ...resolvedEntrypoints,
130
- ...exports
146
+ } satisfies Partial<ResolveExportsOptions>
147
+ let resolvedOutdir = outdir
148
+ if (entrypoints) {
149
+ const [resolvedEntrypoints, exports, _resolvedOutdir] = resolveExports({
150
+ entrypoints,
151
+ defaultOutdir: outdir,
152
+ ...commonOptions
153
+ })
154
+ newManifest.exports = {
155
+ ...resolvedEntrypoints,
156
+ ...exports
157
+ }
158
+ if (resolvedOutdir === outdir) {
159
+ resolvedOutdir = _resolvedOutdir
160
+ }
161
+ }
162
+ if (internalEntrypoints) {
163
+ const [resolvedInternalEntrypoints, imports, _resolvedOutdir] = resolveExports({
164
+ entrypoints: internalEntrypoints,
165
+ defaultOutdir: `${outdir}/.internal`,
166
+ ...commonOptions
167
+ })
168
+ newManifest.imports = {
169
+ ...resolvedInternalEntrypoints,
170
+ ...imports
171
+ }
172
+ if (resolvedOutdir === outdir) {
173
+ resolvedOutdir = _resolvedOutdir
174
+ }
131
175
  }
132
176
  return [newManifest, resolvedOutdir] as const
133
177
  }
134
178
 
135
179
  const generateNewPackageJSONString = ({
180
+ config,
136
181
  oldJSONString,
137
182
  oldJSON,
138
183
  manifest,
139
184
  formattingOptions
140
185
  }: {
186
+ config: Config
141
187
  oldJSONString: string
142
188
  oldJSON: Record<string, unknown>
143
189
  manifest: NonNullable<ProjectsGraph['value']>[string]
@@ -146,26 +192,35 @@ async function prepublish({ bumper }: {
146
192
  insertSpaces: boolean
147
193
  }
148
194
  }) => {
195
+ const internalModuleName = getInternalModuleName(manifest.name!)
196
+
149
197
  let newJSONString = oldJSONString
150
- newJSONString = applyEdits(
151
- newJSONString,
152
- modify(
198
+ const update = (path: JSONPath, value: unknown) => {
199
+ newJSONString = applyEdits(
153
200
  newJSONString,
154
- ['publishConfig', 'typesVersions'],
155
- {
156
- '<5.0': {
157
- '*': [
158
- '*',
159
- `./*`,
160
- `./*/index.d.ts`,
161
- `./*/index.d.mts`,
162
- `./*/index.d.cts`
163
- ]
164
- }
165
- },
166
- { formattingOptions }
201
+ modify(newJSONString, path, value, { formattingOptions })
167
202
  )
168
- )
203
+ }
204
+
205
+ update(['publishConfig', 'typesVersions'], {
206
+ '<5.0': {
207
+ '*': [
208
+ '*',
209
+ './*',
210
+ './*/index.d.ts',
211
+ './*/index.d.mts',
212
+ './*/index.d.cts'
213
+ ]
214
+ }
215
+ })
216
+ if (config.experimental?.importsDowngrade) {
217
+ update(['dependencies', internalModuleName], `file:./${outdir}/.internal`)
218
+ update(['dependenciesMeta', internalModuleName], {
219
+ 'injected': true
220
+ })
221
+ update(['imports'], undefined)
222
+ }
223
+
169
224
  for (const [key, value] of Object.entries(manifest)) {
170
225
  if (key === 'version') continue
171
226
  if (JSON.stringify(value) === JSON.stringify(oldJSON[key])) continue
@@ -273,7 +328,8 @@ async function prepublish({ bumper }: {
273
328
  }
274
329
 
275
330
  await forEachSelectedProjectsGraphEntries((dir, originalManifest) => {
276
- const [manifest, resolvedOutdir] = generateNewManifest(dir, originalManifest)
331
+ const config = loadConfig(dir)
332
+ const [manifest, resolvedOutdir] = generateNewManifest(dir, originalManifest, config)
277
333
  const resolveByDir = (...paths: string[]) => path.resolve(dir, ...paths)
278
334
 
279
335
  const oldJSONString = fs.readFileSync(resolveByDir('package.json'), 'utf-8')
@@ -298,6 +354,7 @@ async function prepublish({ bumper }: {
298
354
  )
299
355
 
300
356
  const newJSONString = generateNewPackageJSONString({
357
+ config,
301
358
  oldJSONString: modifyVersionPackageJSON,
302
359
  oldJSON: {
303
360
  ...oldJSON,
@@ -438,6 +495,30 @@ async function prepublish({ bumper }: {
438
495
  }
439
496
  throw new Error(`file type of ${path} is not supported`)
440
497
  }
498
+
499
+ if (config.experimental?.importsDowngrade && 'imports' in manifest && manifest.imports) {
500
+ fs.writeFileSync(
501
+ resolveByDir(resolvedOutdir, resolvedOutdir, '.internal', 'package.json'),
502
+ JSON.stringify(
503
+ {
504
+ name: getInternalModuleName(manifest.name!),
505
+ exports: JSON.parse(
506
+ JSON
507
+ .stringify(manifest.imports)
508
+ .replaceAll('#', './')
509
+ .replaceAll('~', '')
510
+ ) as Record<string, unknown>
511
+ },
512
+ null,
513
+ 2
514
+ )
515
+ )
516
+ }
517
+
518
+ const jiekProductionTag = path.resolve(resolvedOutdir, '.jiek-production-tag')
519
+ if (!fs.existsSync(jiekProductionTag)) {
520
+ fs.writeFileSync(jiekProductionTag, '')
521
+ }
441
522
  })
442
523
  }
443
524
 
package/src/index.ts CHANGED
@@ -2,6 +2,11 @@ import type {} from './commands/base'
2
2
  import type {} from './commands/build'
3
3
  import type {} from './commands/publish'
4
4
 
5
- export interface Config {}
5
+ export interface ConfigExperimental {
6
+ }
7
+
8
+ export interface Config {
9
+ experimental?: ConfigExperimental
10
+ }
6
11
 
7
12
  export const defineConfig = (config: Config) => config
@@ -54,9 +54,9 @@ export interface TemplateOptions {
54
54
  * When use esbuild type builder, it will inject `supported.import-attributes` option.
55
55
  * When use swc type builder, it will inject `jsc.experimental.keepImportAttributes` option.
56
56
  *
57
- * And it will auto set the rollup output externalImportAttributes and importAttributesKey options.
57
+ * And it will auto set the rollup output `externalImportAttributes` and `importAttributesKey` options.
58
58
  *
59
- * @default true
59
+ * @default false
60
60
  */
61
61
  keepImportAttributes?: boolean | 'assert'
62
62
  }