npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

strapi-plugin-aws-cloudfront

v1.0.0

Published

Invalidate path in Aws CloudFront in terms of content type

Downloads

2

Readme

Strapi plugin aws-cloudfront

🔗 Links

⚙️ Versions

Tested with Strapi v4 (current)

⏳ Installation

Via Strapi Markerplace

As a ✅ verified plugin by Strapi team we're available on the Strapi Marketplace as well as In-App Marketplace where you can follow the installation instructions.

Via command line

It's recommended to use yarn to install this plugin within your Strapi project. You can install yarn with these docs.

yarn add strapi-plugin-aws-cloudfront@latest

After successful installation you've to re-build your Strapi instance. To archive that simply use:

yarn build
yarn develop

or just run Strapi in the development mode with --watch-admin option:

yarn develop --watch-admin

🔧 Configuration

./config/plugins.js or ./config/plugins.ts for TypeScript projects:

| Option | Default | Description | |--------------------------------------------------------------|---------|-----------------------------------------------------------------------------------------| | client | {} | | | client.distributionId | | The distribution id to connect to the CloudFront | | bulk | true | Activate or not bulk mode (recommended) | | bulkTimeout | 500 | Timeout for the bulk mode (in milliseconds) | | defaultConfig | {} | | | defaultConfig.defaultLocale | | Set the default local | | defaultConfig.prefixDefaultLocale | | Prefix the path with the default locale (only if prefixLocalization is set to true) | | defaultConfig.prefixLocalization | | Prefix the path with the locale (except default locale) | | defaultConfig.noTrailingSlash | | Remove the trailing slash at the end of the url | | contentTypes | {} | | | contentTypes.<my-content-type-name>.path | [] | List of path to invalidate | | contentTypes.<my-content-type-name>.localizedPath | {} | See below | | contentTypes.<my-content-type-name>.localizedPath.<locale> | [] | List of path to invalidate |

Example

module.exports = ({ env }) => ({
  // ...
  'aws-cloudfront': {
    enabled: true,
    config: {
      client: {
        distributionId: env('WEBSITE_CDN'),
      },
      bulk: true, // invalidate multiple urls in one call (default: true) (recommended)
      bulkTimeout: 500, // milliseconds (default: 500)
      defaultConfig: {
        defaultLocale: 'fr', // default locale (default: empty)
        prefixDefaultLocale: true, // prefix for the default locale (default: false)
        prefixLocalization: true, // prefix url with /{locale}. Eg: /fr for french locale (default: false)
        noTrailingSlash: true, // remove trailing slash at the end of url (default: false)
      },
      contentTypes: {
        'my-content-type-name': {
          prefixLocalization: false, // override defaultConfig.prefixLocalization
          path: ['/*'], // invalidate all pages
        },
        'homepage': {
          localizedPath: {
            fr: ['/accueil'],
            en: ['/home'],
          },
        },
        'article': {
          localizedPath: {
            fr: ['/article/:slug'], // use the `slug` attribute value of `article` content type
            en: ['/article/:slug'],
          },
        },
      },
    },
  },
  // ...
})

The cache will be invalidate when :

  • For non-published content :
    • beforeUpdate
    • beforeUpdateMany
    • beforeDelete
    • beforeDeleteMany
    • afterUpdate
    • afterUpdateMany
  • For published content :
    • If old content was published :
      • beforeUpdate
      • beforeUpdateMany
      • beforeDelete
      • beforeDeleteMany
    • If new content is published :
      • afterUpdate
      • afterUpdateMany

See more about lifecycle events.

In this example:

  • Edit my-content-type-name invalidate /*
  • Edit homepage in fr invalidate /fr/accueil
  • Edit homepage in en invalidate /en/home
  • Edit the slug article in en invalidate /en/article/old-slug and /en/article/new-slug

▶️ Invalidate cache with service

You can invalidate some path with the service.

Example in src/api/my-api-name/content-types/my-content-type-name/lifecycles.js:

module.exports = {
  afterUpdate(event) {
    strapi.plugin('aws-cloudfront').service('cloudfront').invalidateByEntry('my-content-type-name', event.result) // need to defined the content type in plugin configurations (see above)
    strapi.plugin('aws-cloudfront').service('cloudfront').invalidate(`/some-url`)
  },
}