mirror of
https://github.com/velocitatem/garlic.git
synced 2026-05-31 16:53:37 +00:00
Works!
This commit is contained in:
35
garlic-astro/README.md
Normal file
35
garlic-astro/README.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Astro Starter Kit: Component Package
|
||||||
|
|
||||||
|
This is a template for an Astro component library. Use this template for writing components to use in multiple projects or publish to NPM.
|
||||||
|
|
||||||
|
```
|
||||||
|
npm create astro@latest -- --template component
|
||||||
|
```
|
||||||
|
|
||||||
|
[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/non-html-pages)
|
||||||
|
[](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/non-html-pages)
|
||||||
|
[](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/component/devcontainer.json)
|
||||||
|
|
||||||
|
|
||||||
|
## 🚀 Project Structure
|
||||||
|
|
||||||
|
Inside of your Astro project, you'll see the following folders and files:
|
||||||
|
|
||||||
|
```
|
||||||
|
/
|
||||||
|
├── index.ts
|
||||||
|
├── src
|
||||||
|
│ └── MyComponent.astro
|
||||||
|
├── tsconfig.json
|
||||||
|
├── package.json
|
||||||
|
```
|
||||||
|
|
||||||
|
The `index.ts` file is the "entry point" for your package. Export your components in `index.ts` to make them importable from your package.
|
||||||
|
|
||||||
|
## 🧞 Commands
|
||||||
|
All commands are run from the root of the project, from a terminal:
|
||||||
|
|
||||||
|
| Command | Action |
|
||||||
|
| :--------------------- | :----------------------------------------------- |
|
||||||
|
| `npm link` | Registers this package locally. Run `npm link my-component-library` in an Astro project to install your components
|
||||||
|
| `npm publish` | [Publishes](https://docs.npmjs.com/creating-and-publishing-unscoped-public-packages#publishing-unscoped-public-packages) this package to NPM. Requires you to be [logged in](https://docs.npmjs.com/cli/v8/commands/npm-adduser)
|
||||||
5
garlic-astro/index.ts
Normal file
5
garlic-astro/index.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import Garlic from '/home/velocitatem/Documents/Projects/garlic/garlic-astro/src/Garlic.astro';
|
||||||
|
import Clove from '/home/velocitatem/Documents/Projects/garlic/garlic-astro/src/Clove.astro';
|
||||||
|
|
||||||
|
// export both
|
||||||
|
export { Garlic, Clove };
|
||||||
25
garlic-astro/package.json
Normal file
25
garlic-astro/package.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "garlic-astro",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"exports": {
|
||||||
|
".": "./index.ts"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src",
|
||||||
|
"index.ts"
|
||||||
|
],
|
||||||
|
"keywords": [
|
||||||
|
"astro-component"
|
||||||
|
],
|
||||||
|
"scripts": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"astro": "^2.0.17"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"astro": "^2.0.0-beta.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"jsdom": "^21.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
29
garlic-astro/src/Clove.astro
Normal file
29
garlic-astro/src/Clove.astro
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
let html = Astro.slots.render('default')
|
||||||
|
html = await html
|
||||||
|
// clean html, remove tabs and new lines and spaces that are not between tags
|
||||||
|
html = html.replace(/>\s+</g, '><')
|
||||||
|
html = html.replace(/(\r\n|\n|\r|\t)/gm, '')
|
||||||
|
html = html.replace(/ +(?= )/g, '')
|
||||||
|
import { JSDOM } from "jsdom";
|
||||||
|
const dom = new JSDOM(html);
|
||||||
|
function encodeTextNodes(node) {
|
||||||
|
if (node.nodeType === 3) {
|
||||||
|
node.nodeValue = Buffer.from(node.nodeValue).toString('base64')
|
||||||
|
} else {
|
||||||
|
for (let i = 0; i < node.childNodes.length; i++) {
|
||||||
|
let val = node.childNodes[i].nodeValue
|
||||||
|
val = val ? val.trim() : val
|
||||||
|
if (node.childNodes[i].nodeType === 3 && val) {
|
||||||
|
node.childNodes[i].nodeValue = Buffer.from(val).toString('base64')
|
||||||
|
} else {
|
||||||
|
encodeTextNodes(node.childNodes[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
encodeTextNodes(dom.window.document.body)
|
||||||
|
let encodedHtml = dom.serialize()
|
||||||
|
---
|
||||||
|
<div set:html={encodedHtml}>
|
||||||
|
</div>
|
||||||
5
garlic-astro/src/Garlic.astro
Normal file
5
garlic-astro/src/Garlic.astro
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
---
|
||||||
|
<div id="root">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
8
garlic-astro/src/MyComponent.astro
Normal file
8
garlic-astro/src/MyComponent.astro
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
// Write your component code in this file!
|
||||||
|
export interface Props {
|
||||||
|
prefix?: string;
|
||||||
|
}
|
||||||
|
---
|
||||||
|
|
||||||
|
<div>{Astro.props.prefix} My special component</div>
|
||||||
3
garlic-astro/tsconfig.json
Normal file
3
garlic-astro/tsconfig.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": "astro/tsconfigs/base"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user