Skip to content

Commit

Permalink
Add exports field (#920)
Browse files Browse the repository at this point in the history
  • Loading branch information
thecrypticace committed Jan 25, 2023
1 parent 1765c56 commit edb9526
Show file tree
Hide file tree
Showing 3 changed files with 246 additions and 2 deletions.
94 changes: 93 additions & 1 deletion react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,102 @@
"solid",
"outline"
],
"exports": {
"./package.json": {
"default": "./package.json"
},
"./outline": {
"default": "./outline/index.js"
},
"./outline/index": {
"default": "./outline/index.js"
},
"./outline/index.js": {
"default": "./outline/index.js"
},
"./solid": {
"default": "./solid/index.js"
},
"./solid/index": {
"default": "./solid/index.js"
},
"./solid/index.js": {
"default": "./solid/index.js"
},
"./20/solid": {
"types": "./20/solid/index.d.ts",
"import": "./20/solid/index.js",
"require": "./20/solid/index.js"
},
"./20/solid/*": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js",
"require": "./20/solid/*.js"
},
"./20/solid/*.js": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js",
"require": "./20/solid/*.js"
},
"./20/solid/esm/*": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js"
},
"./20/solid/esm/*.js": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js"
},
"./24/outline": {
"types": "./24/outline/index.d.ts",
"import": "./24/outline/index.js",
"require": "./24/outline/index.js"
},
"./24/outline/*": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js",
"require": "./24/outline/*.js"
},
"./24/outline/*.js": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js",
"require": "./24/outline/*.js"
},
"./24/outline/esm/*": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js"
},
"./24/outline/esm/*.js": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js"
},
"./24/solid": {
"types": "./24/solid/index.d.ts",
"import": "./24/solid/index.js",
"require": "./24/solid/index.js"
},
"./24/solid/*": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js",
"require": "./24/solid/*.js"
},
"./24/solid/*.js": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js",
"require": "./24/solid/*.js"
},
"./24/solid/esm/*": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js"
},
"./24/solid/esm/*.js": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js"
}
},
"publishConfig": {
"access": "public"
},
"peerDependencies": {
"react": ">= 16"
}
}
}
60 changes: 60 additions & 0 deletions scripts/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,56 @@ async function buildIcons(package, style, format) {
await ensureWrite(`${outDir}/index.d.ts`, exportAll(icons, 'esm', false))
}

/**
* @param {string[]} styles
*/
async function buildExports(styles) {
let pkg = {}

// For those that want to read the version from package.json
pkg[`./package.json`] = { "default": "./package.json" }

// Backwards compatibility with v1 imports (points to proxy that prints an error message):
pkg["./outline"] = { "default": "./outline/index.js" }
pkg["./outline/index"] = { "default": "./outline/index.js" }
pkg["./outline/index.js"] = { "default": "./outline/index.js" }
pkg["./solid"] = { "default": "./solid/index.js" }
pkg["./solid/index"] = { "default": "./solid/index.js" }
pkg["./solid/index.js"] = { "default": "./solid/index.js" }

// Explicit exports for each style:
for (let style of styles) {
pkg[`./${style}`] = {
"types": `./${style}/index.d.ts`,
"import": `./${style}/index.js`,
"require": `./${style}/index.js`
}
pkg[`./${style}/*`] = {
"types": `./${style}/*.d.ts`,
"import": `./${style}/esm/*.js`,
"require": `./${style}/*.js`
}
pkg[`./${style}/*.js`] = {
"types": `./${style}/*.d.ts`,
"import": `./${style}/esm/*.js`,
"require": `./${style}/*.js`
}

// This dir is basically an implementation detail, but it's needed for
// backwards compatibility in case people were importing from it directly.
pkg[`./${style}/esm/*`] = {
"types": `./${style}/*.d.ts`,
"import": `./${style}/esm/*.js`
}
pkg[`./${style}/esm/*.js`] = {
"types": `./${style}/*.d.ts`,
"import": `./${style}/esm/*.js`
}
}

return pkg
}

async function main(package) {
const cjsPackageJson = { module: './esm/index.js', sideEffects: false }
const esmPackageJson = { type: 'module', sideEffects: false }
Expand Down Expand Up @@ -135,6 +185,16 @@ async function main(package) {
ensureWriteJson(`./${package}/24/solid/package.json`, cjsPackageJson),
])

let packageJson = JSON.parse(await fs.readFile(`./${package}/package.json`, 'utf8'))

packageJson.exports = await buildExports([
'20/solid',
'24/outline',
'24/solid',
])

await ensureWriteJson(`./${package}/package.json`, packageJson)

return console.log(`Finished building ${package} package.`)
}

Expand Down
94 changes: 93 additions & 1 deletion vue/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,102 @@
"outline",
"solid"
],
"exports": {
"./package.json": {
"default": "./package.json"
},
"./outline": {
"default": "./outline/index.js"
},
"./outline/index": {
"default": "./outline/index.js"
},
"./outline/index.js": {
"default": "./outline/index.js"
},
"./solid": {
"default": "./solid/index.js"
},
"./solid/index": {
"default": "./solid/index.js"
},
"./solid/index.js": {
"default": "./solid/index.js"
},
"./20/solid": {
"types": "./20/solid/index.d.ts",
"import": "./20/solid/index.js",
"require": "./20/solid/index.js"
},
"./20/solid/*": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js",
"require": "./20/solid/*.js"
},
"./20/solid/*.js": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js",
"require": "./20/solid/*.js"
},
"./20/solid/esm/*": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js"
},
"./20/solid/esm/*.js": {
"types": "./20/solid/*.d.ts",
"import": "./20/solid/esm/*.js"
},
"./24/outline": {
"types": "./24/outline/index.d.ts",
"import": "./24/outline/index.js",
"require": "./24/outline/index.js"
},
"./24/outline/*": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js",
"require": "./24/outline/*.js"
},
"./24/outline/*.js": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js",
"require": "./24/outline/*.js"
},
"./24/outline/esm/*": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js"
},
"./24/outline/esm/*.js": {
"types": "./24/outline/*.d.ts",
"import": "./24/outline/esm/*.js"
},
"./24/solid": {
"types": "./24/solid/index.d.ts",
"import": "./24/solid/index.js",
"require": "./24/solid/index.js"
},
"./24/solid/*": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js",
"require": "./24/solid/*.js"
},
"./24/solid/*.js": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js",
"require": "./24/solid/*.js"
},
"./24/solid/esm/*": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js"
},
"./24/solid/esm/*.js": {
"types": "./24/solid/*.d.ts",
"import": "./24/solid/esm/*.js"
}
},
"publishConfig": {
"access": "public"
},
"peerDependencies": {
"vue": ">= 3"
}
}
}

0 comments on commit edb9526

Please sign in to comment.