netlify-cli 21.5.0-pre.a2d9483 → 21.5.1

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.
Files changed (43) hide show
  1. package/dist/commands/init/init.js +5 -5
  2. package/dist/commands/init/init.js.map +1 -1
  3. package/dist/commands/link/link.d.ts.map +1 -1
  4. package/dist/commands/link/link.js +8 -8
  5. package/dist/commands/link/link.js.map +1 -1
  6. package/dist/commands/main.d.ts.map +1 -1
  7. package/dist/commands/main.js +0 -2
  8. package/dist/commands/main.js.map +1 -1
  9. package/dist/tsconfig.build.tsbuildinfo +1 -1
  10. package/dist/utils/command-helpers.d.ts +1 -0
  11. package/dist/utils/command-helpers.d.ts.map +1 -1
  12. package/dist/utils/command-helpers.js +20 -0
  13. package/dist/utils/command-helpers.js.map +1 -1
  14. package/npm-shrinkwrap.json +9 -9
  15. package/package.json +2 -2
  16. package/dist/commands/database/constants.d.ts +0 -4
  17. package/dist/commands/database/constants.d.ts.map +0 -1
  18. package/dist/commands/database/constants.js +0 -4
  19. package/dist/commands/database/constants.js.map +0 -1
  20. package/dist/commands/database/database.d.ts +0 -18
  21. package/dist/commands/database/database.d.ts.map +0 -1
  22. package/dist/commands/database/database.js +0 -20
  23. package/dist/commands/database/database.js.map +0 -1
  24. package/dist/commands/database/drizzle.d.ts +0 -3
  25. package/dist/commands/database/drizzle.d.ts.map +0 -1
  26. package/dist/commands/database/drizzle.js +0 -91
  27. package/dist/commands/database/drizzle.js.map +0 -1
  28. package/dist/commands/database/index.d.ts +0 -2
  29. package/dist/commands/database/index.d.ts.map +0 -1
  30. package/dist/commands/database/index.js +0 -2
  31. package/dist/commands/database/index.js.map +0 -1
  32. package/dist/commands/database/init.d.ts +0 -4
  33. package/dist/commands/database/init.d.ts.map +0 -1
  34. package/dist/commands/database/init.js +0 -143
  35. package/dist/commands/database/init.js.map +0 -1
  36. package/dist/commands/database/status.d.ts +0 -4
  37. package/dist/commands/database/status.d.ts.map +0 -1
  38. package/dist/commands/database/status.js +0 -71
  39. package/dist/commands/database/status.js.map +0 -1
  40. package/dist/commands/database/utils.d.ts +0 -75
  41. package/dist/commands/database/utils.d.ts.map +0 -1
  42. package/dist/commands/database/utils.js +0 -173
  43. package/dist/commands/database/utils.js.map +0 -1
@@ -1,75 +0,0 @@
1
- import BaseCommand from '../base-command.js';
2
- import { Extension } from './database.js';
3
- import { spawn } from 'child_process';
4
- type PackageJSON = {
5
- dependencies?: Record<string, string>;
6
- devDependencies?: Record<string, string>;
7
- scripts?: Record<string, string>;
8
- };
9
- export declare function getPackageJSON(directory: string): PackageJSON;
10
- export declare const spawnAsync: (command: string, args: string[], options: Parameters<typeof spawn>[2]) => Promise<number>;
11
- export declare const getExtension: ({ accountId, netlifyToken, slug, }: {
12
- accountId: string;
13
- netlifyToken: string;
14
- slug: string;
15
- }) => Promise<Extension | undefined>;
16
- export declare const installExtension: ({ netlifyToken, accountId, slug, hostSiteUrl, }: {
17
- netlifyToken: string;
18
- accountId: string;
19
- slug: string;
20
- hostSiteUrl: string;
21
- }) => Promise<boolean>;
22
- export declare const getSiteConfiguration: ({ siteId, accountId, netlifyToken, slug, }: {
23
- siteId: string;
24
- accountId: string;
25
- netlifyToken: string;
26
- slug: string;
27
- }) => Promise<unknown>;
28
- export declare const carefullyWriteFile: (filePath: string, data: string, projectRoot: string) => Promise<void>;
29
- export declare const getAccount: (command: BaseCommand, { accountId, }: {
30
- accountId: string;
31
- }) => Promise<{
32
- id: string;
33
- name: string;
34
- } & Omit<{
35
- id?: string;
36
- name?: string;
37
- slug?: string;
38
- type?: string;
39
- capabilities?: {
40
- sites?: import("@netlify/open-api").components["schemas"]["accountUsageCapability"];
41
- collaborators?: import("@netlify/open-api").components["schemas"]["accountUsageCapability"];
42
- };
43
- billing_name?: string;
44
- billing_email?: string;
45
- billing_details?: string;
46
- billing_period?: string;
47
- payment_method_id?: string;
48
- type_name?: string;
49
- type_id?: string;
50
- owner_ids?: string[];
51
- roles_allowed?: string[];
52
- created_at?: string;
53
- updated_at?: string;
54
- }, "name" | "id">>;
55
- type JigsawTokenResult = {
56
- data: string;
57
- error: null;
58
- } | {
59
- data: null;
60
- error: {
61
- code: number;
62
- message: string;
63
- };
64
- };
65
- export declare const getJigsawToken: ({ netlifyToken, accountId, integrationSlug, isEnable, }: {
66
- netlifyToken: string;
67
- accountId: string;
68
- integrationSlug?: string;
69
- /**
70
- * isEnable will make a token that can install the extension
71
- */
72
- isEnable?: boolean;
73
- }) => Promise<JigsawTokenResult>;
74
- export {};
75
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/commands/database/utils.ts"],"names":[],"mappings":"AAQA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAErC,KAAK,WAAW,GAAG;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAexB,WAAW,CAClC;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,EAAE,SAAS,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAYhH,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,oCAIhC;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,mCAiBA,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,iDAKpC;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,qBA2BA,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,4CAKxC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,qBAYA,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,UAAU,MAAM,EAAE,MAAM,MAAM,EAAE,aAAa,MAAM,kBAkB3F,CAAA;AAED,eAAO,MAAM,UAAU,GACrB,SAAS,WAAW,EACpB,gBAEG;IACD,SAAS,EAAE,MAAM,CAAA;CAClB;QAcuB,MAAM;UAAQ,MAAM;;;;;;;aAiFw8uC,CAAC,EAAC,iDAAsB;qBAAiD,CAAC,EAAC,iDAAsB;;;;;;;;;;;;;kBA7EtlvC,CAAA;AAED,KAAK,iBAAiB,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,IAAI,CAAA;CACZ,GACD;IACE,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC,CAAA;AAEL,eAAO,MAAM,cAAc,GAAU,yDAKlC;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,KAAG,OAAO,CAAC,iBAAiB,CAmD5B,CAAA"}
@@ -1,173 +0,0 @@
1
- import { createRequire } from 'module';
2
- import { join } from 'path';
3
- import fsPromises from 'fs/promises';
4
- import fs from 'fs';
5
- import inquirer from 'inquirer';
6
- import { JIGSAW_URL } from './constants.js';
7
- import { spawn } from 'child_process';
8
- export function getPackageJSON(directory) {
9
- const require = createRequire(join(directory, 'package.json'));
10
- const packageJson = require('./package.json');
11
- if (typeof packageJson !== 'object' || packageJson === null) {
12
- throw new Error('Failed to load package.json');
13
- }
14
- if ('dependencies' in packageJson && typeof packageJson.dependencies !== 'object') {
15
- throw new Error(`Expected object at package.json#dependencies, got ${typeof packageJson.dependencies}`);
16
- }
17
- if ('devDependencies' in packageJson && typeof packageJson.devDependencies !== 'object') {
18
- throw new Error(`Expected object at package.json#devDependencies, got ${typeof packageJson.devDependencies}`);
19
- }
20
- if ('scripts' in packageJson && typeof packageJson.scripts !== 'object') {
21
- throw new Error(`Expected object at package.json#scripts, got ${typeof packageJson.scripts}`);
22
- }
23
- return packageJson;
24
- }
25
- export const spawnAsync = (command, args, options) => {
26
- return new Promise((resolve, reject) => {
27
- const child = spawn(command, args, options);
28
- child.on('error', reject);
29
- child.on('exit', (code) => {
30
- if (code === 0) {
31
- resolve(code);
32
- }
33
- const errorMessage = code ? `Process exited with code ${code.toString()}` : 'Process exited with no code';
34
- reject(new Error(errorMessage));
35
- });
36
- });
37
- };
38
- export const getExtension = async ({ accountId, netlifyToken, slug, }) => {
39
- const extensionResponse = await fetch(`${JIGSAW_URL}/${encodeURIComponent(accountId)}/integrations/${encodeURIComponent(slug)}`, {
40
- headers: {
41
- 'netlify-token': netlifyToken,
42
- 'Api-Version': '2',
43
- },
44
- });
45
- if (!extensionResponse.ok) {
46
- throw new Error(`Failed to fetch extension: ${slug}`);
47
- }
48
- const extension = (await extensionResponse.json());
49
- return extension;
50
- };
51
- export const installExtension = async ({ netlifyToken, accountId, slug, hostSiteUrl, }) => {
52
- const { data: jigsawToken, error } = await getJigsawToken({
53
- netlifyToken: netlifyToken,
54
- accountId,
55
- integrationSlug: slug,
56
- isEnable: true,
57
- });
58
- if (error || !jigsawToken) {
59
- throw new Error(`Failed to get Jigsaw token: ${error?.message ?? 'Unknown error'}`);
60
- }
61
- const extensionOnInstallUrl = new URL('/.netlify/functions/handler/on-install', hostSiteUrl);
62
- const installedResponse = await fetch(extensionOnInstallUrl, {
63
- method: 'POST',
64
- body: JSON.stringify({
65
- teamId: accountId,
66
- }),
67
- headers: {
68
- 'netlify-token': jigsawToken,
69
- },
70
- });
71
- if (!installedResponse.ok && installedResponse.status !== 409) {
72
- const text = await installedResponse.text();
73
- throw new Error(`Failed to install extension '${slug}': ${text}`);
74
- }
75
- return true;
76
- };
77
- export const getSiteConfiguration = async ({ siteId, accountId, netlifyToken, slug, }) => {
78
- const url = new URL(`/team/${accountId}/integrations/${slug}/configuration/site/${siteId}`, JIGSAW_URL);
79
- const siteConfigurationResponse = await fetch(url.toString(), {
80
- headers: {
81
- 'netlify-token': netlifyToken,
82
- },
83
- });
84
- if (!siteConfigurationResponse.ok) {
85
- throw new Error(`Failed to fetch extension site configuration for ${siteId}. Is the extension installed?`);
86
- }
87
- const siteConfiguration = await siteConfigurationResponse.json();
88
- return siteConfiguration;
89
- };
90
- export const carefullyWriteFile = async (filePath, data, projectRoot) => {
91
- if (fs.existsSync(filePath)) {
92
- const answers = await inquirer.prompt([
93
- {
94
- type: 'confirm',
95
- name: 'overwrite',
96
- message: `Overwrite existing file .${filePath.replace(projectRoot, '')}?`,
97
- },
98
- ]);
99
- if (answers.overwrite) {
100
- await fsPromises.writeFile(filePath, data);
101
- }
102
- }
103
- else {
104
- await fsPromises.writeFile(filePath, data);
105
- }
106
- };
107
- export const getAccount = async (command, { accountId, }) => {
108
- let account;
109
- try {
110
- // @ts-expect-error -- TODO: fix the getAccount type in the openapi spec. It should not be an array of accounts, just one account.
111
- account = await command.netlify.api.getAccount({ accountId });
112
- }
113
- catch (e) {
114
- throw new Error(`Error getting account, make sure you are logged in with netlify login`, {
115
- cause: e,
116
- });
117
- }
118
- if (!account.id || !account.name) {
119
- throw new Error(`Error getting account, make sure you are logged in with netlify login`);
120
- }
121
- return account;
122
- };
123
- export const getJigsawToken = async ({ netlifyToken, accountId, integrationSlug, isEnable, }) => {
124
- try {
125
- const tokenResponse = await fetch(`${JIGSAW_URL}/generate-token`, {
126
- method: 'POST',
127
- headers: {
128
- 'Content-Type': 'application/json',
129
- Cookie: `_nf-auth=${netlifyToken}`,
130
- 'Api-Version': '2',
131
- },
132
- body: JSON.stringify({
133
- ownerId: accountId,
134
- integrationSlug,
135
- isEnable,
136
- }),
137
- });
138
- if (!tokenResponse.ok) {
139
- return {
140
- data: null,
141
- error: {
142
- code: 401,
143
- message: `Unauthorized`,
144
- },
145
- };
146
- }
147
- const tokenData = (await tokenResponse.json());
148
- if (!tokenData?.token) {
149
- return {
150
- data: null,
151
- error: {
152
- code: 401,
153
- message: `Unauthorized`,
154
- },
155
- };
156
- }
157
- return {
158
- data: tokenData.token,
159
- error: null,
160
- };
161
- }
162
- catch (e) {
163
- console.error('Failed to get Jigsaw token', e);
164
- return {
165
- data: null,
166
- error: {
167
- code: 401,
168
- message: `Unauthorized`,
169
- },
170
- };
171
- }
172
- };
173
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/database/utils.ts"],"names":[],"mappings":"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"}