next-blurhash-previews 0.0.2 → 0.0.3-beta11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. package/bin/markdown-sync.js +8 -0
  2. package/bin/remark-plugin.js +5 -2
  3. package/imagePreviewBootstrap.js +7 -0
  4. package/index.js +1 -3
  5. package/package.json +7 -4
  6. package/.prettierrc +0 -3
  7. package/img1.png +0 -0
  8. package/img5.png +0 -0
  9. package/junk.js +0 -1
  10. package/next-runner/.eslintrc.json +0 -3
  11. package/next-runner/README.md +0 -34
  12. package/next-runner/blog-posts/post1.md +0 -11
  13. package/next-runner/blog-posts/post2.md +0 -10
  14. package/next-runner/blog-posts/post3.md +0 -10
  15. package/next-runner/blog-posts/post4.md +0 -10
  16. package/next-runner/next.config.js +0 -6
  17. package/next-runner/package-lock.json +0 -5080
  18. package/next-runner/package.json +0 -23
  19. package/next-runner/pages/_app.js +0 -11
  20. package/next-runner/pages/_document.js +0 -17
  21. package/next-runner/pages/index.js +0 -47
  22. package/next-runner/public/dynamo-introduction/img1.png +0 -0
  23. package/next-runner/public/dynamo-introduction/img10.png +0 -0
  24. package/next-runner/public/dynamo-introduction/img11.png +0 -0
  25. package/next-runner/public/dynamo-introduction/img12.png +0 -0
  26. package/next-runner/public/dynamo-introduction/img13.png +0 -0
  27. package/next-runner/public/dynamo-introduction/img14.png +0 -0
  28. package/next-runner/public/dynamo-introduction/img15.png +0 -0
  29. package/next-runner/public/dynamo-introduction/img2.png +0 -0
  30. package/next-runner/public/dynamo-introduction/img3.png +0 -0
  31. package/next-runner/public/dynamo-introduction/img4.png +0 -0
  32. package/next-runner/public/dynamo-introduction/img5.png +0 -0
  33. package/next-runner/public/dynamo-introduction/img5a.png +0 -0
  34. package/next-runner/public/dynamo-introduction/img6.png +0 -0
  35. package/next-runner/public/dynamo-introduction/img7.png +0 -0
  36. package/next-runner/public/dynamo-introduction/img8.png +0 -0
  37. package/next-runner/public/dynamo-introduction/img9.png +0 -0
  38. package/next-runner/public/favicon.ico +0 -0
  39. package/next-runner/public/img1.png +0 -0
  40. package/next-runner/public/img5.png +0 -0
  41. package/next-runner/public/vercel.svg +0 -4
  42. package/next-runner/styles/Home.module.css +0 -3
  43. package/next-runner/styles/globals.css +0 -22
  44. package/next-runner/yalc.lock +0 -9
  45. package/next-runner/yarn.lock +0 -1650
  46. package/tsconfig.json +0 -21
  47. package/tsconfig.node.json +0 -8
  48. package/yalc.lock +0 -9
@@ -6,6 +6,9 @@ import { fileURLToPath } from "url";
6
6
 
7
7
  import { reporter } from "vfile-reporter";
8
8
  import { remark } from "remark";
9
+ import remarkFrontmatter from "remark-frontmatter";
10
+ import remarkStringify from "remark-stringify";
11
+
9
12
  import glob from "glob";
10
13
  import colors from "colors";
11
14
 
@@ -21,6 +24,7 @@ const files = glob.sync(inputGlob, { root: directoryProcess });
21
24
  const publicPath = path.resolve(directoryProcess, "public");
22
25
 
23
26
  if (fs.existsSync(publicPath)) {
27
+ console.log(colors.blue(`Found path to public folder at: ${publicPath}\n\n`));
24
28
  run();
25
29
  } else {
26
30
  console.log(
@@ -36,6 +40,10 @@ async function runFile(file) {
36
40
  return new Promise(res => {
37
41
  remark()
38
42
  .use(blurhashPlugin(publicPath))
43
+ .use(remarkFrontmatter)
44
+ .use(remarkStringify, {
45
+ fences: true,
46
+ })
39
47
  .process(buffer)
40
48
  .then(outputFile => {
41
49
  fs.writeFileSync(file, outputFile.toString());
@@ -1,6 +1,5 @@
1
1
  import path from "path";
2
2
  import { visitParents } from "unist-util-visit-parents";
3
- import prettier from "prettier";
4
3
 
5
4
  import colors from "colors";
6
5
 
@@ -15,6 +14,10 @@ export const blurhashPlugin = publicPath => () => {
15
14
 
16
15
  const originalImg = imagePath;
17
16
  if (!/http/.test(imagePath)) {
17
+ if (imagePath.startsWith("/")) {
18
+ imagePath = imagePath.substr(1);
19
+ }
20
+
18
21
  imagePath = path.resolve(publicPath, imagePath);
19
22
  }
20
23
 
@@ -40,7 +43,7 @@ export const blurhashPlugin = publicPath => () => {
40
43
 
41
44
  parent.children[index] = {
42
45
  type: "html",
43
- value: prettier.format(newNode, { parser: "html" }).trimEnd(),
46
+ value: newNode,
44
47
  };
45
48
  } catch (er) {
46
49
  console.log(colors.red(`Error processing ${imagePath}\n\t`, er));
@@ -0,0 +1,7 @@
1
+ import { createElement } from "react";
2
+ import Script from "next/script";
3
+
4
+ export const imagePreviewBootstrap = createElement(Script, {
5
+ dangerouslySetInnerHTML: { __html: `(() => { "use strict";const P=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],u=t=>{let e=0;for(let s=0;s<t.length;s++){const n=t[s],r=P.indexOf(n);e=e*83+r}return e},w=t=>{let e=t/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},b=t=>{let e=Math.max(0,Math.min(1,t));return e<=.0031308?Math.round(e*12.92*255+.5):Math.round((1.055*Math.pow(e,.4166666666666667)-.055)*255+.5)},R=t=>t<0?-1:1,p=(t,e)=>R(t)*Math.pow(Math.abs(t),e);class q extends Error{constructor(e){super(e),this.name="ValidationError",this.message=e}}const T=t=>{if(!t||t.length<6)throw new q("The blurhash string must be at least 6 characters");const e=u(t[0]),s=Math.floor(e/9)+1,n=e%9+1;if(t.length!==4+2*n*s)throw new q(\`blurhash length mismatch: length is \${t.length} but it should be \${4+2*n*s}\`)},A=t=>{const e=t>>16,s=t>>8&255,n=t&255;return[w(e),w(s),w(n)]},G=(t,e)=>{const s=Math.floor(t/361),n=Math.floor(t/19)%19,r=t%19;return[p((s-9)/9,2)*e,p((n-9)/9,2)*e,p((r-9)/9,2)*e]},I=(t,e,s,n)=>{T(t),n=n|1;const r=u(t[0]),a=Math.floor(r/9)+1,c=r%9+1,y=(u(t[1])+1)/166,d=new Array(c*a);for(let o=0;o<d.length;o++)if(o===0){const i=u(t.substring(2,6));d[o]=A(i)}else{const i=u(t.substring(4+o*2,6+o*2));d[o]=G(i,y*n)}const l=e*4,h=new Uint8ClampedArray(l*s);for(let o=0;o<s;o++)for(let i=0;i<e;i++){let v=0,x=0,C=0;for(let g=0;g<a;g++)for(let m=0;m<c;m++){const f=Math.cos(Math.PI*i*m/e)*Math.cos(Math.PI*o*g/s);let M=d[m+g*c];v+=M[0]*f,x+=M[1]*f,C+=M[2]*f}let B=b(v),E=b(x),L=b(C);h[4*i+0+o*l]=B,h[4*i+1+o*l]=E,h[4*i+2+o*l]=L,h[4*i+3+o*l]=255}return h};class D extends HTMLElement{sd;mo;static observedAttributes=["preview"];get#t(){return this.querySelector("img")}get#e(){return this.querySelector("canvas")}constructor(){super(),this.sd=this.attachShadow({mode:"open"}),this.sd.innerHTML='<slot name="preview"></slot>'}#s=()=>{if(this.#t&&this.#e)return this.mo?.disconnect(),this.#t.complete?this.#n():(this.#o(),this.#t.addEventListener("load",this.#n)),!0};connectedCallback(){this.#s()||(this.mo=new MutationObserver(this.#s),this.mo.observe(this,{subtree:!0,childList:!0,attributes:!1}))}#n=()=>{this.sd.innerHTML='<slot name="image"></slot>'};attributeChangedCallback(e){this.#e&&e==="preview"&&this.#o()}#o(){const e=JSON.parse(this.getAttribute("preview"));H(this.#e,e)}}customElements.get("blurhash-image")||customElements.define("blurhash-image",D);function H(t,e){const{w:s,h:n}=e;t.width=s,t.height=n;const r=I(e.blurhash,s,n),a=t.getContext("2d"),c=a.createImageData(s,n);c.data.set(r),a.putImageData(c,0,0)} })();` },
6
+ strategy: "beforeInteractive",
7
+ });
package/index.js CHANGED
@@ -1,5 +1,3 @@
1
- import { imagePreviewBootstrap } from "./imagePreviewBootstrap";
1
+ import { imagePreviewBootstrap } from "./imagePreviewBootstrap.js";
2
2
 
3
3
  export { imagePreviewBootstrap };
4
-
5
- export const src = `(() => { "use strict";var A=Object.defineProperty;var R=(t,e,s)=>e in t?A(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var u=(t,e,s)=>(R(t,typeof e!="symbol"?e+"":e,s),s);const G=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],h=t=>{let e=0;for(let s=0;s<t.length;s++){const n=t[s],o=G.indexOf(n);e=e*83+o}return e},p=t=>{let e=t/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},b=t=>{let e=Math.max(0,Math.min(1,t));return e<=.0031308?Math.round(e*12.92*255+.5):Math.round((1.055*Math.pow(e,.4166666666666667)-.055)*255+.5)},P=t=>t<0?-1:1,E=(t,e)=>P(t)*Math.pow(Math.abs(t),e);class v extends Error{constructor(e){super(e),this.name="ValidationError",this.message=e}}const k=t=>{if(!t||t.length<6)throw new v("The blurhash string must be at least 6 characters");const e=h(t[0]),s=Math.floor(e/9)+1,n=e%9+1;if(t.length!==4+2*n*s)throw new v(\`blurhash length mismatch: length is \${t.length} but it should be \${4+2*n*s}\`)},D=t=>{const e=t>>16,s=t>>8&255,n=t&255;return[p(e),p(s),p(n)]},H=(t,e)=>{const s=Math.floor(t/361),n=Math.floor(t/19)%19,o=t%19;return[E((s-9)/9,2)*e,E((n-9)/9,2)*e,E((o-9)/9,2)*e]},S=(t,e,s,n)=>{k(t),n=n|1;const o=h(t[0]),a=Math.floor(o/9)+1,c=o%9+1,q=(h(t[1])+1)/166,g=new Array(c*a);for(let r=0;r<g.length;r++)if(r===0){const i=h(t.substring(2,6));g[r]=D(i)}else{const i=h(t.substring(4+r*2,6+r*2));g[r]=H(i,q*n)}const l=e*4,d=new Uint8ClampedArray(l*s);for(let r=0;r<s;r++)for(let i=0;i<e;i++){let I=0,x=0,C=0;for(let m=0;m<a;m++)for(let f=0;f<c;f++){const M=Math.cos(Math.PI*i*f/e)*Math.cos(Math.PI*r*m/s);let w=g[f+m*c];I+=w[0]*M,x+=w[1]*M,C+=w[2]*M}let B=b(I),T=b(x),y=b(C);d[4*i+0+r*l]=B,d[4*i+1+r*l]=T,d[4*i+2+r*l]=y,d[4*i+3+r*l]=255}return d};class L extends HTMLElement{constructor(){super();u(this,"loaded",!1);u(this,"sd");u(this,"onImageLoad",()=>{this.getAttribute("url")!==this.currentImageEl.src&&setTimeout(()=>{this.loaded=!0,this.render()},1500)});this.sd=this.attachShadow({mode:"open"}),this.sd.innerHTML='<slot name="preview"></slot>'}get currentImageEl(){return this.querySelector("img")}get currentCanvasEl(){return this.querySelector("canvas")}connectedCallback(){this.currentImageEl.complete&&this.onImageLoad(),this.currentImageEl.addEventListener("load",this.onImageLoad)}attributeChangedCallback(s,n,o){if(s==="preview"){const a=JSON.parse(o);O(this.currentCanvasEl,a)}else s==="url"&&o!==this.currentImageEl.getAttribute("src")&&(this.loaded=!1,this.currentImageEl.src=o||"");this.render()}render(){this.sd.innerHTML=\`<slot name="\${this.loaded?"image":"preview"}"></slot>\`}}u(L,"observedAttributes",["preview","url"]);customElements.get("uikit-image")||customElements.define("uikit-image",L);function O(t,e){const{w:s,h:n}=e;t.width=s,t.height=n;const o=S(e.blurhash,s,n),a=t.getContext("2d"),c=a.createImageData(s,n);c.data.set(o),a.putImageData(c,0,0)} })();`;
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "next-blurhash-previews",
3
- "version": "0.0.2",
3
+ "version": "0.0.3-beta11",
4
4
  "description": "",
5
5
  "main": "index.js",
6
+ "module": "index.js",
6
7
  "bin": {
7
- "next-blurhash-markdown": "./bin/markdown-sync.js"
8
+ "blurhash-markdown": "./bin/markdown-sync.js"
8
9
  },
9
10
  "scripts": {
10
11
  "test": "echo \"Error: no test specified\" && exit 1",
11
12
  "build": "vite build",
12
13
  "build-watch": "vite build -w",
13
- "prepublish": "npm run build"
14
+ "prepare": "npm run build"
14
15
  },
15
16
  "type": "module",
16
17
  "repository": {
@@ -30,10 +31,12 @@
30
31
  "blurhash": "^1.1.5",
31
32
  "colors": "^1.4.0",
32
33
  "glob": "^8.0.3",
34
+ "install": "^0.13.0",
33
35
  "next": "^12.2.0",
34
36
  "node-fetch": "^3.2.6",
35
- "prettier": "^2.7.1",
37
+ "npm": "^8.15.1",
36
38
  "remark": "^14.0.2",
39
+ "remark-frontmatter": "^4.0.1",
37
40
  "retext": "^8.1.0",
38
41
  "sharp": "^0.30.7",
39
42
  "to-vfile": "^7.2.3",
package/.prettierrc DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "arrowParens": "avoid"
3
- }
package/img1.png DELETED
Binary file
package/img5.png DELETED
Binary file
package/junk.js DELETED
@@ -1 +0,0 @@
1
- "use strict";var B=Object.defineProperty;var T=(t,e,s)=>e in t?B(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var a=(t,e,s)=>(T(t,typeof e!="symbol"?e+"":e,s),s);const k=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","#","$","%","*","+",",","-",".",":",";","=","?","@","[","]","^","_","{","|","}","~"],h=t=>{let e=0;for(let s=0;s<t.length;s++){const n=t[s],o=k.indexOf(n);e=e*83+o}return e},p=t=>{let e=t/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},b=t=>{let e=Math.max(0,Math.min(1,t));return e<=.0031308?Math.round(e*12.92*255+.5):Math.round((1.055*Math.pow(e,.4166666666666667)-.055)*255+.5)},A=t=>t<0?-1:1,v=(t,e)=>A(t)*Math.pow(Math.abs(t),e);class C extends Error{constructor(e){super(e),this.name="ValidationError",this.message=e}}const G=t=>{if(!t||t.length<6)throw new C("The blurhash string must be at least 6 characters");const e=h(t[0]),s=Math.floor(e/9)+1,n=e%9+1;if(t.length!==4+2*n*s)throw new C(\`blurhash length mismatch: length is \${t.length} but it should be \${4+2*n*s}\`)},V=t=>{const e=t>>16,s=t>>8&255,n=t&255;return[p(e),p(s),p(n)]},D=(t,e)=>{const s=Math.floor(t/361),n=Math.floor(t/19)%19,o=t%19;return[v((s-9)/9,2)*e,v((n-9)/9,2)*e,v((o-9)/9,2)*e]},H=(t,e,s,n)=>{G(t),n=n|1;const o=h(t[0]),c=Math.floor(o/9)+1,l=o%9+1,x=(h(t[1])+1)/166,g=new Array(l*c);for(let r=0;r<g.length;r++)if(r===0){const i=h(t.substring(2,6));g[r]=V(i)}else{const i=h(t.substring(4+r*2,6+r*2));g[r]=D(i,x*n)}const d=e*4,u=new Uint8ClampedArray(d*s);for(let r=0;r<s;r++)for(let i=0;i<e;i++){let y=0,E=0,I=0;for(let m=0;m<c;m++)for(let f=0;f<l;f++){const w=Math.cos(Math.PI*i*f/e)*Math.cos(Math.PI*r*m/s);let M=g[f+m*l];y+=M[0]*w,E+=M[1]*w,I+=M[2]*w}let L=b(y),P=b(E),q=b(I);u[4*i+0+r*d]=L,u[4*i+1+r*d]=P,u[4*i+2+r*d]=q,u[4*i+3+r*d]=255}return u};class R extends HTMLElement{constructor(){super();a(this,"isReady",!1);a(this,"loaded",!1);a(this,"sd");a(this,"mo");a(this,"checkReady",()=>{this.currentImageEl&&this.currentCanvasEl&&(this.ready(),this.mo.disconnect())});a(this,"onImageLoad",()=>{this.getAttribute("url")!==this.currentImageEl.src&&setTimeout(()=>{this.loaded=!0,this.render()},1500)});this.sd=this.attachShadow({mode:"open"}),this.sd.innerHTML='<slot name="preview"></slot>'}get currentImageEl(){return this.querySelector("img")}get currentCanvasEl(){return this.querySelector("canvas")}connectedCallback(){this.mo=new MutationObserver(this.checkReady),this.mo.observe(this,{subtree:!0,childList:!0,attributes:!1})}ready(){this.isReady=!0,this.currentImageEl.complete&&this.onImageLoad(),this.currentImageEl.addEventListener("load",this.onImageLoad),this.loaded||this.updatePreview()}attributeChangedCallback(s,n,o){!this.isReady||(s==="preview"?this.updatePreview():s==="url"&&(this.loaded=!1),this.render())}updatePreview(){const s=JSON.parse(this.getAttribute("preview"));O(this.currentCanvasEl,s)}render(){this.sd.innerHTML=\`<slot name="\${this.loaded?"image":"preview"}"></slot>\`}}a(R,"observedAttributes",["preview","url"]);customElements.get("uikit-image")||customElements.define("uikit-image",R);function O(t,e){const{w:s,h:n}=e;t.width=s,t.height=n;const o=H(e.blurhash,s,n),c=t.getContext("2d"),l=c.createImageData(s,n);l.data.set(o),c.putImageData(l,0,0)}
@@ -1,3 +0,0 @@
1
- {
2
- "extends": "next/core-web-vitals"
3
- }
@@ -1,34 +0,0 @@
1
- This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2
-
3
- ## Getting Started
4
-
5
- First, run the development server:
6
-
7
- ```bash
8
- npm run dev
9
- # or
10
- yarn dev
11
- ```
12
-
13
- Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
14
-
15
- You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
16
-
17
- [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
18
-
19
- The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
20
-
21
- ## Learn More
22
-
23
- To learn more about Next.js, take a look at the following resources:
24
-
25
- - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
26
- - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
27
-
28
- You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
29
-
30
- ## Deploy on Vercel
31
-
32
- The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
33
-
34
- Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
@@ -1,11 +0,0 @@
1
- ![A](./img1.png)
2
-
3
- <some-component>
4
- <p>Hello</p>
5
- </some-component>
6
-
7
- Yo
8
-
9
- ![external image](https://d193qjyckdxivp.cloudfront.net/medium-covers/573d1b97120426ef0078aa92/fcb820e4-36e3-4741-a3de-6994c46a66cc.jpg)
10
-
11
- ![](./img1.png)
@@ -1,10 +0,0 @@
1
- ![A](./img1.png)
2
-
3
- <some-component>
4
- <p>Hello</p>
5
- </some-component>
6
-
7
- Yo
8
-
9
- ![external image](https://d193qjyckdxivp.cloudfront.net/medium-covers/573d1b97120426ef0078aa92/fcb820e4-36e3-4741-a3de-6994c46a66cc.jpg)
10
-
@@ -1,10 +0,0 @@
1
- ![A](./img1.png)
2
-
3
- <some-component>
4
- <p>Hello</p>
5
- </some-component>
6
-
7
- Yo
8
-
9
- ![external image](https://d193qjyckdxivp.cloudfront.net/medium-covers/573d1b97120426ef0078aa92/fcb820e4-36e3-4741-a3de-6994c46a66cc.jpg)
10
-
@@ -1,10 +0,0 @@
1
- ![A](./img1.png)
2
-
3
- <some-component>
4
- <p>Hello</p>
5
- </some-component>
6
-
7
- Yo
8
-
9
- ![external image](https://d193qjyckdxivp.cloudfront.net/medium-covers/573d1b97120426ef0078aa92/fcb820e4-36e3-4741-a3de-6994c46a66cc.jpg)
10
-
@@ -1,6 +0,0 @@
1
- /** @type {import('next').NextConfig} */
2
- const nextConfig = {
3
- reactStrictMode: true,
4
- }
5
-
6
- module.exports = nextConfig