Skip to content

Commit

Permalink
fix(shared): Improve expo compat (#1950)
Browse files Browse the repository at this point in the history
* fix(shared): Remove "module" from package.json

* chore(repo): Add subpath workaround script

* chore(shared): Add script to shared

* Create wise-houses-shop.md

* chore(*): Fix stuff

* chore(repo): Improve script

* chore(repo): Scripting

* Update wise-houses-shop.md
  • Loading branch information
LekoArts authored Oct 26, 2023
1 parent ff3a775 commit 29a5f56
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/wise-houses-shop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@clerk/shared": patch
---

Improve compatibility with Expo
19 changes: 19 additions & 0 deletions packages/shared/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
browser
callWithRetry
color
cookie
date
deprecated
error
file
globs
handleValueOrFn
isomorphicAtob
keys
loadScript
localStorageBroadcastChannel
poller
proxy
underscore
url
react
2 changes: 1 addition & 1 deletion packages/shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
"dist"
],
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"exports": {
".": {
"import": {
Expand Down Expand Up @@ -45,6 +44,7 @@
"dev": "tsup --watch",
"dev:publish": "npm run dev -- --env.publish",
"publish:local": "npx yalc push --replace --sig",
"postbuild": "node ../../scripts/subpath-workaround.mjs shared",
"clean": "rimraf ./dist",
"lint": "eslint src/",
"lint:publint": "publint",
Expand Down
25 changes: 25 additions & 0 deletions packages/shared/subpaths.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// This file is a helper for the "subpath-workaround.mjs" script
// We have to polyfill our "exports" subpaths :cry:

export const subpathNames = [
'browser',
'callWithRetry',
'color',
'cookie',
'date',
'deprecated',
'error',
'file',
'globs',
'handleValueOrFn',
'isomorphicAtob',
'keys',
'loadScript',
'localStorageBroadcastChannel',
'poller',
'proxy',
'underscore',
'url',
];

export const subpathFoldersBarrel = ['react'];
57 changes: 57 additions & 0 deletions scripts/subpath-workaround.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env zx

import 'zx/globals';

import fs from 'fs';

const loadJSON = path => JSON.parse(fs.readFileSync(new URL(path, import.meta.url)));
const writeJSON = (path, contents) =>
fs.writeFileSync(new URL(path, import.meta.url), JSON.stringify(contents, null, 2));

const pkgJsonPlaceholder = name => ({
main: `../dist/${name}.js`,
});
const pkgJsonBarrelPlaceholder = name => ({
main: `../dist/${name}/index.js`,
});

async function run() {
const pkgName = argv._[0];
console.log(`Loading package.json for ${pkgName}`);
const pkgFile = loadJSON(`../packages/${pkgName}/package.json`);
const subpathHelperFile = await import(`../packages/${pkgName}/subpaths.mjs`);

console.log(
`Found ${subpathHelperFile.subpathNames.length} subpaths and ${subpathHelperFile.subpathFoldersBarrel.length} subpath barrels`,
);

// Check if pkgFile.files already contains the subpaths. This means that the script has already been run and we should exit early
const subpathsAlreadyAdded = subpathHelperFile.subpathNames.some(name => pkgFile.files.includes(name));

if (subpathsAlreadyAdded) {
return console.log(`Subpaths already added to ${pkgName} package.json. Exiting early`);
}

// Add all subpaths to the "files" property on package.json
pkgFile.files = [...pkgFile.files, ...subpathHelperFile.subpathNames, ...subpathHelperFile.subpathFoldersBarrel];

writeJSON(`../packages/${pkgName}/package.json`, pkgFile);

console.log(`Overwrote package.json for ${pkgName} with subpaths`);

// Create directories for each subpath name using the pkgJsonPlaceholder
subpathHelperFile.subpathNames.forEach(name => {
fs.mkdirSync(new URL(`../packages/${pkgName}/${name}`, import.meta.url));
writeJSON(`../packages/${pkgName}/${name}/package.json`, pkgJsonPlaceholder(name));
});

// Create directories for each subpath barrel file using the pkgJsonBarrelPlaceholder
subpathHelperFile.subpathFoldersBarrel.forEach(name => {
fs.mkdirSync(new URL(`../packages/${pkgName}/${name}`, import.meta.url));
writeJSON(`../packages/${pkgName}/${name}/package.json`, pkgJsonBarrelPlaceholder(name));
});

console.log('Successfully created subpath directories with placeholder files');
}

await run();

0 comments on commit 29a5f56

Please sign in to comment.