@netlify/edge-bundler 14.8.0 → 14.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,7 +32,9 @@ export class DenoBridge {
32
32
  this.onAfterDownload = options.onAfterDownload;
33
33
  this.onBeforeDownload = options.onBeforeDownload;
34
34
  this.useGlobal = options.useGlobal ?? true;
35
- const useNextDeno = options.featureFlags?.edge_bundler_generate_tarball || options.featureFlags?.edge_bundler_deno_v2;
35
+ const useNextDeno = options.featureFlags?.edge_bundler_dry_run_generate_tarball ||
36
+ options.featureFlags?.edge_bundler_generate_tarball ||
37
+ options.featureFlags?.edge_bundler_deno_v2;
36
38
  this.versionRange = options.versionRange ?? (useNextDeno ? NEXT_DENO_VERSION_RANGE : DENO_VERSION_RANGE);
37
39
  }
38
40
  async downloadBinary() {
@@ -62,8 +62,8 @@ export const bundle = async (sourceDirectories, distDirectory, tomlDeclarations
62
62
  vendorDirectory,
63
63
  });
64
64
  const bundles = [];
65
- if (featureFlags.edge_bundler_generate_tarball) {
66
- bundles.push(await bundleTarball({
65
+ if (featureFlags.edge_bundler_generate_tarball || featureFlags.edge_bundler_dry_run_generate_tarball) {
66
+ const tarballPromise = bundleTarball({
67
67
  basePath,
68
68
  buildID,
69
69
  debug,
@@ -73,7 +73,24 @@ export const bundle = async (sourceDirectories, distDirectory, tomlDeclarations
73
73
  featureFlags,
74
74
  importMap: importMap.clone(),
75
75
  vendorDirectory: vendor?.directory,
76
- }));
76
+ });
77
+ if (featureFlags.edge_bundler_dry_run_generate_tarball) {
78
+ try {
79
+ await tarballPromise;
80
+ logger.system('Dry run: Tarball bundle generated successfully.');
81
+ }
82
+ catch (error) {
83
+ if (error instanceof Error) {
84
+ logger.system(`Dry run: Tarball bundle generation failed: ${error.message}`);
85
+ }
86
+ else {
87
+ logger.system(`Dry run: Tarball bundle generation failed: ${String(error)}`);
88
+ }
89
+ }
90
+ }
91
+ if (featureFlags.edge_bundler_generate_tarball) {
92
+ bundles.push(await tarballPromise);
93
+ }
77
94
  }
78
95
  if (vendor) {
79
96
  importMap.add(vendor.importMap);
@@ -655,4 +655,63 @@ describe.skipIf(lt(denoVersion, '2.4.3'))('Produces a tarball bundle', () => {
655
655
  await cleanup();
656
656
  await rm(vendorDirectory.path, { force: true, recursive: true });
657
657
  });
658
+ describe('Dry-run tarball generation flag enabled', () => {
659
+ test('Logs success message when tarball generation succeeded', async () => {
660
+ const systemLogger = vi.fn();
661
+ const { basePath, cleanup, distPath } = await useFixture('imports_node_builtin', { copyDirectory: true });
662
+ const declarations = [
663
+ {
664
+ function: 'func1',
665
+ path: '/func1',
666
+ },
667
+ ];
668
+ await bundle([join(basePath, 'netlify/edge-functions')], distPath, declarations, {
669
+ basePath,
670
+ configPath: join(basePath, '.netlify/edge-functions/config.json'),
671
+ featureFlags: {
672
+ edge_bundler_dry_run_generate_tarball: true,
673
+ edge_bundler_generate_tarball: false,
674
+ },
675
+ systemLogger,
676
+ });
677
+ expect(systemLogger).toHaveBeenCalledWith('Dry run: Tarball bundle generated successfully.');
678
+ const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8');
679
+ const manifest = JSON.parse(manifestFile);
680
+ expect(manifest.bundles.length).toBe(1);
681
+ expect(manifest.bundles[0].format).toBe('eszip2');
682
+ await cleanup();
683
+ });
684
+ test('Logs error message when tarball generation failed and does not fail the overall build', async () => {
685
+ const systemLogger = vi.fn();
686
+ vi.resetModules();
687
+ vi.doMock('./formats/tarball.js', () => ({
688
+ bundle: vi.fn().mockRejectedValue(new Error('Simulated tarball bundling failure')),
689
+ }));
690
+ const { bundle: bundleUnderTest } = await import('./bundler.js');
691
+ const { basePath, cleanup, distPath } = await useFixture('imports_node_builtin', { copyDirectory: true });
692
+ const sourceDirectory = join(basePath, 'functions');
693
+ const declarations = [
694
+ {
695
+ function: 'func1',
696
+ path: '/func1',
697
+ },
698
+ ];
699
+ await expect(bundleUnderTest([sourceDirectory], distPath, declarations, {
700
+ basePath,
701
+ configPath: join(sourceDirectory, 'config.json'),
702
+ featureFlags: {
703
+ edge_bundler_dry_run_generate_tarball: true,
704
+ edge_bundler_generate_tarball: false,
705
+ },
706
+ systemLogger,
707
+ })).resolves.toBeDefined();
708
+ expect(systemLogger).toHaveBeenCalledWith(`Dry run: Tarball bundle generation failed: Simulated tarball bundling failure`);
709
+ const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8');
710
+ const manifest = JSON.parse(manifestFile);
711
+ expect(manifest.bundles.length).toBe(1);
712
+ expect(manifest.bundles[0].format).toBe('eszip2');
713
+ await cleanup();
714
+ vi.resetModules();
715
+ });
716
+ });
658
717
  }, 10_000);
@@ -1,11 +1,13 @@
1
1
  declare const defaultFlags: {
2
2
  edge_bundler_generate_tarball: boolean;
3
+ edge_bundler_dry_run_generate_tarball: boolean;
3
4
  edge_bundler_deno_v2: boolean;
4
5
  };
5
6
  type FeatureFlag = keyof typeof defaultFlags;
6
7
  type FeatureFlags = Partial<Record<FeatureFlag, boolean>>;
7
8
  declare const getFlags: (input?: Record<string, boolean>, flags?: {
8
9
  edge_bundler_generate_tarball: boolean;
10
+ edge_bundler_dry_run_generate_tarball: boolean;
9
11
  edge_bundler_deno_v2: boolean;
10
12
  }) => FeatureFlags;
11
13
  export { defaultFlags, getFlags };
@@ -1,6 +1,7 @@
1
1
  const defaultFlags = {
2
2
  edge_bundler_generate_tarball: false,
3
- edge_bundler_deno_v2: false,
3
+ edge_bundler_dry_run_generate_tarball: false,
4
+ edge_bundler_deno_v2: true,
4
5
  };
5
6
  const getFlags = (input = {}, flags = defaultFlags) => Object.entries(flags).reduce((result, [key, defaultValue]) => ({
6
7
  ...result,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netlify/edge-bundler",
3
- "version": "14.8.0",
3
+ "version": "14.8.2",
4
4
  "description": "Intelligently prepare Netlify Edge Functions for deployment",
5
5
  "type": "module",
6
6
  "main": "./dist/node/index.js",
@@ -79,5 +79,5 @@
79
79
  "urlpattern-polyfill": "8.0.2",
80
80
  "uuid": "^11.0.0"
81
81
  },
82
- "gitHead": "01a7441fcbc82d415247bf990414ad937e9533c4"
82
+ "gitHead": "7ac1f1a5fa680e067ba0c8cd0f689d0667f89333"
83
83
  }