create-ec-app 0.0.3 → 0.0.5

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/README.md CHANGED
@@ -151,13 +151,13 @@ create-ec-app my-project
151
151
 
152
152
  All applications come with:
153
153
 
154
- - TypeScript configuration
155
- - ESLint and Prettier setup
156
- - Git repository initialization
157
- - Environment configuration
158
- - Build and development scripts
159
- - Enterprise-ready folder structure
160
- - Tailored project README in the generated app root (setup, auth, deployment)
154
+ - TypeScript configuration
155
+ - ESLint and Prettier setup
156
+ - Git repository initialization
157
+ - Environment configuration
158
+ - Build and development scripts
159
+ - Enterprise-ready folder structure
160
+ - Tailored project README in the generated app root (setup, auth, deployment)
161
161
 
162
162
  ### Webresource & Power Pages Apps Include:
163
163
 
@@ -1 +1 @@
1
- {"version":3,"file":"powerpages.d.ts","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAoqB3E,CAAC"}
1
+ {"version":3,"file":"powerpages.d.ts","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,mBAAmB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CA4wB3E,CAAC"}
@@ -1,10 +1,10 @@
1
+ import { execSync } from "node:child_process";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
1
4
  import chalk from "chalk";
2
- import ora from "ora";
3
5
  import fs from "fs-extra";
4
- import path from "path";
5
- import { execSync } from "child_process";
6
6
  import inquirer from "inquirer";
7
- import { fileURLToPath } from "url";
7
+ import ora from "ora";
8
8
  // Helper function to run commands and show a spinner
9
9
  const runCommand = (command, spinnerMessage) => {
10
10
  const spinner = ora(spinnerMessage).start();
@@ -65,7 +65,7 @@ export const createPowerPagesApp = async (projectName) => {
65
65
  fs.writeJsonSync(packageJsonPath, packageJson, { spaces: 2 });
66
66
  ora("Updated package.json with Vite 7 overrides and custom build script").succeed();
67
67
  // Install dependencies based on UI library choice
68
- let dependencies = [
68
+ const dependencies = [
69
69
  "tailwindcss@^4",
70
70
  "@tailwindcss/vite@^4",
71
71
  "@tanstack/react-query",
@@ -303,7 +303,7 @@ export const AuthButton = () => {
303
303
  if (isLoading) {
304
304
  return (
305
305
  <div className="flex items-center gap-2 text-sm text-gray-600">
306
- <span className="h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-transparent" />
306
+ <span className="w-4 h-4 border-2 border-gray-300 rounded-full animate-spin border-t-transparent" />
307
307
  <span>Loading...</span>
308
308
  </div>
309
309
  );
@@ -317,8 +317,8 @@ export const AuthButton = () => {
317
317
  </span>
318
318
  <button
319
319
  type="button"
320
- className="rounded border border-gray-300 px-3 py-1 text-sm font-medium text-gray-700 transition hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
321
- onClick={() => (window.location.href = '/Account/Login/LogOff?returnUrl=%2F')}
320
+ className="px-3 py-1 text-sm font-medium text-gray-700 transition border border-gray-300 rounded hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
321
+ onClick={() => { window.location.href = '/Account/Login/LogOff?returnUrl=%2F'; }}
322
322
  >
323
323
  Logout
324
324
  </button>
@@ -332,7 +332,7 @@ export const AuthButton = () => {
332
332
  <button
333
333
  name="provider"
334
334
  type="submit"
335
- className="rounded border border-gray-300 px-3 py-1 text-sm font-medium text-gray-700 transition hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
335
+ className="px-3 py-1 text-sm font-medium text-gray-700 transition border border-gray-300 rounded hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2"
336
336
  value={\`https://login.windows.net/\${tenantId}/\`}
337
337
  >
338
338
  Log In
@@ -353,7 +353,7 @@ function App() {
353
353
  return (
354
354
  <>
355
355
  <AuthProvider>
356
- <div className="flex flex-col h-screen items-center justify-center gap-4">
356
+ <div className="flex flex-col items-center justify-center h-screen gap-4">
357
357
  <div>Hello World!</div>
358
358
  <AuthButton />
359
359
  </div>
@@ -374,7 +374,7 @@ function App() {
374
374
  return (
375
375
  <>
376
376
  <AuthProvider>
377
- <div className="flex flex-col h-screen items-center justify-center gap-4">
377
+ <div className="flex flex-col items-center justify-center h-screen gap-4">
378
378
  <div>Hello World!</div>
379
379
  <Button>Click me</Button>
380
380
  <AuthButton />
@@ -465,7 +465,7 @@ root.render(
465
465
  fs.writeFileSync(tsConfigPath, JSON.stringify(tsConfig, null, 2), "utf8");
466
466
  ora("Updated tsconfig.json with path alias '@'").succeed();
467
467
  }
468
- catch (e) {
468
+ catch (_) {
469
469
  ora("Warning: could not update tsconfig.json with alias").warn();
470
470
  }
471
471
  }
@@ -507,8 +507,15 @@ export const AuthProvider: React.FC<AuthProviderProps> = ({ children }) => {
507
507
  const refreshToken = async (): Promise<void> => {
508
508
  try {
509
509
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
510
- const newToken = await (window as any).shell?.getTokenDeferred();
511
- setToken(newToken || '');
510
+ if ((window as any).shell?.getTokenDeferred) {
511
+ const newToken = await (window as any).shell.getTokenDeferred();
512
+ setToken(newToken || '');
513
+ } else if (import.meta.env.DEV) {
514
+ // Local development: read from token.json via fetch
515
+ const resp = await fetch('/token.json');
516
+ const data = await resp.json();
517
+ setToken(data.accessToken || '');
518
+ }
512
519
  } catch (error) {
513
520
  console.error('Error fetching token:', error);
514
521
  setToken('');
@@ -582,11 +589,101 @@ export const useAuth = (): AuthContextType => {
582
589
  };`;
583
590
  fs.writeFileSync(authContextPath, authContextContent, "utf8");
584
591
  ora("Created AuthContext.tsx in src/context").succeed();
585
- // Create services directory and DataService.ts
592
+ // Create authService.ts for API URL and Auth Headers logic
586
593
  const servicesDir = path.join(projectDir, "src", "services");
587
594
  fs.ensureDirSync(servicesDir);
595
+ const authServicePath = path.join(servicesDir, "authService.ts");
596
+ const authServiceContent = `
597
+ /// <reference types="vite/client" />
598
+
599
+ const getAuthToken = async (): Promise<string> => {
600
+ const tokenModule = await import("../../token.json");
601
+ const token = tokenModule.default.accessToken;
602
+ return token;
603
+ };
604
+
605
+ /**
606
+ * AuthService: Helper functions for API URL and Auth headers.
607
+ * Supports Power Pages runtime and local development with token.json.
608
+ */
609
+
610
+ // Returns either '/_api' (Power Pages) or a remote URL (from token.json) in local dev
611
+ export async function getApiUrl(): Promise<string> {
612
+ // Power Pages runtime
613
+ if (typeof window !== 'undefined' && (window as any).shell?.getTokenDeferred) {
614
+ return '/_api';
615
+ }
616
+
617
+ // Local dev use Dynamics API directly
618
+ if (typeof window !== 'undefined' && import.meta.env.DEV) {
619
+ return "https://DOMAIN.ENV.dynamics.com/api/data/v9.2";
620
+ }
621
+ // fallback
622
+ return '/_api';
623
+ }
624
+
625
+ // Returns authentication headers for fetch requests
626
+ export async function getAuthHeaders(): Promise<HeadersInit> {
627
+ // Power Pages runtime
628
+ if (typeof window !== 'undefined' && (window as any).shell?.getTokenDeferred) {
629
+ const token = await (window as any).shell.getTokenDeferred();
630
+ return {
631
+ Authorization: \`Bearer \${token}\`
632
+ };
633
+ }
634
+
635
+ // Local dev: read from token.json
636
+ if (typeof window !== 'undefined' && import.meta.env.DEV) {
637
+ try {
638
+ const token = await getAuthToken();
639
+ if (token) {
640
+ return {
641
+ Authorization: \`Bearer \${token}\`
642
+ };
643
+ }
644
+ } catch { }
645
+ }
646
+ // fallback
647
+ return {};
648
+ }
649
+
650
+ `;
651
+ fs.writeFileSync(authServicePath, authServiceContent, "utf8");
652
+ ora("Created authService.ts in src/services").succeed();
653
+ // Create token.json at project root with placeholder token for local dev
654
+ const tokenJsonPath = path.join(projectDir, "token.json");
655
+ const tokenJsonContent = `{
656
+ "accessToken": "<your-token-here>",
657
+ "expiresIn": "",
658
+ "expires_on": 0,
659
+ "tenant": "",
660
+ "tokenType": "Bearer"
661
+ }
662
+ `;
663
+ fs.writeFileSync(tokenJsonPath, tokenJsonContent, "utf8");
664
+ ora("Created token.json for local development").succeed();
665
+ // Add token.json to .gitignore
666
+ const gitignorePath = path.join(projectDir, ".gitignore");
667
+ let gitignoreContent = "";
668
+ if (fs.existsSync(gitignorePath)) {
669
+ gitignoreContent = fs.readFileSync(gitignorePath, "utf8");
670
+ if (!gitignoreContent.includes("token.json")) {
671
+ gitignoreContent += "\ntoken.json\n";
672
+ fs.writeFileSync(gitignorePath, gitignoreContent, "utf8");
673
+ ora("Added token.json to .gitignore").succeed();
674
+ }
675
+ }
676
+ else {
677
+ fs.writeFileSync(gitignorePath, "token.json\n", "utf8");
678
+ ora("Created .gitignore and added token.json").succeed();
679
+ }
680
+ // Print reminder for user to fill in token.json
681
+ console.log(chalk.yellowBright("\nReminder: For local development, please populate 'token.json' at the project root with a valid access token and remoteUrl if needed.\n"));
682
+ // Create DataService.ts using getApiUrl/getAuthHeaders (for future-proofing)
588
683
  const dataServicePath = path.join(servicesDir, "DataService.ts");
589
- const dataServiceContent = `export interface T {
684
+ const dataServiceContent = `import { getApiUrl, getAuthHeaders } from "./authService";
685
+
686
+ export interface T {
590
687
  entityId: string;
591
688
  [key: string]: unknown;
592
689
  }
@@ -595,12 +692,13 @@ export interface ApiResponse<T> {
595
692
  value: T[];
596
693
  }
597
694
 
598
- const BASE_URL = '/_api';
599
-
600
695
  export async function getEntity(): Promise<T[]> {
601
- const response = await fetch(\`\${BASE_URL}/entity\`, {
696
+ const baseUrl = await getApiUrl();
697
+ const headers = await getAuthHeaders();
698
+ const response = await fetch(\`\${baseUrl}/entity\`, {
602
699
  method: 'GET',
603
700
  headers: {
701
+ ...headers,
604
702
  'Accept': 'application/json',
605
703
  'Content-Type': 'application/json',
606
704
  },
@@ -646,7 +744,7 @@ export async function getEntity(): Promise<T[]> {
646
744
  fs.writeFileSync(path.join(projectDir, "README.md"), readmeContent, "utf8");
647
745
  ora("Added README.md from template").succeed();
648
746
  }
649
- catch (err) {
747
+ catch (_) {
650
748
  ora("Failed to add README.md from template; keeping default README").warn();
651
749
  }
652
750
  // Initialize Git
@@ -1 +1 @@
1
- {"version":3,"file":"powerpages.js","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"powerpages.js","sourceRoot":"","sources":["../../src/creators/powerpages.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,108 @@
1
- # EC Power Pages App
1
+ # EC Power Pages Single Page Application (SPA)
2
2
 
3
- React + Vite + TypeScript template tailored for Microsoft Power Pages. It includes Tailwind CSS, a choice of UI library (Kendo UI or Shadcn/ui), TanStack Query, and an authentication context designed for the Power Pages runtime.
3
+ This is a Power Pages Single Page Application (SPA) built with React, Vite, and TypeScript, generated by `create-ec-app`. It follows Microsoft’s official Power Pages code site model, providing a modern, scalable, and maintainable frontend architecture tailored specifically for Power Pages environments. The app includes integrated authentication, data fetching, and UI options designed to work seamlessly within the Power Pages runtime.
4
4
 
5
5
  ## Features
6
6
 
7
- - React + Vite + TypeScript
8
- - Tailwind CSS (Kendo preset when using Kendo UI)
9
- - UI choice: Kendo UI (with theme selection) or Shadcn/ui
10
- - TanStack Query provider configured in `src/main.tsx`
11
- - Power Pages `AuthContext` (`src/context/AuthContext.tsx`) that:
12
- - Detects `Microsoft.Dynamic365.Portal.User`
13
- - Retrieves tokens via `window.shell.getTokenDeferred()`
14
- - Example `AuthButton` component in `src/components/shared/AuthButton.tsx`
15
- - Power Pages configuration file `powerpages.config.json`
7
+ - **React + Vite + TypeScript**: Modern frontend stack for fast development and optimized builds.
8
+ - **Tailwind CSS**: Utility-first CSS framework with an optional Kendo UI preset for styling consistency.
9
+ - **UI Library Choice**: Select between Kendo UI (including theme selection) or Shadcn/ui components.
10
+ - **TanStack Query**: Preconfigured React Query provider for efficient data fetching and caching.
11
+ - **Power Pages AuthContext**: Integrated authentication context that detects the Power Pages user (`Microsoft.Dynamics365.Portal.User`) and retrieves tokens via `window.shell.getTokenDeferred()`.
12
+ - **Local Development Support**: Includes a mock token file and configuration to simulate authentication during local development.
13
+ - **Optimized Vite Build Output**: Builds optimized assets tailored for upload to Power Pages code sites.
16
14
 
17
- ## Prerequisites
15
+ ## Auth and API Access
18
16
 
19
- - Node.js 18+ and npm 9+
20
- - Kendo UI license (if applicable)
21
- - Access to a Power Pages site to host the built assets
17
+ This SPA integrates with Power Pages authentication and API access mechanisms. The `AuthContext` handles user detection and token retrieval using the Power Pages runtime API. Tokens are obtained asynchronously through `window.shell.getTokenDeferred()`, enabling authenticated API calls to Power Pages endpoints.
22
18
 
23
- ## Getting Started
19
+ ### Example: API URL and Auth Headers
24
20
 
25
- - Install dependencies: `npm install`
26
- - Activate Kendo license (if used): `npx kendo-ui-license activate`
27
- - Dev server: `npm run dev`
28
- - Production build: `npm run build`
29
- - Development build (easier debugging): `npm run build:dev`
21
+ Here is an example of utility functions to build API URLs and set authentication headers for requests within the Power Pages SPA:
30
22
 
31
- ## Key Files
23
+ ```ts
24
+ // src/utils/api.ts
32
25
 
33
- - `src/context/AuthContext.tsx`: Provides `useAuth()` with `user`, `isAuthenticated`, `tenantId`, `token`, and `refreshToken()`.
34
- - `src/components/shared/AuthButton.tsx`: Sign-in/out button wired for Power Pages.
35
- - `src/services/DataService.ts`: Example service (`getEntity`) using `/_api`.
36
- - `src/main.tsx`: Sets up TanStack Query and, when Kendo UI is selected, imports the chosen Kendo theme CSS.
37
- - `kendo-tw-preset.js` and `tailwind.config.js`: Tailwind + Kendo integration (only present for Kendo projects). For Shadcn/ui, a standard Tailwind config is generated.
26
+ export function getApiUrl(entity: string, query = ''): string {
27
+ // Base path for Power Pages API (adjust if your site uses a different base)
28
+ const baseUrl = '/_api';
29
+ return `${baseUrl}/${entity}${query ? `?${query}` : ''}`;
30
+ }
31
+
32
+ export function getAuthHeaders(token: string) {
33
+ return {
34
+ Authorization: `Bearer ${token}`,
35
+ 'Content-Type': 'application/json',
36
+ Accept: 'application/json',
37
+ };
38
+ }
39
+ ```
40
+
41
+ ### Azure CLI Token Generation for Local Development
42
+
43
+ For local development and debugging outside the Power Pages runtime, you can generate an Azure AD token using the Azure CLI. This token can be used to simulate authenticated requests against your Power Pages environment:
44
+
45
+ ```bash
46
+ az account get-access-token --resource=https://<your-powerpages-environment>.crm.dynamics.com
47
+ ```
48
+
49
+ Replace `<your-powerpages-environment>` with your actual environment URL. Use the obtained token in your local mock token file or directly in API request headers.
50
+
51
+ ## Example Service Using TanStack Query
52
+
53
+ Here is an example of a service module `src/services/contacts.ts` that demonstrates fetching contacts data from the Power Pages API using TanStack Query:
38
54
 
39
- ## Usage Example
55
+ ```ts
56
+ // src/services/contacts.ts
57
+ import { useQuery } from '@tanstack/react-query';
58
+ import { getApiUrl, getAuthHeaders } from '@/utils/api';
59
+ import { useAuth } from '@/context/AuthContext';
40
60
 
41
- Wrap your app in `AuthProvider` (already done in `App.tsx`):
61
+ export interface Contact {
62
+ contactid: string;
63
+ firstname: string;
64
+ lastname: string;
65
+ emailaddress1?: string;
66
+ }
67
+
68
+ async function fetchContacts(token: string): Promise<Contact[]> {
69
+ const response = await fetch(getApiUrl('contacts'), {
70
+ headers: getAuthHeaders(token),
71
+ });
72
+ if (!response.ok) {
73
+ throw new Error('Failed to fetch contacts');
74
+ }
75
+ const data = await response.json();
76
+ return data.value;
77
+ }
42
78
 
43
- ```tsx
44
- import { useAuth } from '@/context/AuthContext'
79
+ export function useContacts() {
80
+ const { token } = useAuth();
45
81
 
46
- export function Profile() {
47
- const { user, isAuthenticated } = useAuth()
48
- if (!isAuthenticated) return null
49
- return <div>{user?.firstName} {user?.lastName}</div>
82
+ return useQuery(['contacts'], () => fetchContacts(token!), {
83
+ enabled: !!token,
84
+ });
50
85
  }
51
86
  ```
52
87
 
88
+ This pattern leverages the `AuthContext` to access the current token and uses TanStack Query to manage caching and background updates.
89
+
53
90
  ## Deployment
54
91
 
55
- - Upload files from `dist` into your Power Pages site as static content and reference them in your pages as needed.
56
- - The `powerpages.config.json` file indicates output location and landing page; adapt to your project conventions.
92
+ To deploy your Power Pages SPA:
93
+
94
+ - Build the project using `npm run build` or `npm run build:dev` for development builds.
95
+ - Upload the contents of the `dist` folder to your Power Pages site’s **code site**. This is a dedicated location for hosting SPA assets as static content.
96
+ - Reference your built JavaScript and CSS files in your Power Pages pages as needed.
97
+
98
+ For detailed guidance on Power Pages code sites and deployment, see the [Microsoft Power Pages documentation on code sites](https://learn.microsoft.com/en-us/power-pages/developer/code-sites).
99
+
100
+ Power Pages code sites support continuous deployment workflows via the Power Platform CLI, enabling streamlined updates and integration with source control.
101
+
102
+ ## Configuration
103
+
104
+ The `powerpages.config.json` file defines your site configuration, including output paths and landing page settings. Adjust this file to match your project and deployment conventions.
105
+
106
+ ---
107
+
108
+ This SPA template provides a robust foundation for building Power Pages applications with modern web development tools and best practices, ensuring smooth integration with the Power Pages platform and scalable, maintainable code.
package/package.json CHANGED
@@ -1,60 +1,60 @@
1
1
  {
2
- "name": "create-ec-app",
3
- "version": "0.0.3",
4
- "description": "Unified CLI tool to create different types of EC applications: Webresource, Portal, Power Pages, and Mobile apps.",
5
- "main": "dist/index.js",
6
- "type": "module",
7
- "bin": {
8
- "create-ec-app": "bin/index.js"
9
- },
10
- "scripts": {
11
- "build": "tsc && node scripts/copy-assets.mjs",
12
- "dev": "tsc --watch",
13
- "test": "node bin/index.js test-app",
14
- "prepublishOnly": "npm run build"
15
- },
16
- "keywords": [
17
- "react",
18
- "vite",
19
- "nextjs",
20
- "expo",
21
- "kendo",
22
- "tailwind",
23
- "cli",
24
- "powerpages",
25
- "portal",
26
- "mobile",
27
- "webresource",
28
- "dynamics",
29
- "ec"
30
- ],
31
- "author": "Schalk Conradie",
32
- "license": "MIT",
33
- "dependencies": {
34
- "chalk": "^5.3.0",
35
- "fs-extra": "^11.2.0",
36
- "inquirer": "^12.6.3",
37
- "ora": "^8.0.1"
38
- },
39
- "devDependencies": {
40
- "@types/node": "^22.8.6",
41
- "@types/fs-extra": "^11.0.4",
42
- "@types/inquirer": "^9.0.7",
43
- "typescript": "^5.6.3"
44
- },
45
- "engines": {
46
- "node": ">=18.0.0"
47
- },
48
- "files": [
49
- "dist/**/*",
50
- "bin/**/*"
51
- ],
52
- "repository": {
53
- "type": "git",
54
- "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app.git"
55
- },
56
- "bugs": {
57
- "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app/issues"
58
- },
59
- "homepage": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app#readme"
60
- }
2
+ "name": "create-ec-app",
3
+ "version": "0.0.5",
4
+ "description": "Unified CLI tool to create different types of EC applications: Webresource, Portal, Power Pages, and Mobile apps.",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "create-ec-app": "bin/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc && node scripts/copy-assets.mjs",
12
+ "dev": "tsc --watch",
13
+ "test": "node bin/index.js test-app",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "react",
18
+ "vite",
19
+ "nextjs",
20
+ "expo",
21
+ "kendo",
22
+ "tailwind",
23
+ "cli",
24
+ "powerpages",
25
+ "portal",
26
+ "mobile",
27
+ "webresource",
28
+ "dynamics",
29
+ "ec"
30
+ ],
31
+ "author": "Schalk Conradie",
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "chalk": "^5.3.0",
35
+ "fs-extra": "^11.2.0",
36
+ "inquirer": "^12.6.3",
37
+ "ora": "^8.0.1"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^22.8.6",
41
+ "@types/fs-extra": "^11.0.4",
42
+ "@types/inquirer": "^9.0.7",
43
+ "typescript": "^5.6.3"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "files": [
49
+ "dist/**/*",
50
+ "bin/**/*"
51
+ ],
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app/issues"
58
+ },
59
+ "homepage": "https://github.com/Enterprisecloud-Pty-Ltd/create-ec-app#readme"
60
+ }