firebase-tools 13.29.3 → 13.31.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.
- package/lib/apphosting/secrets/dialogs.js +2 -2
- package/lib/commands/appdistribution-groups-list.js +1 -1
- package/lib/commands/appdistribution-testers-list.js +4 -4
- package/lib/commands/apphosting-backends-list.js +1 -1
- package/lib/commands/apphosting-secrets-describe.js +1 -1
- package/lib/commands/apps-android-sha-list.js +1 -1
- package/lib/commands/apps-create.js +1 -104
- package/lib/commands/apps-init.js +94 -0
- package/lib/commands/apps-list.js +1 -1
- package/lib/commands/apps-sdkconfig.js +3 -3
- package/lib/commands/database-instances-list.js +1 -1
- package/lib/commands/dataconnect-services-list.js +1 -1
- package/lib/commands/emulators-start.js +1 -1
- package/lib/commands/experiments-list.js +1 -1
- package/lib/commands/ext-dev-list.js +1 -1
- package/lib/commands/ext-dev-usage.js +1 -1
- package/lib/commands/functions-list.js +1 -1
- package/lib/commands/hosting-channel-list.js +1 -1
- package/lib/commands/hosting-sites-get.js +1 -1
- package/lib/commands/hosting-sites-list.js +1 -1
- package/lib/commands/index.js +1 -0
- package/lib/commands/projects-list.js +1 -1
- package/lib/commands/remoteconfig-get.js +1 -1
- package/lib/commands/remoteconfig-versions-list.js +1 -1
- package/lib/crashlytics/buildToolsJarHelper.js +1 -1
- package/lib/dataconnect/build.js +6 -0
- package/lib/dataconnect/client.js +1 -1
- package/lib/dataconnect/dataplaneClient.js +1 -1
- package/lib/dataconnect/fileUtils.js +25 -2
- package/lib/dataconnect/graphqlError.js +5 -3
- package/lib/emulator/commandUtils.js +1 -1
- package/lib/emulator/dataconnectEmulator.js +4 -1
- package/lib/emulator/dataconnectToolkitController.js +5 -0
- package/lib/emulator/downloadableEmulators.js +9 -9
- package/lib/emulator/extensionsEmulator.js +2 -2
- package/lib/experiments.js +6 -0
- package/lib/extensions/change-log.js +1 -25
- package/lib/extensions/listExtensions.js +1 -1
- package/lib/extensions/provisioningHelper.js +1 -1
- package/lib/firestore/pretty-print.js +1 -1
- package/lib/frameworks/angular/index.js +11 -6
- package/lib/frameworks/utils.js +3 -1
- package/lib/functions/secrets.js +1 -1
- package/lib/gcp/cloudfunctionsv2.js +3 -0
- package/lib/gcp/cloudsql/interactive.js +1 -1
- package/lib/init/features/dataconnect/sdk.js +28 -3
- package/lib/init/features/genkit/index.js +17 -9
- package/lib/management/apps.js +314 -7
- package/lib/profileReport.js +1 -1
- package/lib/prompt.js +10 -2
- package/package.json +14 -5
- package/templates/genkit/firebase.0.9.0.template +1 -1
- package/templates/genkit/firebase.1.0.0.template +66 -0
- package/templates/init/dataconnect/mutations.gql +9 -26
- package/templates/init/dataconnect/queries.gql +9 -14
- package/templates/init/dataconnect/schema.gql +28 -21
- package/templates/setup/web.js +0 -5
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DataConnectToolkitController = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
4
5
|
const error_1 = require("../error");
|
|
5
6
|
const portUtils = require("./portUtils");
|
|
6
7
|
const utils_1 = require("../utils");
|
|
7
8
|
const dataconnectEmulator_1 = require("./dataconnectEmulator");
|
|
9
|
+
const downloadableEmulators_1 = require("./downloadableEmulators");
|
|
8
10
|
const name = "Data Connect Toolkit";
|
|
9
11
|
class DataConnectToolkitController {
|
|
10
12
|
static async start(args) {
|
|
@@ -29,6 +31,9 @@ class DataConnectToolkitController {
|
|
|
29
31
|
throw new error_1.FirebaseError(`Data Connect Toolkit failed to stop with error: ${e}`);
|
|
30
32
|
}
|
|
31
33
|
}
|
|
34
|
+
static getVersion() {
|
|
35
|
+
return (0, downloadableEmulators_1.getDownloadDetails)(types_1.Emulators.DATACONNECT).version;
|
|
36
|
+
}
|
|
32
37
|
static getInfo() {
|
|
33
38
|
return this.instance.getInfo();
|
|
34
39
|
}
|
|
@@ -48,20 +48,20 @@ const EMULATOR_UPDATE_DETAILS = {
|
|
|
48
48
|
},
|
|
49
49
|
dataconnect: process.platform === "darwin"
|
|
50
50
|
? {
|
|
51
|
-
version: "1.
|
|
52
|
-
expectedSize:
|
|
53
|
-
expectedChecksum: "
|
|
51
|
+
version: "1.8.0",
|
|
52
|
+
expectedSize: 25469696,
|
|
53
|
+
expectedChecksum: "d20a4240b4290a262caff3d0d3a85a4f",
|
|
54
54
|
}
|
|
55
55
|
: process.platform === "win32"
|
|
56
56
|
? {
|
|
57
|
-
version: "1.
|
|
58
|
-
expectedSize:
|
|
59
|
-
expectedChecksum: "
|
|
57
|
+
version: "1.8.0",
|
|
58
|
+
expectedSize: 25903616,
|
|
59
|
+
expectedChecksum: "dda0350259449493ecc5cc24187ce752",
|
|
60
60
|
}
|
|
61
61
|
: {
|
|
62
|
-
version: "1.
|
|
63
|
-
expectedSize:
|
|
64
|
-
expectedChecksum: "
|
|
62
|
+
version: "1.8.0",
|
|
63
|
+
expectedSize: 25383064,
|
|
64
|
+
expectedChecksum: "54a19e336f4118854c4c2d4eeeccb506",
|
|
65
65
|
},
|
|
66
66
|
};
|
|
67
67
|
exports.DownloadDetails = {
|
|
@@ -6,7 +6,7 @@ const spawn = require("cross-spawn");
|
|
|
6
6
|
const fs = require("fs-extra");
|
|
7
7
|
const os = require("os");
|
|
8
8
|
const path = require("path");
|
|
9
|
-
const Table = require("cli-
|
|
9
|
+
const Table = require("cli-table3");
|
|
10
10
|
const planner = require("../deploy/extensions/planner");
|
|
11
11
|
const ensureApiEnabled_1 = require("../ensureApiEnabled");
|
|
12
12
|
const error_1 = require("../error");
|
|
@@ -221,7 +221,7 @@ class ExtensionsEmulator {
|
|
|
221
221
|
const enablementUri = await (0, shortenUrl_1.shortenUrl)((0, ensureApiEnabled_1.enableApiURI)(this.args.projectId, apiToWarn.apiName));
|
|
222
222
|
table.push([
|
|
223
223
|
apiToWarn.apiName,
|
|
224
|
-
apiToWarn.instanceIds,
|
|
224
|
+
apiToWarn.instanceIds.join(", "),
|
|
225
225
|
apiToWarn.enabled ? "Yes" : "No",
|
|
226
226
|
apiToWarn.enabled ? "" : clc.bold(clc.underline(enablementUri)),
|
|
227
227
|
]);
|
package/lib/experiments.js
CHANGED
|
@@ -106,6 +106,12 @@ exports.ALL_EXPERIMENTS = experiments({
|
|
|
106
106
|
default: true,
|
|
107
107
|
public: false,
|
|
108
108
|
},
|
|
109
|
+
appsinit: {
|
|
110
|
+
shortDescription: "Adds experimental `apps:init` command.",
|
|
111
|
+
fullDescription: "Adds experimental `apps:init` command. When run from an app directory, this command detects the app's platform and configures required files.",
|
|
112
|
+
default: false,
|
|
113
|
+
public: true,
|
|
114
|
+
},
|
|
109
115
|
fdcconnectorevolution: {
|
|
110
116
|
shortDescription: "Enable Data Connect connector evolution warnings.",
|
|
111
117
|
fullDescription: "Enable Data Connect connector evolution warnings.",
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseChangelog = exports.getLocalChangelog = exports.breakingChangesInUpdate = exports.
|
|
4
|
-
const clc = require("colorette");
|
|
3
|
+
exports.parseChangelog = exports.getLocalChangelog = exports.breakingChangesInUpdate = exports.getReleaseNotesForUpdate = void 0;
|
|
5
4
|
const marked_1 = require("marked");
|
|
6
5
|
const path = require("path");
|
|
7
6
|
const semver = require("semver");
|
|
8
7
|
const marked_terminal_1 = require("marked-terminal");
|
|
9
|
-
const Table = require("cli-table");
|
|
10
8
|
const extensionsApi_1 = require("./extensionsApi");
|
|
11
9
|
const localHelper_1 = require("./localHelper");
|
|
12
|
-
const logger_1 = require("../logger");
|
|
13
10
|
const refs = require("./refs");
|
|
14
|
-
const utils_1 = require("../utils");
|
|
15
11
|
marked_1.marked.use((0, marked_terminal_1.markedTerminal)());
|
|
16
12
|
const EXTENSIONS_CHANGELOG = "CHANGELOG.md";
|
|
17
13
|
const VERSION_LINE_REGEX = /##.+?(\d+\.\d+\.\d+(?:-((\d+|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(\d+|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?).*/;
|
|
@@ -31,26 +27,6 @@ async function getReleaseNotesForUpdate(args) {
|
|
|
31
27
|
return releaseNotes;
|
|
32
28
|
}
|
|
33
29
|
exports.getReleaseNotesForUpdate = getReleaseNotesForUpdate;
|
|
34
|
-
function displayReleaseNotes(releaseNotes, fromVersion) {
|
|
35
|
-
const versions = [fromVersion].concat(Object.keys(releaseNotes));
|
|
36
|
-
const breakingVersions = breakingChangesInUpdate(versions);
|
|
37
|
-
const table = new Table({ head: ["Version", "What's New"], style: { head: ["yellow", "bold"] } });
|
|
38
|
-
for (const [version, note] of Object.entries(releaseNotes)) {
|
|
39
|
-
if (breakingVersions.includes(version)) {
|
|
40
|
-
table.push([clc.yellow(clc.bold(version)), (0, marked_1.marked)(note)]);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
table.push([version, (0, marked_1.marked)(note)]);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
logger_1.logger.info(clc.bold("What's new with this update:"));
|
|
47
|
-
if (breakingVersions.length) {
|
|
48
|
-
(0, utils_1.logLabeledWarning)("warning", "This is a major version update, which means it may contain breaking changes." +
|
|
49
|
-
" Read the release notes carefully before continuing with this update.");
|
|
50
|
-
}
|
|
51
|
-
logger_1.logger.info(table.toString());
|
|
52
|
-
}
|
|
53
|
-
exports.displayReleaseNotes = displayReleaseNotes;
|
|
54
30
|
function breakingChangesInUpdate(versionsInUpdate) {
|
|
55
31
|
const breakingVersions = [];
|
|
56
32
|
const semvers = versionsInUpdate.map((v) => semver.parse(v)).sort(semver.compare);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.listExtensions = void 0;
|
|
4
4
|
const clc = require("colorette");
|
|
5
|
-
const Table = require("cli-
|
|
5
|
+
const Table = require("cli-table3");
|
|
6
6
|
const extensionsApi_1 = require("./extensionsApi");
|
|
7
7
|
const logger_1 = require("../logger");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
@@ -97,7 +97,7 @@ async function isStorageProvisioned(projectId) {
|
|
|
97
97
|
return !!((_b = (_a = resp.body) === null || _a === void 0 ? void 0 : _a.buckets) === null || _b === void 0 ? void 0 : _b.find((bucket) => {
|
|
98
98
|
const bucketResourceName = bucket.name;
|
|
99
99
|
const bucketResourceNameTokens = bucketResourceName.split("/");
|
|
100
|
-
const pattern = "^" + projectId + "(.[[a-z0-9]+)*.appspot.com$";
|
|
100
|
+
const pattern = "^" + projectId + "(.[[a-z0-9]+)*.(appspot.com|firebasestorage.app)$";
|
|
101
101
|
return new RegExp(pattern).test(bucketResourceNameTokens[bucketResourceNameTokens.length - 1]);
|
|
102
102
|
}));
|
|
103
103
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PrettyPrint = void 0;
|
|
4
4
|
const clc = require("colorette");
|
|
5
|
-
const Table = require("cli-
|
|
5
|
+
const Table = require("cli-table3");
|
|
6
6
|
const sort = require("./api-sort");
|
|
7
7
|
const types = require("./api-types");
|
|
8
8
|
const logger_1 = require("../logger");
|
|
@@ -15,7 +15,7 @@ exports.support = "preview";
|
|
|
15
15
|
exports.type = 3;
|
|
16
16
|
exports.docsUrl = "https://firebase.google.com/docs/hosting/frameworks/angular";
|
|
17
17
|
const DEFAULT_BUILD_SCRIPT = ["ng build"];
|
|
18
|
-
exports.supportedRange = "16 -
|
|
18
|
+
exports.supportedRange = "16 - 19";
|
|
19
19
|
async function discover(dir) {
|
|
20
20
|
if (!(await (0, fs_extra_1.pathExists)((0, path_1.join)(dir, "package.json"))))
|
|
21
21
|
return;
|
|
@@ -182,17 +182,22 @@ exports.handle = function(req,res) {
|
|
|
182
182
|
}
|
|
183
183
|
else if (serverOutputPath) {
|
|
184
184
|
bootstrapScript = `
|
|
185
|
-
const app = new Promise((resolve) => {
|
|
185
|
+
const app = new Promise((resolve, reject) => {
|
|
186
186
|
setTimeout(() => {
|
|
187
187
|
const port = process.env.PORT;
|
|
188
188
|
const socket = 'express.sock';
|
|
189
189
|
process.env.PORT = socket;
|
|
190
|
-
|
|
190
|
+
|
|
191
191
|
${(serverEntry === null || serverEntry === void 0 ? void 0 : serverEntry.endsWith(".mjs"))
|
|
192
192
|
? `import(\`./${serverOutputPath}/${serverEntry}\`)`
|
|
193
|
-
: `Promise.resolve(require('./${serverOutputPath}/${serverEntry}'))`}.then(({ app }) => {
|
|
194
|
-
|
|
195
|
-
|
|
193
|
+
: `Promise.resolve(require('./${serverOutputPath}/${serverEntry}'))`}.then(({ default: defHandler, reqHandler, app }) => {
|
|
194
|
+
const handler = app?.() ?? reqHandler ?? defHandler;
|
|
195
|
+
if (!handler) {
|
|
196
|
+
reject(\`The file at "./${serverOutputPath}/${serverEntry}" did not export a valid request handler. Expected exports: 'app', 'default', or 'reqHandler'.\`);
|
|
197
|
+
} else {
|
|
198
|
+
process.env.PORT = port;
|
|
199
|
+
resolve(handler);
|
|
200
|
+
}
|
|
196
201
|
});
|
|
197
202
|
}, 0);
|
|
198
203
|
});
|
package/lib/frameworks/utils.js
CHANGED
|
@@ -123,7 +123,9 @@ function simpleProxy(hostOrRequestHandler) {
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
else {
|
|
126
|
-
const proxiedRes = proxyResponse(originalReq, originalRes,
|
|
126
|
+
const proxiedRes = proxyResponse(originalReq, originalRes, () => {
|
|
127
|
+
void hostOrRequestHandler(originalReq, originalRes, next);
|
|
128
|
+
});
|
|
127
129
|
await hostOrRequestHandler(originalReq, proxiedRes, next);
|
|
128
130
|
}
|
|
129
131
|
};
|
package/lib/functions/secrets.js
CHANGED
|
@@ -16,7 +16,7 @@ const functional_1 = require("../functional");
|
|
|
16
16
|
const secretManager_2 = require("../gcp/secretManager");
|
|
17
17
|
const secretManager_3 = require("../gcp/secretManager");
|
|
18
18
|
const projectUtils_1 = require("../projectUtils");
|
|
19
|
-
const Table = require("cli-
|
|
19
|
+
const Table = require("cli-table3");
|
|
20
20
|
const gcfV1PollerOptions = {
|
|
21
21
|
apiOrigin: (0, api_1.functionsOrigin)(),
|
|
22
22
|
apiVersion: "v1",
|
|
@@ -259,6 +259,9 @@ function functionFromEndpoint(endpoint) {
|
|
|
259
259
|
}
|
|
260
260
|
else if (backend.isCallableTriggered(endpoint)) {
|
|
261
261
|
gcfFunction.labels = Object.assign(Object.assign({}, gcfFunction.labels), { "deployment-callable": "true" });
|
|
262
|
+
if (endpoint.callableTrigger.genkitAction) {
|
|
263
|
+
gcfFunction.labels["genkit-action"] = "true";
|
|
264
|
+
}
|
|
262
265
|
}
|
|
263
266
|
else if (backend.isBlockingTriggered(endpoint)) {
|
|
264
267
|
gcfFunction.labels = Object.assign(Object.assign({}, gcfFunction.labels), { [constants_1.BLOCKING_LABEL]: constants_1.BLOCKING_EVENT_TO_LABEL_KEY[endpoint.blockingTrigger.eventType] });
|
|
@@ -5,7 +5,7 @@ const ora = require("ora");
|
|
|
5
5
|
const clc = require("colorette");
|
|
6
6
|
const logger_1 = require("../../logger");
|
|
7
7
|
const prompt_1 = require("../../prompt");
|
|
8
|
-
const Table = require("cli-
|
|
8
|
+
const Table = require("cli-table3");
|
|
9
9
|
const destructiveSqlKeywords = ["DROP", "DELETE"];
|
|
10
10
|
function checkIsDestructiveSql(query) {
|
|
11
11
|
const upperCaseQuery = query.toUpperCase();
|
|
@@ -75,13 +75,30 @@ async function askQuestions(setup, config) {
|
|
|
75
75
|
choices: connectorChoices,
|
|
76
76
|
});
|
|
77
77
|
const connectorYaml = JSON.parse(JSON.stringify(connectorInfo.connectorYaml));
|
|
78
|
-
const newConnectorYaml = generateSdkYaml(targetPlatform, connectorYaml, connectorInfo.directory, appDir);
|
|
78
|
+
const newConnectorYaml = await generateSdkYaml(targetPlatform, connectorYaml, connectorInfo.directory, appDir);
|
|
79
|
+
if (targetPlatform === types_1.Platform.WEB) {
|
|
80
|
+
const unusedFrameworks = fileUtils_1.SUPPORTED_FRAMEWORKS.filter((framework) => { var _a; return (_a = newConnectorYaml.generate) === null || _a === void 0 ? void 0 : _a.javascriptSdk[framework]; });
|
|
81
|
+
if (unusedFrameworks.length > 0) {
|
|
82
|
+
const additionalFrameworks = await (0, prompt_1.prompt)(setup, [
|
|
83
|
+
{
|
|
84
|
+
type: "checkbox",
|
|
85
|
+
name: "features",
|
|
86
|
+
message: "Which framework would you like to generate SDKs for? " +
|
|
87
|
+
"Press Space to select features, then Enter to confirm your choices.",
|
|
88
|
+
choices: unusedFrameworks,
|
|
89
|
+
},
|
|
90
|
+
]);
|
|
91
|
+
for (const framework of additionalFrameworks.features) {
|
|
92
|
+
newConnectorYaml.generate.javascriptSdk[framework] = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
79
96
|
const connectorYamlContents = yaml.stringify(newConnectorYaml);
|
|
80
97
|
connectorInfo.connectorYaml = newConnectorYaml;
|
|
81
98
|
const displayIOSWarning = targetPlatform === types_1.Platform.IOS;
|
|
82
99
|
return { connectorYamlContents, connectorInfo, displayIOSWarning };
|
|
83
100
|
}
|
|
84
|
-
function generateSdkYaml(targetPlatform, connectorYaml, connectorDir, appDir) {
|
|
101
|
+
async function generateSdkYaml(targetPlatform, connectorYaml, connectorDir, appDir) {
|
|
85
102
|
if (!connectorYaml.generate) {
|
|
86
103
|
connectorYaml.generate = {};
|
|
87
104
|
}
|
|
@@ -94,11 +111,19 @@ function generateSdkYaml(targetPlatform, connectorYaml, connectorDir, appDir) {
|
|
|
94
111
|
}
|
|
95
112
|
if (targetPlatform === types_1.Platform.WEB) {
|
|
96
113
|
const pkg = `${connectorYaml.connectorId}-connector`;
|
|
114
|
+
const packageJsonDir = path.relative(connectorDir, appDir);
|
|
97
115
|
const javascriptSdk = {
|
|
98
116
|
outputDir: path.relative(connectorDir, path.join(appDir, `dataconnect-generated/js/${pkg}`)),
|
|
99
117
|
package: `@firebasegen/${pkg}`,
|
|
100
|
-
packageJsonDir
|
|
118
|
+
packageJsonDir,
|
|
101
119
|
};
|
|
120
|
+
const packageJson = await (0, fileUtils_1.resolvePackageJson)(appDir);
|
|
121
|
+
if (packageJson) {
|
|
122
|
+
const frameworksUsed = (0, fileUtils_1.getFrameworksFromPackageJson)(packageJson);
|
|
123
|
+
for (const framework of frameworksUsed) {
|
|
124
|
+
javascriptSdk[framework] = true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
102
127
|
connectorYaml.generate.javascriptSdk = javascriptSdk;
|
|
103
128
|
}
|
|
104
129
|
if (targetPlatform === types_1.Platform.FLUTTER) {
|
|
@@ -14,9 +14,11 @@ const ensureApiEnabled_1 = require("../../../ensureApiEnabled");
|
|
|
14
14
|
const logger_1 = require("../../../logger");
|
|
15
15
|
const error_1 = require("../../../error");
|
|
16
16
|
const utils_1 = require("../../../utils");
|
|
17
|
+
const UNKNOWN_VERSION_TOO_HIGH = "2.0.0";
|
|
18
|
+
const LATEST_TEMPLATE = "1.0.0";
|
|
17
19
|
async function getGenkitVersion() {
|
|
18
20
|
let genkitVersion;
|
|
19
|
-
let templateVersion =
|
|
21
|
+
let templateVersion = LATEST_TEMPLATE;
|
|
20
22
|
let useInit = false;
|
|
21
23
|
let stopInstall = false;
|
|
22
24
|
if (process.env.GENKIT_DEV_VERSION && typeof process.env.GENKIT_DEV_VERSION === "string") {
|
|
@@ -39,7 +41,7 @@ async function getGenkitVersion() {
|
|
|
39
41
|
if (!genkitVersion) {
|
|
40
42
|
throw new error_1.FirebaseError("Unable to determine genkit version to install");
|
|
41
43
|
}
|
|
42
|
-
if (semver.gte(genkitVersion,
|
|
44
|
+
if (semver.gte(genkitVersion, UNKNOWN_VERSION_TOO_HIGH)) {
|
|
43
45
|
const continueInstall = await (0, prompt_1.confirm)({
|
|
44
46
|
message: clc.yellow(`WARNING: The latest version of Genkit (${genkitVersion}) isn't supported by this\n` +
|
|
45
47
|
"version of firebase-tools. You can proceed, but the provided sample code may\n" +
|
|
@@ -51,7 +53,11 @@ async function getGenkitVersion() {
|
|
|
51
53
|
stopInstall = true;
|
|
52
54
|
}
|
|
53
55
|
}
|
|
56
|
+
else if (semver.gte(genkitVersion, "1.0.0-rc.1")) {
|
|
57
|
+
templateVersion = "1.0.0";
|
|
58
|
+
}
|
|
54
59
|
else if (semver.gte(genkitVersion, "0.6.0")) {
|
|
60
|
+
templateVersion = "0.9.0";
|
|
55
61
|
}
|
|
56
62
|
else {
|
|
57
63
|
templateVersion = "";
|
|
@@ -59,6 +65,12 @@ async function getGenkitVersion() {
|
|
|
59
65
|
}
|
|
60
66
|
return { genkitVersion, templateVersion, useInit, stopInstall };
|
|
61
67
|
}
|
|
68
|
+
function showStartMessage(config, command) {
|
|
69
|
+
logger_1.logger.info("\nLogin to Google Cloud using:");
|
|
70
|
+
logger_1.logger.info(clc.bold(clc.green(` gcloud auth application-default login --project ${config.options.project}\n`)));
|
|
71
|
+
logger_1.logger.info("Then start the Genkit developer experience by running:");
|
|
72
|
+
logger_1.logger.info(clc.bold(clc.green(` ${command}`)));
|
|
73
|
+
}
|
|
62
74
|
async function doSetup(setup, config, options) {
|
|
63
75
|
var _a;
|
|
64
76
|
const genkitInfo = await getGenkitVersion();
|
|
@@ -107,23 +119,19 @@ async function doSetup(setup, config, options) {
|
|
|
107
119
|
else {
|
|
108
120
|
await (0, spawn_1.wrapSpawn)("npm", ["install", "-g", `genkit-cli@${genkitInfo.genkitVersion}`], projectDir);
|
|
109
121
|
await genkitSetup(options, genkitInfo, projectDir);
|
|
110
|
-
|
|
111
|
-
logger_1.logger.info(` cd ${setup.functions.source} && npm run genkit:start`);
|
|
122
|
+
showStartMessage(config, `cd ${setup.functions.source} && npm run genkit:start`);
|
|
112
123
|
}
|
|
113
124
|
}
|
|
114
125
|
else {
|
|
115
126
|
if (genkitInfo.useInit) {
|
|
116
127
|
await (0, spawn_1.wrapSpawn)("npm", ["install", `genkit@${genkitInfo.genkitVersion}`, "--save-dev"], projectDir);
|
|
117
128
|
await (0, spawn_1.wrapSpawn)("npx", ["genkit", "init", "-p", "firebase"], projectDir);
|
|
118
|
-
|
|
119
|
-
logger_1.logger.info(` cd ${setup.functions.source} && npx genkit start`);
|
|
129
|
+
showStartMessage(config, `cd ${setup.functions.source} && npx genkit start`);
|
|
120
130
|
}
|
|
121
131
|
else {
|
|
122
132
|
await (0, spawn_1.wrapSpawn)("npm", ["install", `genkit-cli@${genkitInfo.genkitVersion}`, "--save-dev"], projectDir);
|
|
123
133
|
await genkitSetup(options, genkitInfo, projectDir);
|
|
124
|
-
|
|
125
|
-
logger_1.logger.info();
|
|
126
|
-
logger_1.logger.info(clc.bold(clc.green(` cd ${setup.functions.source} && npm run genkit:start`)));
|
|
134
|
+
showStartMessage(config, `cd ${setup.functions.source} && npm run genkit:start`);
|
|
127
135
|
}
|
|
128
136
|
}
|
|
129
137
|
}
|