/npm-astro-saferesource

๐ŸŽ Adds CSP-compliant inline scripts and styles to Astro! Featured on the official Astro integrations page https://astro.build/integrations/?search=igor.dvlpr ๐ŸŽ 

Primary LanguageAstroMIT LicenseMIT

๐Ÿ” <SafeResource />


๐ŸŽ Adds CSP-compliant inline scripts and styles to Astro! ๐ŸŽ 



๐Ÿ’– Support further development

I work hard for every project, including this one
and your support means a lot to me!

Consider buying me a coffee. โ˜•
Thank you for supporting my efforts! ๐Ÿ™๐Ÿ˜Š


Donate to igorskyflyer

@igorskyflyer




๐Ÿ“ƒ Table of contents



๐Ÿ•ต๐Ÿผ Usage

Install it by executing:

npm i -D "@igor.dvlpr/astro-saferesource"

In order to use it, all you need to do is wrap your existing inline script or style tags with the <SafeResource> component, i.e.:


before.astro

<script is:inline>
  console.log('Hello World')
</script>

after.astro

---
import SafeResource from '@igor.dvlpr/astro-saferesource'
---

<SafeResource>
  <script is:inline> // <-- do not forget to add is:inline, if not present
    console.log('Hello World')
  </script>
</SafeResource>

and the component will generate the following output:

after.html

<!-- other page markup -->

<script integrity="sha256-xhIA8fkWcujZdN5EjKW355zTO9eHOZu4D+SzAE4Qqik=">
  console.log('Hello World')
</script>

<!-- other page markup -->

Note

The component outputs a SHA-256 hash.


Caution

Do NOT forget to add is:inline to the element or else Astro will remove it from the <SafeResource> component in order to optimize it.


Tip

The component will log the page, type of resource (script/style) and the generated hashes in the console of the IDE.


โœจ Examples

example.astro

---
import SafeResource from '@igor.dvlpr/astro-saferesource'
import Layout from '../layouts/Layout.astro'
---

<Layout title="Welcome to Astro">
  <main style="color: wheat;">
    <SafeResource>
      <script is:inline>
        document.addEventListener('DOMContentLoaded', () => {
          const easyNav = document.getElementById('easy-nav')
          const easyShow = easyNav.getAttribute('data-show')

          if (
            easyShow === 'whenNeeded' &&
            document.documentElement.scrollHeight > window.innerHeight
          ) {
            easyNav.className = 'show'
          }
        })
      </script>
    </SafeResource>

    <SafeResource>
      <style is:inline>
        .eren-jaeger {
          color: red;
        }
      </style>
    </SafeResource>
  </main>
</Layout>

๐Ÿ“ Changelog

๐Ÿ“‘ The changelog is available here: CHANGELOG.md.


๐Ÿชช License

Licensed under the MIT license which is available here, MIT license.


๐Ÿงฌ Related

@igor.dvlpr/astro-post-excerpt

โญ An Astro component that renders post excerpts for your Astro blog - directly from your Markdown and MDX files. Astro v2+ collections are supported as well! ๐Ÿ’Ž


@igor.dvlpr/astro-easynav-button

๐Ÿงญ Add an easy-to-use navigational button (jump to top/bottom) to your Astro site. ๐Ÿ”ผ


@igor.dvlpr/magic-queryselector

๐Ÿช„ A TypeScript-types patch for querySelector/querySelectorAll, make them return types you expect them to! ๐Ÿ”ฎ


@igor.dvlpr/zep

๐Ÿง  Zep is a zero-dependency, efficient debounce module. โฐ


@igor.dvlpr/keppo

๐ŸŽก Parse, manage, compare and output SemVer-compatible version numbers. ๐Ÿ›ก



๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป Author

Created by Igor Dimitrijeviฤ‡ (@igorskyflyer).