netlify-cli 19.1.6 → 20.0.0-pre.bb36158
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.
- package/bin/run.js +31 -22
- package/dist/commands/base-command.d.ts.map +1 -1
- package/dist/commands/base-command.js +7 -3
- package/dist/commands/base-command.js.map +1 -1
- package/dist/commands/database/constants.d.ts +4 -0
- package/dist/commands/database/constants.d.ts.map +1 -0
- package/dist/commands/database/constants.js +4 -0
- package/dist/commands/database/constants.js.map +1 -0
- package/dist/commands/database/database.d.ts +17 -0
- package/dist/commands/database/database.d.ts.map +1 -0
- package/dist/commands/database/database.js +22 -0
- package/dist/commands/database/database.js.map +1 -0
- package/dist/commands/database/dev-branch.d.ts +27 -0
- package/dist/commands/database/dev-branch.d.ts.map +1 -0
- package/dist/commands/database/dev-branch.js +145 -0
- package/dist/commands/database/dev-branch.js.map +1 -0
- package/dist/commands/database/drizzle.d.ts +6 -0
- package/dist/commands/database/drizzle.d.ts.map +1 -0
- package/dist/commands/database/drizzle.js +160 -0
- package/dist/commands/database/drizzle.js.map +1 -0
- package/dist/commands/database/index.d.ts +2 -0
- package/dist/commands/database/index.d.ts.map +1 -0
- package/dist/commands/database/index.js +2 -0
- package/dist/commands/database/index.js.map +1 -0
- package/dist/commands/database/init.d.ts +4 -0
- package/dist/commands/database/init.d.ts.map +1 -0
- package/dist/commands/database/init.js +131 -0
- package/dist/commands/database/init.js.map +1 -0
- package/dist/commands/database/status.d.ts +4 -0
- package/dist/commands/database/status.d.ts.map +1 -0
- package/dist/commands/database/status.js +71 -0
- package/dist/commands/database/status.js.map +1 -0
- package/dist/commands/database/utils.d.ts +47 -0
- package/dist/commands/database/utils.d.ts.map +1 -0
- package/dist/commands/database/utils.js +83 -0
- package/dist/commands/database/utils.js.map +1 -0
- package/dist/commands/dev/dev.d.ts +0 -1
- package/dist/commands/dev/dev.d.ts.map +1 -1
- package/dist/commands/dev/dev.js +2 -64
- package/dist/commands/dev/dev.js.map +1 -1
- package/dist/commands/dev/index.d.ts +2 -1
- package/dist/commands/dev/index.d.ts.map +1 -1
- package/dist/commands/dev/index.js +65 -1
- package/dist/commands/dev/index.js.map +1 -1
- package/dist/commands/{dev → dev-exec}/dev-exec.d.ts +0 -1
- package/dist/commands/dev-exec/dev-exec.d.ts.map +1 -0
- package/dist/commands/dev-exec/dev-exec.js +15 -0
- package/dist/commands/dev-exec/dev-exec.js.map +1 -0
- package/dist/commands/dev-exec/index.d.ts +3 -0
- package/dist/commands/dev-exec/index.d.ts.map +1 -0
- package/dist/commands/dev-exec/index.js +13 -0
- package/dist/commands/dev-exec/index.js.map +1 -0
- package/dist/commands/main.d.ts +0 -2
- package/dist/commands/main.d.ts.map +1 -1
- package/dist/commands/main.js +6 -2
- package/dist/commands/main.js.map +1 -1
- package/dist/commands/sites/sites-create-template.d.ts.map +1 -1
- package/dist/commands/sites/sites-create-template.js.map +1 -1
- package/dist/commands/status/status.d.ts.map +1 -1
- package/dist/commands/status/status.js +1 -7
- package/dist/commands/status/status.js.map +1 -1
- package/dist/lib/build.d.ts +2 -2
- package/dist/lib/build.d.ts.map +1 -1
- package/dist/lib/exec-fetcher.d.ts +1 -1
- package/dist/lib/exec-fetcher.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/detect-server-settings.d.ts.map +1 -1
- package/dist/utils/live-tunnel.js +1 -1
- package/dist/utils/live-tunnel.js.map +1 -1
- package/dist/utils/nodejs-compile-cache.d.ts +24 -0
- package/dist/utils/nodejs-compile-cache.d.ts.map +1 -0
- package/dist/utils/nodejs-compile-cache.js +44 -0
- package/dist/utils/nodejs-compile-cache.js.map +1 -0
- package/dist/utils/types.d.ts +8 -17
- package/dist/utils/types.d.ts.map +1 -1
- package/npm-shrinkwrap.json +95 -28
- package/package.json +3 -4
- package/dist/commands/dev/dev-exec.d.ts.map +0 -1
- package/dist/commands/dev/dev-exec.js +0 -21
- package/dist/commands/dev/dev-exec.js.map +0 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { carefullyWriteFile } from './utils.js';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs/promises';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
export const initDrizzle = async (command) => {
|
|
7
|
+
if (!command.project.root) {
|
|
8
|
+
throw new Error('Failed to initialize Drizzle in project. Project root not found.');
|
|
9
|
+
}
|
|
10
|
+
const opts = command.opts();
|
|
11
|
+
const devBranchUri = opts.devBranchUri;
|
|
12
|
+
const drizzleDevConfigFilePath = path.resolve(command.project.root, 'drizzle-dev.config.ts');
|
|
13
|
+
const drizzleConfigFilePath = path.resolve(command.project.root, 'drizzle-prod.config.ts');
|
|
14
|
+
const schemaFilePath = path.resolve(command.project.root, 'db/schema.ts');
|
|
15
|
+
const dbIndexFilePath = path.resolve(command.project.root, 'db/index.ts');
|
|
16
|
+
if (opts.overwrite) {
|
|
17
|
+
if (devBranchUri) {
|
|
18
|
+
await fs.writeFile(drizzleDevConfigFilePath, createDrizzleDevConfigContent(devBranchUri));
|
|
19
|
+
}
|
|
20
|
+
await fs.writeFile(drizzleConfigFilePath, drizzleConfig);
|
|
21
|
+
await fs.mkdir(path.resolve(command.project.root, 'db'), { recursive: true });
|
|
22
|
+
await fs.writeFile(schemaFilePath, exampleDrizzleSchema);
|
|
23
|
+
await fs.writeFile(dbIndexFilePath, exampleDbIndex);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
if (devBranchUri) {
|
|
27
|
+
await carefullyWriteFile(drizzleDevConfigFilePath, createDrizzleDevConfigContent(devBranchUri), command.project.root);
|
|
28
|
+
}
|
|
29
|
+
await carefullyWriteFile(drizzleConfigFilePath, drizzleConfig, command.project.root);
|
|
30
|
+
await fs.mkdir(path.resolve(command.project.root, 'db'), { recursive: true });
|
|
31
|
+
await carefullyWriteFile(schemaFilePath, exampleDrizzleSchema, command.project.root);
|
|
32
|
+
await carefullyWriteFile(dbIndexFilePath, exampleDbIndex, command.project.root);
|
|
33
|
+
}
|
|
34
|
+
const packageJsonPath = path.resolve(command.project.root, 'package.json');
|
|
35
|
+
if (devBranchUri) {
|
|
36
|
+
const gitignorePath = path.resolve(command.project.root, '.gitignore');
|
|
37
|
+
try {
|
|
38
|
+
const gitignoreContent = (await fs.readFile(gitignorePath)).toString();
|
|
39
|
+
if (!gitignoreContent.includes('drizzle-dev.config.ts')) {
|
|
40
|
+
await fs.writeFile(gitignorePath, `${gitignoreContent}\ndrizzle-dev.config.ts\n`, {
|
|
41
|
+
flag: 'a',
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
await fs.writeFile(gitignorePath, 'drizzle-dev.config.ts\n');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
50
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
52
|
+
packageJson.scripts = {
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
54
|
+
...(packageJson.scripts ?? {}),
|
|
55
|
+
...packageJsonScripts,
|
|
56
|
+
};
|
|
57
|
+
if (opts.overwrite) {
|
|
58
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
59
|
+
}
|
|
60
|
+
const answers = await inquirer.prompt([
|
|
61
|
+
{
|
|
62
|
+
type: 'confirm',
|
|
63
|
+
name: 'localDevBranch',
|
|
64
|
+
message: `Add a development database branch?`,
|
|
65
|
+
},
|
|
66
|
+
]);
|
|
67
|
+
if (answers.localDevBranch) {
|
|
68
|
+
console.log('cool');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!opts.overwrite) {
|
|
72
|
+
const answers = await inquirer.prompt([
|
|
73
|
+
{
|
|
74
|
+
type: 'confirm',
|
|
75
|
+
name: 'updatePackageJson',
|
|
76
|
+
message: `Add drizzle db commands to package.json?`,
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
if (answers.updatePackageJson) {
|
|
80
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
|
|
84
|
+
if (!Object.keys(packageJson?.devDependencies ?? {}).includes('drizzle-kit')) {
|
|
85
|
+
await spawnAsync(command.project.packageManager?.installCommand ?? 'npm install', ['drizzle-kit@latest', '-D'], {
|
|
86
|
+
stdio: 'inherit',
|
|
87
|
+
shell: true,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
|
|
91
|
+
if (!Object.keys(packageJson?.dependencies ?? {}).includes('drizzle-orm')) {
|
|
92
|
+
await spawnAsync(command.project.packageManager?.installCommand ?? 'npm install', ['drizzle-orm@latest'], {
|
|
93
|
+
stdio: 'inherit',
|
|
94
|
+
shell: true,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const drizzleConfig = `import { defineConfig } from 'drizzle-kit';
|
|
99
|
+
|
|
100
|
+
export default defineConfig({
|
|
101
|
+
dialect: 'postgresql',
|
|
102
|
+
dbCredentials: {
|
|
103
|
+
url: process.env.NETLIFY_DATABASE_URL!
|
|
104
|
+
},
|
|
105
|
+
schema: './db/schema.ts',
|
|
106
|
+
out: './migrations'
|
|
107
|
+
});`;
|
|
108
|
+
const createDrizzleDevConfigContent = (devBranchUri) => `import { defineConfig } from 'drizzle-kit';
|
|
109
|
+
|
|
110
|
+
export default defineConfig({
|
|
111
|
+
dialect: 'postgresql',
|
|
112
|
+
dbCredentials: {
|
|
113
|
+
url: '${devBranchUri}'
|
|
114
|
+
},
|
|
115
|
+
schema: './db/schema.ts',
|
|
116
|
+
out: './migrations'
|
|
117
|
+
});`;
|
|
118
|
+
const exampleDrizzleSchema = `import { integer, pgTable, varchar, text } from 'drizzle-orm/pg-core';
|
|
119
|
+
|
|
120
|
+
export const posts = pgTable('posts', {
|
|
121
|
+
id: integer().primaryKey().generatedAlwaysAsIdentity(),
|
|
122
|
+
title: varchar({ length: 255 }).notNull(),
|
|
123
|
+
content: text().notNull().default('')
|
|
124
|
+
});`;
|
|
125
|
+
const exampleDbIndex = `import { neon } from '@netlify/neon';
|
|
126
|
+
import { drizzle } from 'drizzle-orm/neon-http';
|
|
127
|
+
|
|
128
|
+
import * as schema from 'db/schema';
|
|
129
|
+
|
|
130
|
+
export const db = drizzle({
|
|
131
|
+
schema,
|
|
132
|
+
client: neon()
|
|
133
|
+
});`;
|
|
134
|
+
const packageJsonScripts = {
|
|
135
|
+
'db:generate': 'netlify dev:exec --context dev drizzle-kit generate',
|
|
136
|
+
'db:migrate': 'netlify dev:exec --context dev drizzle-kit migrate',
|
|
137
|
+
'db:studio': 'netlify dev:exec --context dev drizzle-kit studio',
|
|
138
|
+
'db:push': 'netlify dev:exec --context dev drizzle-kit push',
|
|
139
|
+
};
|
|
140
|
+
const spawnAsync = (command, args, options) => {
|
|
141
|
+
return new Promise((resolve, reject) => {
|
|
142
|
+
const child = spawn(command, args, options);
|
|
143
|
+
child.on('error', reject);
|
|
144
|
+
child.on('exit', (code) => {
|
|
145
|
+
if (code === 0) {
|
|
146
|
+
resolve(code);
|
|
147
|
+
}
|
|
148
|
+
const errorMessage = code ? `Process exited with code ${code.toString()}` : 'Process exited with no code';
|
|
149
|
+
reject(new Error(errorMessage));
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
export const createDrizzleDevConfig = async (command, opts) => {
|
|
154
|
+
if (!command.project.root) {
|
|
155
|
+
throw new Error('Failed to initialize Drizzle in project. Project root not found.');
|
|
156
|
+
}
|
|
157
|
+
const drizzleDevConfigFilePath = path.resolve(command.project.root, 'drizzle-dev.config.ts');
|
|
158
|
+
await carefullyWriteFile(drizzleDevConfigFilePath, createDrizzleDevConfigContent(opts.devBranchUri), command.project.root);
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=drizzle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../../src/commands/database/drizzle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/database/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/database/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAS5C,eAAO,MAAM,IAAI,aAAoB,YAAY,WAAW,WAAW,kBAgKtE,CAAA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import { getAccount, getExtension, installExtension } from './utils.js';
|
|
3
|
+
import { initDrizzle } from './drizzle.js';
|
|
4
|
+
import { NEON_DATABASE_EXTENSION_SLUG } from './constants.js';
|
|
5
|
+
import prettyjson from 'prettyjson';
|
|
6
|
+
import { log } from '../../utils/command-helpers.js';
|
|
7
|
+
import { createDevBranch } from './dev-branch.js';
|
|
8
|
+
export const init = async (_options, command) => {
|
|
9
|
+
const siteInfo = command.netlify.siteInfo;
|
|
10
|
+
if (!command.siteId) {
|
|
11
|
+
console.error(`The project must be linked with netlify link before initializing a database.`);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const initialOpts = command.opts();
|
|
15
|
+
const opts = command.opts();
|
|
16
|
+
if (!command.netlify.api.accessToken || !siteInfo.account_id || !siteInfo.name) {
|
|
17
|
+
throw new Error(`Please login with netlify login before running this command`);
|
|
18
|
+
}
|
|
19
|
+
const account = await getAccount(command, { accountId: siteInfo.account_id });
|
|
20
|
+
const netlifyToken = command.netlify.api.accessToken.replace('Bearer ', '');
|
|
21
|
+
const extension = await getExtension({
|
|
22
|
+
accountId: siteInfo.account_id,
|
|
23
|
+
token: netlifyToken,
|
|
24
|
+
slug: NEON_DATABASE_EXTENSION_SLUG,
|
|
25
|
+
});
|
|
26
|
+
if (!extension?.hostSiteUrl) {
|
|
27
|
+
throw new Error(`Failed to get extension host site url when installing extension`);
|
|
28
|
+
}
|
|
29
|
+
const installNeonExtension = async () => {
|
|
30
|
+
if (!account.name) {
|
|
31
|
+
throw new Error(`Failed to install extension "${extension.name}"`);
|
|
32
|
+
}
|
|
33
|
+
const installed = await installExtension({
|
|
34
|
+
accountId: siteInfo.account_id,
|
|
35
|
+
token: netlifyToken,
|
|
36
|
+
slug: NEON_DATABASE_EXTENSION_SLUG,
|
|
37
|
+
hostSiteUrl: extension.hostSiteUrl,
|
|
38
|
+
});
|
|
39
|
+
if (!installed) {
|
|
40
|
+
throw new Error(`Failed to install extension on team "${account.name}": "${extension.name}"`);
|
|
41
|
+
}
|
|
42
|
+
log(`Extension "${extension.name}" successfully installed on team "${account.name}"`);
|
|
43
|
+
};
|
|
44
|
+
if (!extension.installedOnTeam && !opts.yes) {
|
|
45
|
+
const answers = await inquirer.prompt([
|
|
46
|
+
{
|
|
47
|
+
type: 'confirm',
|
|
48
|
+
name: 'installExtension',
|
|
49
|
+
message: `The required extension "${extension.name}" is not installed on team "${account.name}", would you like to install it now?`,
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
if (answers.installExtension) {
|
|
53
|
+
await installNeonExtension();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!extension.installedOnTeam && opts.yes) {
|
|
60
|
+
await installNeonExtension();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Only prompt for drizzle if the user did not pass in the `--drizzle` or `--no-drizzle` option
|
|
64
|
+
*/
|
|
65
|
+
if (initialOpts.drizzle !== false && initialOpts.drizzle !== true && !initialOpts.yes) {
|
|
66
|
+
const answers = await inquirer.prompt([
|
|
67
|
+
{
|
|
68
|
+
type: 'confirm',
|
|
69
|
+
name: 'drizzle',
|
|
70
|
+
message: 'Use Drizzle?',
|
|
71
|
+
},
|
|
72
|
+
]);
|
|
73
|
+
command.setOptionValue('drizzle', answers.drizzle);
|
|
74
|
+
}
|
|
75
|
+
const answers = await inquirer.prompt([
|
|
76
|
+
{
|
|
77
|
+
type: 'confirm',
|
|
78
|
+
name: 'useDevBranch',
|
|
79
|
+
message: 'Use a development branch?',
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
82
|
+
command.setOptionValue('useDevBranch', answers.useDevBranch);
|
|
83
|
+
log(`Initializing a new database...`);
|
|
84
|
+
const hostSiteUrl = process.env.NEON_DATABASE_EXTENSION_HOST_SITE_URL ?? extension.hostSiteUrl;
|
|
85
|
+
const initEndpoint = new URL('/api/cli-db-init', hostSiteUrl).toString();
|
|
86
|
+
const currentUser = await command.netlify.api.getCurrentUser();
|
|
87
|
+
const headers = {
|
|
88
|
+
'Content-Type': 'application/json',
|
|
89
|
+
'nf-db-token': netlifyToken,
|
|
90
|
+
'nf-db-account-id': siteInfo.account_id,
|
|
91
|
+
'nf-db-site-id': command.siteId ?? '',
|
|
92
|
+
'nf-db-user-id': currentUser.id ?? '',
|
|
93
|
+
};
|
|
94
|
+
const req = await fetch(initEndpoint, {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
headers,
|
|
97
|
+
});
|
|
98
|
+
if (!req.ok) {
|
|
99
|
+
const error = (await req.json());
|
|
100
|
+
throw new Error(`Failed to initialize DB: ${error.message ?? 'Unknown error occurred'}`);
|
|
101
|
+
}
|
|
102
|
+
const res = (await req.json());
|
|
103
|
+
if (res.code !== 'DATABASE_INITIALIZED') {
|
|
104
|
+
throw new Error(`Failed to initialize DB: ${res.message ?? 'Unknown error'}`);
|
|
105
|
+
}
|
|
106
|
+
if (opts.useDevBranch || (opts.yes && opts.useDevBranch !== false)) {
|
|
107
|
+
log(`Setting up local database...`);
|
|
108
|
+
const { uri, name } = await createDevBranch({
|
|
109
|
+
headers,
|
|
110
|
+
command,
|
|
111
|
+
extension,
|
|
112
|
+
});
|
|
113
|
+
command.setOptionValue('devBranchUri', uri);
|
|
114
|
+
log(`Created new development branch: ${name}`);
|
|
115
|
+
}
|
|
116
|
+
log(`Initializing drizzle...`);
|
|
117
|
+
if (opts.drizzle || (opts.yes && opts.drizzle !== false)) {
|
|
118
|
+
await initDrizzle(command);
|
|
119
|
+
}
|
|
120
|
+
log(prettyjson.render({
|
|
121
|
+
'Current team': account.name,
|
|
122
|
+
'Current site': siteInfo.name,
|
|
123
|
+
[`${extension.name} extension`]: 'installed on team',
|
|
124
|
+
['Database status']: 'connected to site',
|
|
125
|
+
['Environment variables']: '',
|
|
126
|
+
[' NETLIFY_DATABASE_URL']: 'saved',
|
|
127
|
+
[' NETLIFY_DATABASE_URL_UNPOOLED']: 'saved',
|
|
128
|
+
}));
|
|
129
|
+
return;
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/database/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/database/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAM5C,eAAO,MAAM,MAAM,aAAoB,YAAY,WAAW,WAAW,kBAsExE,CAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { getAccount, getExtension, getSiteConfiguration } from './utils.js';
|
|
2
|
+
import { NEON_DATABASE_EXTENSION_SLUG } from './constants.js';
|
|
3
|
+
import prettyjson from 'prettyjson';
|
|
4
|
+
import { chalk, log } from '../../utils/command-helpers.js';
|
|
5
|
+
export const status = async (_options, command) => {
|
|
6
|
+
const siteInfo = command.netlify.siteInfo;
|
|
7
|
+
if (!command.siteId) {
|
|
8
|
+
throw new Error(`The project must be linked with netlify link before initializing a database.`);
|
|
9
|
+
}
|
|
10
|
+
if (!siteInfo.account_id) {
|
|
11
|
+
throw new Error(`No account id found for site ${command.siteId}`);
|
|
12
|
+
}
|
|
13
|
+
if (!command.netlify.api.accessToken) {
|
|
14
|
+
throw new Error(`You must be logged in with netlify login to check the status of the database`);
|
|
15
|
+
}
|
|
16
|
+
const netlifyToken = command.netlify.api.accessToken.replace('Bearer ', '');
|
|
17
|
+
const account = await getAccount(command, { accountId: siteInfo.account_id });
|
|
18
|
+
let databaseUrlEnv;
|
|
19
|
+
let unpooledDatabaseUrlEnv;
|
|
20
|
+
try {
|
|
21
|
+
databaseUrlEnv = await command.netlify.api.getEnvVar({
|
|
22
|
+
accountId: siteInfo.account_id,
|
|
23
|
+
siteId: command.siteId,
|
|
24
|
+
key: 'NETLIFY_DATABASE_URL',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// no-op, env var does not exist, so we just continue
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
unpooledDatabaseUrlEnv = await command.netlify.api.getEnvVar({
|
|
32
|
+
accountId: siteInfo.account_id,
|
|
33
|
+
siteId: command.siteId,
|
|
34
|
+
key: 'NETLIFY_DATABASE_URL_UNPOOLED',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// no-op, env var does not exist, so we just continue
|
|
39
|
+
}
|
|
40
|
+
const extension = await getExtension({
|
|
41
|
+
accountId: account.id,
|
|
42
|
+
token: netlifyToken,
|
|
43
|
+
slug: NEON_DATABASE_EXTENSION_SLUG,
|
|
44
|
+
});
|
|
45
|
+
let siteConfig;
|
|
46
|
+
try {
|
|
47
|
+
siteConfig = await getSiteConfiguration({
|
|
48
|
+
siteId: command.siteId,
|
|
49
|
+
accountId: siteInfo.account_id,
|
|
50
|
+
slug: NEON_DATABASE_EXTENSION_SLUG,
|
|
51
|
+
token: netlifyToken,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// no-op, site config does not exist or extension not installed
|
|
56
|
+
}
|
|
57
|
+
log(prettyjson.render({
|
|
58
|
+
'Current team': account.name,
|
|
59
|
+
'Current site': siteInfo.name,
|
|
60
|
+
[extension?.name ? `${extension.name} extension` : 'Database extension']: extension?.installedOnTeam
|
|
61
|
+
? 'installed on team'
|
|
62
|
+
: chalk.red('not installed on team'),
|
|
63
|
+
// @ts-expect-error -- siteConfig is not typed
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
65
|
+
['Database status']: siteConfig?.config?.connectedDatabase ? 'connected to site' : chalk.red('not connected'),
|
|
66
|
+
['Environment variables']: '',
|
|
67
|
+
[' NETLIFY_DATABASE_URL']: databaseUrlEnv?.key === 'NETLIFY_DATABASE_URL' ? 'saved' : chalk.red('not set'),
|
|
68
|
+
[' NETLIFY_DATABASE_URL_UNPOOLED']: unpooledDatabaseUrlEnv?.key === 'NETLIFY_DATABASE_URL_UNPOOLED' ? 'saved' : chalk.red('not set'),
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/database/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import BaseCommand from '../base-command.js';
|
|
2
|
+
import { Extension } from './database.js';
|
|
3
|
+
export declare const getExtension: ({ accountId, token, slug }: {
|
|
4
|
+
accountId: string;
|
|
5
|
+
token: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
}) => Promise<Extension | undefined>;
|
|
8
|
+
export declare const installExtension: ({ token, accountId, slug, hostSiteUrl, }: {
|
|
9
|
+
token: string;
|
|
10
|
+
accountId: string;
|
|
11
|
+
slug: string;
|
|
12
|
+
hostSiteUrl: string;
|
|
13
|
+
}) => Promise<unknown>;
|
|
14
|
+
export declare const getSiteConfiguration: ({ siteId, accountId, token, slug, }: {
|
|
15
|
+
siteId: string;
|
|
16
|
+
accountId: string;
|
|
17
|
+
token: string;
|
|
18
|
+
slug: string;
|
|
19
|
+
}) => Promise<unknown>;
|
|
20
|
+
export declare const carefullyWriteFile: (filePath: string, data: string, projectRoot: string) => Promise<void>;
|
|
21
|
+
export declare const getAccount: (command: BaseCommand, { accountId, }: {
|
|
22
|
+
accountId: string;
|
|
23
|
+
}) => Promise<{
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
} & Omit<{
|
|
27
|
+
id?: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
slug?: string;
|
|
30
|
+
type?: string;
|
|
31
|
+
capabilities?: {
|
|
32
|
+
sites?: import("@netlify/open-api").components["schemas"]["accountUsageCapability"];
|
|
33
|
+
collaborators?: import("@netlify/open-api").components["schemas"]["accountUsageCapability"];
|
|
34
|
+
};
|
|
35
|
+
billing_name?: string;
|
|
36
|
+
billing_email?: string;
|
|
37
|
+
billing_details?: string;
|
|
38
|
+
billing_period?: string;
|
|
39
|
+
payment_method_id?: string;
|
|
40
|
+
type_name?: string;
|
|
41
|
+
type_id?: string;
|
|
42
|
+
owner_ids?: string[];
|
|
43
|
+
roles_allowed?: string[];
|
|
44
|
+
created_at?: string;
|
|
45
|
+
updated_at?: string;
|
|
46
|
+
}, "name" | "id">>;
|
|
47
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/commands/database/utils.ts"],"names":[],"mappings":"AAKA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,eAAO,MAAM,YAAY,+BAAsC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,mCAahH,CAAA;AAED,eAAO,MAAM,gBAAgB,6CAK1B;IACD,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,qBAqBA,CAAA;AAED,eAAO,MAAM,oBAAoB,wCAK9B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,qBAaA,CAAA;AAED,eAAO,MAAM,kBAAkB,aAAoB,MAAM,QAAQ,MAAM,eAAe,MAAM,kBAkB3F,CAAA;AAED,eAAO,MAAM,UAAU,YACZ,WAAW,kBAGjB;IACD,SAAS,EAAE,MAAM,CAAA;CAClB;QAcuB,MAAM;UAAQ,MAAM;;;;;;;aAKu10C,CAAC,EAAC,iDAAsB;qBAAiD,CAAC,EAAC,iDAAsB;;;;;;;;;;;;;kBADr+0C,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import fsPromises from 'fs/promises';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { JIGSAW_URL, NETLIFY_WEB_UI } from './constants.js';
|
|
5
|
+
export const getExtension = async ({ accountId, token, slug }) => {
|
|
6
|
+
const url = new URL('/.netlify/functions/fetch-extension', NETLIFY_WEB_UI);
|
|
7
|
+
url.searchParams.append('teamId', accountId);
|
|
8
|
+
url.searchParams.append('slug', slug);
|
|
9
|
+
const extensionReq = await fetch(url.toString(), {
|
|
10
|
+
headers: {
|
|
11
|
+
Cookie: `_nf-auth=${token}`,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
const extension = (await extensionReq.json());
|
|
15
|
+
return extension;
|
|
16
|
+
};
|
|
17
|
+
export const installExtension = async ({ token, accountId, slug, hostSiteUrl, }) => {
|
|
18
|
+
const url = new URL('/.netlify/functions/install-extension', NETLIFY_WEB_UI);
|
|
19
|
+
const installExtensionResponse = await fetch(url.toString(), {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
Cookie: `_nf-auth=${token}`,
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
teamId: accountId,
|
|
27
|
+
slug,
|
|
28
|
+
hostSiteUrl,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
if (!installExtensionResponse.ok) {
|
|
32
|
+
throw new Error(`Failed to install extension: ${slug}`);
|
|
33
|
+
}
|
|
34
|
+
const installExtensionData = await installExtensionResponse.json();
|
|
35
|
+
return installExtensionData;
|
|
36
|
+
};
|
|
37
|
+
export const getSiteConfiguration = async ({ siteId, accountId, token, slug, }) => {
|
|
38
|
+
const url = new URL(`/team/${accountId}/integrations/${slug}/configuration/site/${siteId}`, JIGSAW_URL);
|
|
39
|
+
const siteConfigurationResponse = await fetch(url.toString(), {
|
|
40
|
+
headers: {
|
|
41
|
+
'netlify-token': token,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!siteConfigurationResponse.ok) {
|
|
45
|
+
throw new Error(`Failed to fetch extension site configuration for ${siteId}. Is the extension installed?`);
|
|
46
|
+
}
|
|
47
|
+
const siteConfiguration = await siteConfigurationResponse.json();
|
|
48
|
+
return siteConfiguration;
|
|
49
|
+
};
|
|
50
|
+
export const carefullyWriteFile = async (filePath, data, projectRoot) => {
|
|
51
|
+
if (fs.existsSync(filePath)) {
|
|
52
|
+
const answers = await inquirer.prompt([
|
|
53
|
+
{
|
|
54
|
+
type: 'confirm',
|
|
55
|
+
name: 'overwrite',
|
|
56
|
+
message: `Overwrite existing file .${filePath.replace(projectRoot, '')}?`,
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
if (answers.overwrite) {
|
|
60
|
+
await fsPromises.writeFile(filePath, data);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
await fsPromises.writeFile(filePath, data);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const getAccount = async (command, { accountId, }) => {
|
|
68
|
+
let account;
|
|
69
|
+
try {
|
|
70
|
+
// @ts-expect-error -- TODO: fix the getAccount type in the openapi spec. It should not be an array of accounts, just one account.
|
|
71
|
+
account = await command.netlify.api.getAccount({ accountId });
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
throw new Error(`Error getting account, make sure you are logged in with netlify login`, {
|
|
75
|
+
cause: e,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (!account.id || !account.name) {
|
|
79
|
+
throw new Error(`Error getting account, make sure you are logged in with netlify login`);
|
|
80
|
+
}
|
|
81
|
+
return account;
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/database/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { OptionValues } from 'commander';
|
|
2
2
|
import type BaseCommand from '../base-command.js';
|
|
3
3
|
export declare const dev: (options: OptionValues, command: BaseCommand) => Promise<void>;
|
|
4
|
-
export declare const createDevCommand: (program: BaseCommand) => BaseCommand;
|
|
5
4
|
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AA0BxC,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AA6CjD,eAAO,MAAM,GAAG,YAAmB,YAAY,WAAW,WAAW,kBAsKpE,CAAA"}
|