Skip to content

Instantly share code, notes, and snippets.

@onefork
Created May 7, 2020 13:17
Show Gist options
  • Save onefork/30a560b95fd1f4333d5159def007d97a to your computer and use it in GitHub Desktop.
Save onefork/30a560b95fd1f4333d5159def007d97a to your computer and use it in GitHub Desktop.
ProseMirror Monorepo with Nx
#!/usr/bin/env bash
#
# Prerequisites:
# git, node, yarn, nx, jq
#
repos_dir=repos
workspace=pm
pm_dir=prosemirror
if ! [ -x "$(command -v jq)" ]; then
echo 'Error: jq is not installed.' >&2
exit 1
fi
echo -e 'Clone prosemirror repos into '$repos_dir'/:' &&
mkdir $repos_dir &&
(
cd $repos_dir/
curl -s https://api.github.com/orgs/prosemirror/repos\?per_page\=100 | jq '.[].html_url' | xargs -n 1 git clone
) &&
echo -e '\nCreate nx workspace in '$workspace'/:' &&
npx create-nx-workspace@latest $workspace --preset=empty --cli=nx &&
(
cd $workspace/
yarn add --dev @nrwl/jest
) &&
(
cd $repos_dir/
# $D e.g. "prosemirror-model/"
for D in */; do [ -d $D ] && (
name=${D%?} # remove "/" char at the end
echo -e '\nSetup '$name':'
(
cd ../$workspace/
nx generate @nrwl/workspace:library --name=$name --directory=$pm_dir
cd libs/$pm_dir/$D
rm README.md
rm -rf src
jq '. * {"compilerOptions": {"allowJs": true}} | .include += ["**/*.js"]' tsconfig.json >tsconfig.tmp$$.json && mv tsconfig.tmp$$.json tsconfig.json
)
cp -RT $D ../$workspace/libs/$pm_dir/$D
rm -rf ../$workspace/libs/$pm_dir/$D/.git
); done
)
# TODO skip 3 repos
# nx generate @nrwl/workspace:remove --projectName=prosemirror-prosemirror --no-interactive
# nx generate @nrwl/workspace:remove --projectName=prosemirror-website --no-interactive
# nx generate @nrwl/workspace:remove --projectName=prosemirror-prosemirror-rfcs --no-interactive
# TODO handle ./$workspace/tsconfig.json paths:
#
# @pm/prosemirror/prosemirror-xxx -> prosemirror-xxx
# rest @pm/prosemirror/xxx -> @pm/xxx
# libs/prosemirror/prosemirror-xxx/src/index.ts -> libs/prosemirror/prosemirror-xxx/src/index.js or libs/prosemirror/prosemirror-xxx/src/xxx.js
# TODO handle ./$workspace/nx.json
# TODO handle ./$workspace/workspace.json
# TODO handle ./$workspace/libs/$pm_dir/$name/jest.config.js
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment