Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ci] release #206

Merged
merged 2 commits into from
Mar 28, 2024
Merged

[ci] release #206

merged 2 commits into from
Mar 28, 2024

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Mar 28, 2024

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@astrojs/[email protected]

Major Changes

  • #159 adb8bf2a4caeead9a1a255740c7abe8666a6f852 Thanks @alexanderniebuhr! - Updates and prepares the adapter to be more flexibile, stable and composable for the future. Includes several breaking changes.

    Upgrade Guide

    We are commited to provide a smooth upgrade path for our users. This guide will describe what has changed from v9.x to v10 to help you to migrate your existing projects to the latest version of the adapter. For complete documentation of all v10 configuration settings and usage, please see the current, updated Cloudflare adapter documentation.

    We will provide at least 4 weeks of limited maintanance support for the previous version 9 of the adapter. Please plan to upgrade your project within this time frame, using the instructions below.

    Adapter's mode option & Cloudflare Functions

    The mode option has been removed from the adapter. The adapter now defaults to the previous advanced mode and this is the only official supported option moving forward.

    If you are already using mode: 'advanced' in your astro.config.mjs file, you can safely remove it.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		mode: 'advanced',
    	}),
    });

    If you are using mode: 'directory', and don't have any custom Cloudflare functions in the /function folder, you should be able to remove the mode option, without any issues.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		mode: 'directory',
    	}),
    });

    If you are using mode: 'directory', and you have custom Cloudflare functions in the /function folder, you will need to manually migrate them to Astro Server Endpoints (API Routes). If you need to access Cloudflare Bindings, you can use ctx.locals. For further reference, please check the Adapters Documentation on Cloudflare Runtime Usage.

    Adapter's functionPerRoute option

    The functionPerRoute option has been removed from the adapter. The adapter now defaults to the previous false value. If you are using functionPerRoute: true in your astro.config.mjs file, you can safely remove it. This change will not break any existing projects, but you will no longer be generating a single function for each route.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		functionPerRoute: true,
    	}),
    });

    Local Runtime

    The adapter replaces the runtime options with a new set of platformProxy options to enable local runtime support when using astro dev.

    If you are already using a wrangler.toml file, you can safely replace your existing runtime options with the appropriate platformProxy options.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		runtime: {
    -			mode: 'local',
    -			type: 'workers',
    -		},
    +		platformProxy: {
    +			enabled: true,
    +		},
    	}),
    });

    If you define your bindings in the astro.config.mjs file, you need to first migrate your project to use a wrangler.toml configuration file for defining your bindings. You can find more information on how to do this in the Cloudflare docs about wrangler. Then, replace runtime options with the new corresponding platformProxy options as above.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		runtime: {
    -			mode: 'local',
    -			type: 'pages',
    -			bindings: {
    -				// ...
    -			},
    -		},
    +		platformProxy: {
    +			enabled: true,
    +		},
    	}),
    });

    If you have typed locals in your ./src/env.d.ts file, you need to run wrangler types in your project and update the file.

    /// <reference types="astro/client" />
    
    - type KVNamespace = import('@cloudflare/workers-types/experimental').KVNamespace;
    - type ENV = {
    -   SERVER_URL: string;
    -   KV_BINDING: KVNamespace;
    - };
    
    - type Runtime = import('@astrojs/cloudflare').AdvancedRuntime<ENV>;
    + type Runtime = import('@astrojs/cloudflare').Runtime<Env>;
    
    declare namespace App {
      interface Locals extends Runtime {
    
          name: string;
          surname: string;
        };
      }
    }

    Routes

    The routes.strategy option has been removed as you will no longer have the option to choose a strategy in v10 of this adpater.

    If you are using routes.strategy, you can remove it. You might observe a different dist/_routes.json file, but it should not affect your project's behavior.

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    -		routes: {
    -			strategy: 'include',
    -		},
    	}),
    });

    Additionally the routes.include & routes.exclude options have changed their name and type. If you were previously using them, move these to the new routes.extend property and update their types:

    import cloudflare from '@astrojs/cloudflare';
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
    	adapter: cloudflare({
    		routes: {
    -			include: ['/api/*'],
    -			exclude: ['/fonts/*'],
    +			extend: {
    +				include: [{ pattern: '/api/*' }],
    +				exclude: [{ pattern: '/fonts/*' }],
    +			},
    		},
    	}),
    });

    process.env

    In the old version of the adapter we used to expose all the environment variables to process.env. This is no longer the case, as it was unsafe. If you need to use environment variables, you need to use either Astro.locals.runtime.env or context.locals.runtime.env. There is no way to access the environment variables directly from process.env or in the global scope.

    If you need to access the environment variables in global scope, you should refactor your code to pass the environment variables as arguments to your function or file.

    If you rely on any third library that uses process.env, please open an issue and we can investigate what the best way to handle this is.

    Node.js APIs compatibility

    The adapter still supports the same Node.js APIs as Cloudflare does, but you need to adapt your vite configuration and enable the Cloudflare nodejs_compat flag.

    import {defineConfig} from "astro/config";
    import cloudflare from '@astrojs/cloudflare';
    
    export default defineConfig({
      adapter: cloudflare({}),
      output: 'server',
    +  vite: {
    +    ssr: {
    +      external: ['node:buffer'],
    +    },
    +  },
    })

@alexanderniebuhr alexanderniebuhr merged commit 38da2ca into main Mar 28, 2024
8 checks passed
@alexanderniebuhr alexanderniebuhr deleted the changeset-release/main branch March 28, 2024 11:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant