Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit da4d2d1

Browse files
Added data connect to schematics (#3638)
1 parent 35e0a98 commit da4d2d1

File tree

6 files changed

+376
-101
lines changed

6 files changed

+376
-101
lines changed

‎package-lock.json‎

Lines changed: 18 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"test:chrome-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=ChromeHeadless\"",
1313
"test:firefox-headless": "npx --yes firebase-tools@latest emulators:exec --project=demo-123 \"ng test --watch=false --browsers=FirefoxHeadless\"",
1414
"lint": "ng lint",
15+
"lint:fix": "ng lint --fix",
1516
"test:node": "node -r tsconfig-paths/register ./dist/out-tsc/jasmine/tools/jasmine.mjs --input-type=commonjs",
1617
"test:node-esm": "node -r tsconfig-paths/register ./dist/out-tsc/jasmine/tools/jasmine.mjs",
1718
"test:typings": "node ./tools/run-typings-test.js",
@@ -116,7 +117,8 @@
116117
"ts-patch": "^3.2.1",
117118
"ts-transformer-keys": "^0.4.4",
118119
"tslint": "~6.1.0",
119-
"typescript": ">=5.5 <5.7"
120+
"typescript": ">=5.5 <5.7",
121+
"yaml": "^2.7.0"
120122
},
121123
"typings": "index.d.ts"
122124
}

‎src/schematics/deploy/actions.jasmine.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ const initMocks = () => {
6363
create: () => Promise.reject(),
6464
}
6565
},
66+
init() {
67+
return Promise.resolve()
68+
},
6669
deploy: (_: FirebaseDeployConfig) => Promise.resolve(),
6770
use: () => Promise.resolve(),
6871
logger: {

‎src/schematics/interfaces.ts‎

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const featureOptions = [
2121
{ name: 'App Check', value: FEATURES.AppCheck },
2222
{ name: 'Firestore', value: FEATURES.Firestore },
2323
{ name: 'Realtime Database', value: FEATURES.Database },
24-
// { name: 'Data Connect', value: FEATURES.DataConnect },
24+
{ name: 'Data Connect', value: FEATURES.DataConnect },
2525
{ name: 'Cloud Functions (callable)', value: FEATURES.Functions },
2626
{ name: 'Cloud Messaging', value: FEATURES.Messaging },
2727
{ name: 'Performance Monitoring', value: FEATURES.Performance },
@@ -132,6 +132,8 @@ export interface FirebaseTools {
132132
serve(options: any): Promise<any>;
133133

134134
use(options: any, lol: any): Promise<any>;
135+
136+
init(feature: string, options: any): Promise<any>;
135137
}
136138

137139
export interface FirebaseHostingRewrite {
@@ -149,9 +151,14 @@ export interface FirebaseHostingConfig {
149151

150152
export type FirebaseFunctionsConfig = Record<string, any>;
151153

154+
export interface DataConnectConfig {
155+
source?: string;
156+
}
157+
152158
export interface FirebaseJSON {
153159
hosting?: FirebaseHostingConfig[] | FirebaseHostingConfig;
154160
functions?: FirebaseFunctionsConfig;
161+
dataconnect?: DataConnectConfig;
155162
}
156163

157164
export interface FirebaseRcTarget {
@@ -225,3 +232,36 @@ export interface Workspace {
225232
defaultProject?: string;
226233
projects: Record<string, WorkspaceProject>;
227234
}
235+
236+
export interface ConnectorConfig {
237+
location: string;
238+
connector: string;
239+
service: string;
240+
}
241+
export interface ConnectorYaml {
242+
connectorId: string;
243+
generate?: {
244+
javascriptSdk?: {
245+
package: string;
246+
outputDir: string;
247+
packageJsonDir?: string;
248+
angular?: boolean;
249+
}
250+
}
251+
}
252+
export interface DataConnectYaml {
253+
location: string;
254+
serviceId: string;
255+
connectorDirs: string[];
256+
}
257+
export interface DataConnectConnectorConfig {
258+
connectorYaml: ConnectorYaml;
259+
connectorConfig?: ConnectorConfig;
260+
angular?: boolean;
261+
package?: string;
262+
}
263+
264+
export interface PackageJson {
265+
dependencies: Record<string, string>;
266+
devDependencies: Record<string, string>;
267+
}

‎src/schematics/setup/index.ts‎

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
1-
import { writeFileSync } from 'fs';
1+
import { readFileSync,writeFileSync } from 'fs';
22
import { join } from 'path';
33
import { asWindowsPath, normalize } from '@angular-devkit/core';
44
import { SchematicContext, Tree, chain } from '@angular-devkit/schematics';
55
import { addRootProvider } from '@schematics/angular/utility';
66
import { getFirebaseTools } from '../firebaseTools';
77
import {
8-
DeployOptions, FEATURES, FirebaseApp, FirebaseProject,
8+
DataConnectConnectorConfig,
9+
DeployOptions, FEATURES, FirebaseApp, FirebaseJSON, FirebaseProject,
910
} from '../interfaces';
1011
import {
1112
addIgnoreFiles,
1213
featureToRules,
1314
getFirebaseProjectNameFromHost,
1415
getProject,
16+
parseDataConnectConfig,
17+
setupTanstackDependencies,
1518
} from '../utils';
1619
import { appPrompt, featuresPrompt, projectPrompt, userPrompt } from './prompts';
1720

1821
export interface SetupConfig extends DeployOptions {
1922
firebaseProject: FirebaseProject,
2023
firebaseApp?: FirebaseApp,
2124
sdkConfig?: Record<string, string>,
25+
firebaseJsonConfig?: FirebaseJSON;
26+
dataConnectConfig?: DataConnectConnectorConfig | null;
27+
firebaseJsonPath: string;
2228
}
2329

2430
export const setupProject =
@@ -35,7 +41,7 @@ export const setupProject =
3541
config.sdkConfig ? `{ ${Object.entries(config.sdkConfig).map(([k, v]) => `${k}: ${JSON.stringify(v)}`).join(", ")} }` : ""
3642
}))`;
3743
}),
38-
...featureToRules(features, projectName),
44+
...featureToRules(features, projectName,config.dataConnectConfig),
3945
]);
4046
}
4147
};
@@ -56,6 +62,10 @@ export const ngAddSetupProject = (
5662

5763
// Add the firebase files if they don't exist already so login.use works
5864
if (!host.exists('/firebase.json')) { writeFileSync(join(projectRoot, 'firebase.json'), '{}'); }
65+
66+
let firebaseJson: FirebaseJSON = JSON.parse(
67+
readFileSync(join(projectRoot, "firebase.json")).toString()
68+
);
5969

6070
const user = await userPrompt({ projectRoot });
6171
const defaultUser = await firebaseTools.login(options);
@@ -72,19 +82,57 @@ export const ngAddSetupProject = (
7282
let firebaseApp: FirebaseApp|undefined;
7383
let sdkConfig: Record<string, string>|undefined;
7484

85+
const setupConfig: SetupConfig = {
86+
...options, firebaseProject, firebaseApp, sdkConfig,
87+
firebaseJsonConfig: firebaseJson,
88+
firebaseJsonPath: projectRoot
89+
};
7590
if (features.length) {
7691

7792
firebaseApp = await appPrompt(firebaseProject, undefined, { projectRoot });
7893

7994
const result = await firebaseTools.apps.sdkconfig('web', firebaseApp.appId, { nonInteractive: true, projectRoot });
8095
sdkConfig = result.sdkConfig;
8196
delete sdkConfig.locationId;
82-
97+
setupConfig.sdkConfig = sdkConfig;
98+
setupConfig.firebaseApp = firebaseApp;
99+
// set up data connect locally if data connect hasn't already been initialized.
100+
if(features.includes(FEATURES.DataConnect)) {
101+
if (!firebaseJson.dataconnect) {
102+
try {
103+
await firebaseTools.init("dataconnect", {
104+
projectRoot,
105+
project: firebaseProject.projectId,
106+
});
107+
// Update firebaseJson values to include newly added dataconnect field in firebase.json.
108+
firebaseJson = JSON.parse(
109+
readFileSync(join(projectRoot, "firebase.json")).toString()
110+
);
111+
setupConfig.firebaseJsonConfig = firebaseJson;
112+
} catch (e) {
113+
console.error(e);
114+
}
115+
}
116+
let dataConnectConfig = parseDataConnectConfig(setupConfig);
117+
if(!dataConnectConfig?.connectorYaml.generate?.javascriptSdk) {
118+
await firebaseTools.init("dataconnect:sdk", {
119+
projectRoot,
120+
project: firebaseProject.projectId,
121+
});
122+
}
123+
// Parse through sdk again
124+
dataConnectConfig = parseDataConnectConfig(setupConfig);
125+
if(dataConnectConfig?.angular) {
126+
context.logger.info('Generated Angular SDK Enabled.');
127+
} else {
128+
context.logger.info('Generated Angular SDK Disabled. Please add `angular: true` to your connector.yaml');
129+
}
130+
setupTanstackDependencies(host, context);
131+
setupConfig.dataConnectConfig = dataConnectConfig;
132+
}
133+
83134
}
84135

85-
return setupProject(host, context, features, {
86-
...options, firebaseProject, firebaseApp, sdkConfig,
87-
});
88-
136+
return setupProject(host, context, features, setupConfig);
89137
}
90138
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /