@sanity/pkg-utils 6.5.0 → 6.6.1
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-cjs/consoleSpy.cjs +11 -3
- package/dist/_chunks-cjs/consoleSpy.cjs.map +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/node/__snapshots__/strict.test.ts.snap +9 -0
- package/src/node/core/pkg/parseExports.ts +21 -30
- package/src/node/index.ts +7 -1
- package/src/node/strict.ts +18 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/pkg-utils",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.6.1",
|
|
4
4
|
"description": "Simple utilities for modern npm packages.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity-io",
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
"typescript": "5.4.5",
|
|
137
137
|
"vitest": "^1.5.0",
|
|
138
138
|
"vitest-github-actions-reporter": "^0.11.1",
|
|
139
|
-
"@sanity/pkg-utils": "6.
|
|
139
|
+
"@sanity/pkg-utils": "6.6.1"
|
|
140
140
|
},
|
|
141
141
|
"peerDependencies": {
|
|
142
142
|
"typescript": "5.4.x"
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`{'noPackageJsonTypings': 'error'}} 1`] = `
|
|
4
4
|
{
|
|
5
|
+
"alwaysPackageJsonFiles": "error",
|
|
6
|
+
"alwaysPackageJsonMain": "error",
|
|
7
|
+
"alwaysPackageJsonTypes": "error",
|
|
5
8
|
"noImplicitBrowsersList": "warn",
|
|
6
9
|
"noImplicitSideEffects": "warn",
|
|
7
10
|
"noPackageJsonTypings": "error",
|
|
@@ -10,6 +13,9 @@ exports[`{'noPackageJsonTypings': 'error'}} 1`] = `
|
|
|
10
13
|
|
|
11
14
|
exports[`{'noPackageJsonTypings': 'off'}} 1`] = `
|
|
12
15
|
{
|
|
16
|
+
"alwaysPackageJsonFiles": "error",
|
|
17
|
+
"alwaysPackageJsonMain": "error",
|
|
18
|
+
"alwaysPackageJsonTypes": "error",
|
|
13
19
|
"noImplicitBrowsersList": "warn",
|
|
14
20
|
"noImplicitSideEffects": "warn",
|
|
15
21
|
"noPackageJsonTypings": "off",
|
|
@@ -18,6 +24,9 @@ exports[`{'noPackageJsonTypings': 'off'}} 1`] = `
|
|
|
18
24
|
|
|
19
25
|
exports[`{'noPackageJsonTypings': 'warn'}} 1`] = `
|
|
20
26
|
{
|
|
27
|
+
"alwaysPackageJsonFiles": "error",
|
|
28
|
+
"alwaysPackageJsonMain": "error",
|
|
29
|
+
"alwaysPackageJsonTypes": "error",
|
|
21
30
|
"noImplicitBrowsersList": "warn",
|
|
22
31
|
"noImplicitSideEffects": "warn",
|
|
23
32
|
"noPackageJsonTypings": "warn",
|
|
@@ -27,6 +27,17 @@ export function parseExports(options: {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
if (!pkg.main && strict && strictOptions.alwaysPackageJsonMain !== 'off') {
|
|
31
|
+
report(strictOptions.alwaysPackageJsonMain, 'package.json: `main` must be declared')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (!Array.isArray(pkg.files) && strict && strictOptions.alwaysPackageJsonFiles !== 'off') {
|
|
35
|
+
report(
|
|
36
|
+
strictOptions.alwaysPackageJsonFiles,
|
|
37
|
+
'package.json: `files` should be used over `.npmignore`',
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
30
41
|
if (pkg.source) {
|
|
31
42
|
if (
|
|
32
43
|
strict &&
|
|
@@ -125,34 +136,6 @@ export function parseExports(options: {
|
|
|
125
136
|
)
|
|
126
137
|
}
|
|
127
138
|
|
|
128
|
-
/*
|
|
129
|
-
const rootExports: PkgExport & {_path: string} = {
|
|
130
|
-
_exported: true,
|
|
131
|
-
_path: '.',
|
|
132
|
-
source: pkg.source || '',
|
|
133
|
-
browser: pkg.browser && {
|
|
134
|
-
source: pkg.source || '',
|
|
135
|
-
require: pkg.main && pkg.browser[pkg.main],
|
|
136
|
-
import: pkg.module && pkg.browser[pkg.module],
|
|
137
|
-
},
|
|
138
|
-
require: legacyExports
|
|
139
|
-
? pkg.main
|
|
140
|
-
: typeof pkg.exports?.['.'] === 'object' && 'require' in pkg.exports['.']
|
|
141
|
-
? pkg.exports['.'].require
|
|
142
|
-
: '',
|
|
143
|
-
import: legacyExports
|
|
144
|
-
? pkg.module
|
|
145
|
-
: typeof pkg.exports?.['.'] === 'object' && 'import' in pkg.exports['.']
|
|
146
|
-
? pkg.exports['.'].import
|
|
147
|
-
: '',
|
|
148
|
-
default: legacyExports
|
|
149
|
-
? pkg.module || pkg.main || ''
|
|
150
|
-
: typeof pkg.exports?.['.'] === 'object' && 'default' in pkg.exports['.']
|
|
151
|
-
? pkg.exports['.'].default || ''
|
|
152
|
-
: pkg.module || pkg.main || '',
|
|
153
|
-
}
|
|
154
|
-
// */
|
|
155
|
-
|
|
156
139
|
const _exports: (PkgExport & {_path: string})[] = []
|
|
157
140
|
|
|
158
141
|
// @TODO validate typesVersions when legacyExports is true
|
|
@@ -161,8 +144,16 @@ export function parseExports(options: {
|
|
|
161
144
|
report(strictOptions.noPackageJsonTypings, 'package.json: `typings` should be `types`')
|
|
162
145
|
}
|
|
163
146
|
|
|
164
|
-
if (
|
|
165
|
-
|
|
147
|
+
if (
|
|
148
|
+
strict &&
|
|
149
|
+
strictOptions.alwaysPackageJsonTypes !== 'off' &&
|
|
150
|
+
!pkg.types &&
|
|
151
|
+
typeof pkg.exports?.['.'] === 'object' &&
|
|
152
|
+
'source' in pkg.exports['.'] &&
|
|
153
|
+
pkg.exports['.'].source?.endsWith('.ts')
|
|
154
|
+
) {
|
|
155
|
+
report(
|
|
156
|
+
strictOptions.alwaysPackageJsonTypes,
|
|
166
157
|
'package.json: `types` must be declared for the npm listing to show as a TypeScript module.',
|
|
167
158
|
)
|
|
168
159
|
}
|
package/src/node/index.ts
CHANGED
|
@@ -4,6 +4,12 @@ export * from './core'
|
|
|
4
4
|
export * from './init'
|
|
5
5
|
export * from './logger'
|
|
6
6
|
export * from './resolveBuildTasks'
|
|
7
|
-
export {
|
|
7
|
+
export {
|
|
8
|
+
type InferredStrictOptions,
|
|
9
|
+
parseStrictOptions,
|
|
10
|
+
strictOptions,
|
|
11
|
+
toggle,
|
|
12
|
+
type ToggleType,
|
|
13
|
+
} from './strict'
|
|
8
14
|
export * from './tasks'
|
|
9
15
|
export * from './watch'
|
package/src/node/strict.ts
CHANGED
|
@@ -19,6 +19,9 @@ export const strictOptions = z
|
|
|
19
19
|
noPackageJsonTypings: toggle.default('error'),
|
|
20
20
|
noImplicitSideEffects: toggle.default('warn'),
|
|
21
21
|
noImplicitBrowsersList: toggle.default('warn'),
|
|
22
|
+
alwaysPackageJsonTypes: toggle.default('error'),
|
|
23
|
+
alwaysPackageJsonMain: toggle.default('error'),
|
|
24
|
+
alwaysPackageJsonFiles: toggle.default('error'),
|
|
22
25
|
})
|
|
23
26
|
.strict()
|
|
24
27
|
|
|
@@ -58,6 +61,21 @@ export interface StrictOptions {
|
|
|
58
61
|
* @defaultValue 'warn'
|
|
59
62
|
*/
|
|
60
63
|
noImplicitBrowsersList?: ToggleType
|
|
64
|
+
/**
|
|
65
|
+
* If typescript is used then `types` in `package.json` should be specified for npm listings to show the TS icon.
|
|
66
|
+
* @defaultValue 'error'
|
|
67
|
+
*/
|
|
68
|
+
alwaysPackageJsonTypes?: ToggleType
|
|
69
|
+
/**
|
|
70
|
+
* A lot of analysis tooling requiers the `main` field to work (like bundlephobia) and so it's best practice to always include it
|
|
71
|
+
* @defaultValue 'error'
|
|
72
|
+
*/
|
|
73
|
+
alwaysPackageJsonMain?: ToggleType
|
|
74
|
+
/**
|
|
75
|
+
* Using `.npmignore` is error prone, it's best practice to always declare `files` instead
|
|
76
|
+
* @defaultValue 'error'
|
|
77
|
+
*/
|
|
78
|
+
alwaysPackageJsonFiles?: ToggleType
|
|
61
79
|
}
|
|
62
80
|
|
|
63
81
|
/** @internal */
|