netlify 23.3.1 → 23.4.0

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.
@@ -0,0 +1,10 @@
1
+ import type { DeployEvent } from './status-cb.js';
2
+ interface UploadSourceZipOptions {
3
+ sourceDir: string;
4
+ uploadUrl: string;
5
+ filename: string;
6
+ statusCb?: (status: DeployEvent) => void;
7
+ }
8
+ export declare const uploadSourceZip: ({ sourceDir, uploadUrl, filename, statusCb, }: UploadSourceZipOptions) => Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=upload-source-zip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-source-zip.d.ts","sourceRoot":"","sources":["../../../src/utils/deploy/upload-source-zip.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAIjD,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CACzC;AAwFD,eAAO,MAAM,eAAe,GAAU,+CAKnC,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAiDvC,CAAA"}
@@ -0,0 +1,123 @@
1
+ import { execFile } from 'child_process';
2
+ import { readFile } from 'fs/promises';
3
+ import { join } from 'path';
4
+ import { promisify } from 'util';
5
+ import { platform } from 'os';
6
+ import fetch from 'node-fetch';
7
+ import { log, warn } from '../command-helpers.js';
8
+ import { temporaryDirectory } from '../temporary-file.js';
9
+ const execFileAsync = promisify(execFile);
10
+ const DEFAULT_IGNORE_PATTERNS = [
11
+ 'node_modules',
12
+ '.git',
13
+ '.netlify',
14
+ '.next',
15
+ 'dist',
16
+ 'build',
17
+ '.nuxt',
18
+ '.output',
19
+ '.vercel',
20
+ '__pycache__',
21
+ '.venv',
22
+ '.env',
23
+ '.DS_Store',
24
+ 'Thumbs.db',
25
+ '*.log',
26
+ '.nyc_output',
27
+ 'coverage',
28
+ '.cache',
29
+ '.tmp',
30
+ '.temp',
31
+ ];
32
+ const createSourceZip = async ({ sourceDir, filename, statusCb, }) => {
33
+ // Check for Windows - this feature is not supported on Windows
34
+ if (platform() === 'win32') {
35
+ throw new Error('Source zip upload is not supported on Windows');
36
+ }
37
+ const tmpDir = temporaryDirectory();
38
+ const zipPath = join(tmpDir, filename);
39
+ statusCb({
40
+ type: 'source-zip-upload',
41
+ msg: `Creating source zip...`,
42
+ phase: 'start',
43
+ });
44
+ // Create exclusion list for zip command
45
+ const excludeArgs = DEFAULT_IGNORE_PATTERNS.flatMap((pattern) => ['-x', pattern]);
46
+ // Use system zip command to create the archive
47
+ await execFileAsync('zip', ['-r', zipPath, '.', ...excludeArgs], {
48
+ cwd: sourceDir,
49
+ maxBuffer: 1024 * 1024 * 100, // 100MB buffer
50
+ });
51
+ return zipPath;
52
+ };
53
+ const uploadZipToS3 = async (zipPath, uploadUrl, statusCb) => {
54
+ const zipBuffer = await readFile(zipPath);
55
+ const sizeMB = (zipBuffer.length / 1024 / 1024).toFixed(2);
56
+ statusCb({
57
+ type: 'source-zip-upload',
58
+ msg: `Uploading source zip (${sizeMB} MB)...`,
59
+ phase: 'progress',
60
+ });
61
+ const response = await fetch(uploadUrl, {
62
+ method: 'PUT',
63
+ body: zipBuffer,
64
+ headers: {
65
+ 'Content-Type': 'application/zip',
66
+ 'Content-Length': zipBuffer.length.toString(),
67
+ },
68
+ });
69
+ if (!response.ok) {
70
+ throw new Error(`Failed to upload zip: ${response.statusText}`);
71
+ }
72
+ };
73
+ export const uploadSourceZip = async ({ sourceDir, uploadUrl, filename, statusCb = () => { }, }) => {
74
+ let zipPath;
75
+ try {
76
+ // Create zip from source directory
77
+ try {
78
+ zipPath = await createSourceZip({ sourceDir, filename, statusCb });
79
+ }
80
+ catch (error) {
81
+ const errorMsg = error instanceof Error ? error.message : String(error);
82
+ statusCb({
83
+ type: 'source-zip-upload',
84
+ msg: `Failed to create source zip: ${errorMsg}`,
85
+ phase: 'error',
86
+ });
87
+ warn(`Failed to create source zip: ${errorMsg}`);
88
+ throw error;
89
+ }
90
+ // Upload to S3
91
+ try {
92
+ await uploadZipToS3(zipPath, uploadUrl, statusCb);
93
+ }
94
+ catch (error) {
95
+ const errorMsg = error instanceof Error ? error.message : String(error);
96
+ statusCb({
97
+ type: 'source-zip-upload',
98
+ msg: `Failed to upload source zip: ${errorMsg}`,
99
+ phase: 'error',
100
+ });
101
+ warn(`Failed to upload source zip: ${errorMsg}`);
102
+ throw error;
103
+ }
104
+ statusCb({
105
+ type: 'source-zip-upload',
106
+ msg: `Source zip uploaded successfully`,
107
+ phase: 'stop',
108
+ });
109
+ log(`✔ Source code uploaded`);
110
+ }
111
+ finally {
112
+ // Clean up temporary zip file
113
+ if (zipPath) {
114
+ try {
115
+ await import('fs/promises').then((fs) => fs.unlink(zipPath));
116
+ }
117
+ catch {
118
+ // Ignore cleanup errors
119
+ }
120
+ }
121
+ }
122
+ };
123
+ //# sourceMappingURL=upload-source-zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-source-zip.js","sourceRoot":"","sources":["../../../src/utils/deploy/upload-source-zip.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "netlify",
3
- "version": "23.3.1",
3
+ "version": "23.4.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "netlify",
9
- "version": "23.3.1",
9
+ "version": "23.4.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "dependencies": {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "netlify",
3
3
  "description": "Netlify command line tool",
4
- "version": "23.3.1",
4
+ "version": "23.4.0",
5
5
  "author": "Netlify Inc.",
6
6
  "type": "module",
7
7
  "engines": {