chore: Re-structure workspaces, enforce build order
These are some changes in the way the monorepo is structured, that are aimed at making it easier to get started. There are two important changes: **Multiple workspaces** We had a yarn workspaces setup at `packages/*`. But our monorepo has grown to 92 packages which can be overwhelming for people not familiar with the package names. To remedy this, I've split it into 4 different workspaces: - `designs/*`: Holds FreeSewing designs (think patterns) - `plugins/*`: Holds FreeSewing plugins - `packages/*`: Holds other packages published on NPM - `sites/*`: Holds software that is not published as an NPM package, such as our various websites and backend API This should make it easier to find things, and to answer questions like *where do I find the code for the plugins*. **Updated reconfigure script to handle build order** One problem when bootstrapping the repo is inter-dependencies between packages. For example, building a pattern will only work once `plugin-bundle` is built. Which will only work once all plugins in the bundle or built. And that will only work when `core` is built, and so on. This can be frustrating for new users as `yarn buildall` will fail. And it gets overlooked by seasoned devs because they're likely to have every package built in their repo so this issue doesn't concern them. To remedy this, we now have a `config/build-order.mjs` file and the updated `/scripts/reconfigure.mjs` script will enforce the build order so that things *just work*.
This commit is contained in:
parent
895f993a70
commit
e4035b2509
1581 changed files with 2118 additions and 1868 deletions
|
@ -1,77 +0,0 @@
|
|||
import { visit } from 'unist-util-visit'
|
||||
|
||||
/*
|
||||
* This is a remark plugin that will pull the (text of the)
|
||||
* first paragraph out of a markdown document and add it as
|
||||
* the `intro` field in the documents's frontmatter.
|
||||
*
|
||||
* As such, it will only do anything if the document has
|
||||
* frontmatter.
|
||||
*
|
||||
* I wrote this specifically to pull the intro out of our
|
||||
* markdown content for SEO and open graph.
|
||||
* I'm not publishing this as a proper remark plugin because
|
||||
* while this works for our use-cases, it may or may not
|
||||
* work for the many different ways people use markdown and
|
||||
* remark out there.
|
||||
*/
|
||||
|
||||
// These are child types of a paragraph of which we'll extract the text
|
||||
const asText = [
|
||||
'text',
|
||||
'strong',
|
||||
'emphasis',
|
||||
'inlineCode',
|
||||
]
|
||||
|
||||
// The actual plugin starts here
|
||||
export const remarkIntroPlugin = (opts={}) => {
|
||||
|
||||
const { intro=[] } = opts
|
||||
|
||||
// Check to see whether the node has frontmatter
|
||||
const hasFrontmatter = node => (node?.children?.[0]?.type === 'yaml')
|
||||
|
||||
// Pulls text out of a paragraph
|
||||
const extractIntro = node => {
|
||||
const text = []
|
||||
for (const child of node.children) {
|
||||
if (asText.indexOf(child.type) !== -1) text.push(child.value)
|
||||
else if (child.type === 'link') text.push(child.children[0].value)
|
||||
}
|
||||
|
||||
return text.map(item => item ? item.trim() : '').join(' ')
|
||||
}
|
||||
|
||||
// Pulls the first paragraph out of a root node
|
||||
const extractFirstParagraph = node => {
|
||||
for (const child of node.children) {
|
||||
if (child.type === 'paragraph') return extractIntro(child)
|
||||
}
|
||||
|
||||
return 'FIXME_no_intro'
|
||||
}
|
||||
|
||||
// Tree visitor
|
||||
const visitor = (node) => {
|
||||
const nodeIntro = extractFirstParagraph(node)
|
||||
// Forgive me for this hack
|
||||
intro.push(nodeIntro)
|
||||
if (hasFrontmatter(node)) {
|
||||
node.children[0].value += `\nintro: "${nodeIntro}"\n`
|
||||
} else {
|
||||
node.children.unshift({
|
||||
type: 'yaml',
|
||||
value: `intro: "${nodeIntro}"`
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Transformer method using the visitor pattern
|
||||
const transform = (tree) => {
|
||||
visit(tree, 'root', visitor)
|
||||
}
|
||||
|
||||
return transform
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue