Skip to content

Commit

Permalink
fix: improve astro compatibilty
Browse files Browse the repository at this point in the history
  • Loading branch information
stipsan committed Aug 6, 2023
1 parent 00b65d5 commit c107659
Show file tree
Hide file tree
Showing 15 changed files with 376 additions and 39 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
".": {
"types": "./dist/index.d.ts",
"source": "./src/node/index.ts",
"require": "./dist/index.cjs",
"import": "./dist/index.js",
"require": "./dist/index.cjs",
"default": "./dist/index.js"
},
"./package.json": "./package.json"
Expand Down
2 changes: 1 addition & 1 deletion playground/babel-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
".": {
"types": "./dist/index.d.ts",
"source": "./src/index.ts",
"require": "./dist/index.cjs",
"import": "./dist/index.js",
"require": "./dist/index.cjs",
"default": "./dist/index.js"
},
"./package.json": "./package.json"
Expand Down
2 changes: 1 addition & 1 deletion playground/custom-dist/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
".": {
"types": "./lib/src/index.d.ts",
"source": "./src/index.ts",
"require": "./lib/index.cjs",
"import": "./lib/index.js",
"require": "./lib/index.cjs",
"default": "./lib/index.js"
},
"./package.json": "./package.json"
Expand Down
1 change: 1 addition & 0 deletions playground/default-export/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"source": "./src/index.js",
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./dist/index.cjs.js"
},
"import": "./dist/index.js",
Expand Down
15 changes: 8 additions & 7 deletions playground/dummy-commonjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,33 @@
"source": "./src/index.ts",
"browser": {
"source": "./src/index.ts",
"require": "./dist/index.browser.js",
"import": "./dist/index.browser.mjs"
"import": "./dist/index.browser.mjs",
"require": "./dist/index.browser.js"
},
"module": "./dist/index.mjs",
"require": "./dist/index.js",
"node": {
"module": "./dist/index.mjs",
"import": "./node/index.mjs",
"require": "./node/index.js"
},
"import": "./dist/index.mjs",
"require": "./dist/index.js",
"default": "./dist/index.mjs"
},
"./extra": {
"types": "./dist/extra.d.ts",
"source": "./src/extra.ts",
"browser": {
"source": "./src/extra.ts",
"require": "./dist/extra.browser.js",
"import": "./dist/extra.browser.mjs"
"import": "./dist/extra.browser.mjs",
"require": "./dist/extra.browser.js"
},
"require": "./dist/extra.js",
"node": {
"module": "./dist/extra.mjs",
"import": "./node/extra.mjs",
"require": "./node/extra.js"
},
"import": "./dist/extra.mjs",
"require": "./dist/extra.js",
"default": "./dist/extra.mjs"
},
"./package.json": "./package.json"
Expand Down
14 changes: 8 additions & 6 deletions playground/dummy-module/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,33 @@
"source": "./src/index.ts",
"browser": {
"source": "./src/index.ts",
"require": "./dist/index.browser.cjs",
"import": "./dist/index.browser.js"
"import": "./dist/index.browser.js",
"require": "./dist/index.browser.cjs"
},
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./node/index.js",
"require": "./node/index.cjs"
},
"import": "./dist/index.js",
"require": "./dist/index.cjs",
"default": "./dist/index.js"
},
"./extra": {
"types": "./dist/extra.d.ts",
"source": "./src/extra.ts",
"browser": {
"source": "./src/extra.ts",
"require": "./dist/extra.browser.cjs",
"import": "./dist/extra.browser.js"
"import": "./dist/extra.browser.js",
"require": "./dist/extra.browser.cjs"
},
"require": "./dist/extra.cjs",
"node": {
"module": "./dist/extra.js",
"import": "./node/extra.js",
"require": "./node/extra.cjs"
},
"import": "./dist/extra.js",
"require": "./dist/extra.cjs",
"default": "./dist/extra.js"
},
"./package.json": "./package.json"
Expand Down
2 changes: 2 additions & 0 deletions playground/multi-export/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"source": "./src/index.ts",
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./dist/index.cjs.js"
},
"import": "./dist/index.js",
Expand All @@ -20,6 +21,7 @@
"source": "./src/plugin.ts",
"require": "./dist/plugin.cjs",
"node": {
"module": "./dist/plugin.js",
"import": "./dist/plugin.cjs.js"
},
"import": "./dist/plugin.js",
Expand Down
2 changes: 2 additions & 0 deletions playground/multi-exports-commonjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"source": "./src/index.ts",
"require": "./dist/index.js",
"node": {
"module": "./dist/index.esm.js",
"import": "./dist/index.cjs.mjs"
},
"import": "./dist/index.esm.js",
Expand All @@ -20,6 +21,7 @@
"source": "./src/plugin.ts",
"require": "./dist/plugin.js",
"node": {
"module": "./dist/plugin.esm.js",
"import": "./dist/plugin.cjs.mjs"
},
"import": "./dist/plugin.esm.js",
Expand Down
1 change: 1 addition & 0 deletions playground/ts-bundler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"source": "./src/index.ts",
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./dist/index.cjs.js"
},
"import": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions playground/ts-node16/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"source": "./src/index.ts",
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./dist/index.cjs.js"
},
"import": "./dist/index.js",
Expand Down
1 change: 1 addition & 0 deletions playground/ts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"source": "./src/index.ts",
"require": "./dist/index.cjs",
"node": {
"module": "./dist/index.js",
"import": "./dist/index.cjs.js"
},
"import": "./dist/index.js",
Expand Down
109 changes: 91 additions & 18 deletions src/node/core/pkg/loadPkgWithReporting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export async function loadPkgWithReporting(options: {

try {
const pkg = await loadPkg({cwd})
let shouldError = false

// validate exports
if (pkg.exports) {
Expand All @@ -28,33 +29,105 @@ export async function loadPkgWithReporting(options: {
const keys = Object.keys(exp)

if (!assertFirst('types', keys)) {
logger.warn(`exports["${expPath}"]: the \`types\` property should be the first property`)
shouldError = true
logger.error(`exports["${expPath}"]: the \`types\` property should be the first property`)
}

if (!assertOrder('require', 'import', keys)) {
logger.warn(
`exports["${expPath}"]: the \`require\` property should come before the \`import\` property`,
)
}

if (!assertOrder('require', 'node', keys)) {
logger.warn(
`exports["${expPath}"]: the \`require\` property should come before the \`node\` property`,
)
}

if (!assertOrder('node', 'import', keys)) {
logger.warn(
`exports["${expPath}"]: the \`node\` property should come before \`import\` property`,
)
if (exp.node) {
const nodeKeys = Object.keys(exp.node)

if (!assertOrder('module', 'import', nodeKeys)) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node.module\` property should come before the \`node.import\` property`,
)
}

if (!assertOrder('import', 'require', nodeKeys)) {
logger.warn(
`exports["${expPath}"]: the \`node.import\` property should come before the \`node.require\` property`,
)
}

if (!assertOrder('module', 'require', nodeKeys)) {
logger.warn(
`exports["${expPath}"]: the \`node.module\` property should come before \`node.require\` property`,
)
}

if (exp.import && exp.node.import && !assertOrder('node', 'import', keys)) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node\` property should come before the \`import\` property`,
)
}

if (exp.module && exp.node.module && !assertOrder('node', 'module', keys)) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node\` property should come before the \`module\` property`,
)
}

// If there's a `node.import` property but not a `node.require` we can assume `node.import` is wrapping `import` and `node.module` should be added for bundlers
if (exp.node.import && !exp.node.require && !exp.node.module) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node.module\` property should be added so bundlers don't unintentionally try to bundle \`node.import\``,
)
}

if (
exp.node.import &&
!exp.node.require &&
exp.node.module &&
exp.import &&
exp.node.module !== exp.import
) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node.module\` property should match \`import\``,
)
}

if (exp.require && exp.node.require && exp.require === exp.node.require) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node.require\` property isn't necessary as it's identical to \`require\``,
)
} else if (exp.require && exp.node.require && !assertOrder('node', 'require', keys)) {
shouldError = true
logger.error(
`exports["${expPath}"]: the \`node\` property should come before the \`require\` property`,
)
}
} else {
if (!assertOrder('import', 'require', keys)) {
logger.warn(
`exports["${expPath}"]: the \`import\` property should come before the \`require\` property`,
)
}

if (!assertOrder('module', 'import', keys)) {
logger.warn(
`exports["${expPath}"]: the \`module\` property should come before \`import\` property`,
)
}
}

if (!assertLast('default', keys)) {
logger.warn(`exports["${expPath}"]: the \`default\` property should be the last property`)
shouldError = true
logger.error(
`exports["${expPath}"]: the \`default\` property should be the last property`,
)
}
}
}

if (shouldError) {
process.exit(1)
}

return pkg
} catch (err) {
if (err instanceof ZodError) {
Expand Down
6 changes: 4 additions & 2 deletions src/node/core/pkg/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,16 @@ export interface PackageJSON {
types?: string
browser?: {
source: string
require?: string
import?: string
require?: string
}
node?: {
source?: string
require?: string
module?: string
import?: string
require?: string
}
module?: string
import?: string
require?: string
default: string
Expand Down
34 changes: 31 additions & 3 deletions src/node/core/pkg/validatePkg.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {z} from 'zod'

import {PackageJSON} from './types'
import { assertFirst } from './helpers';

const pkgSchema = z.object({
type: z.optional(z.enum(['commonjs', 'module'])),
Expand All @@ -23,23 +24,50 @@ const pkgSchema = z.object({
z.object({
types: z.optional(z.string()),
source: z.string(),
require: z.optional(z.string()),
browser: z.optional(
z.object({
source: z.string(),
require: z.optional(z.string()),
import: z.optional(z.string()),
require: z.optional(z.string()),
}),
),
module: z.optional(z.string()),
node: z.optional(
z.object({
source: z.optional(z.string()),
require: z.optional(z.string()),
import: z.optional(z.string()),
require: z.optional(z.string()),
}),
),
import: z.optional(z.string()),
require: z.optional(z.string()),
default: z.string(),
}).superRefine((val, ctx) => {
const keys = Object.keys(val)

if (!assertFirst('types', keys)) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message:`the \`types\` property should be the first property`,
});
}

// if (val.length > 3) {
// ctx.addIssue({
// code: z.ZodIssueCode.too_big,
// maximum: 3,
// type: "array",
// inclusive: true,
// message: "Too many items 😡",
// });
// }

// if (val.length !== new Set(val).size) {
// ctx.addIssue({
// code: z.ZodIssueCode.custom,
// message: `No duplicates allowed.`,
// });
// }
}),
]),
),
Expand Down

0 comments on commit c107659

Please sign in to comment.