@xbg.solutions/create-backend 1.0.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/bin/create-backend.js +3 -0
- package/lib/cli.d.ts +12 -0
- package/lib/cli.js +55 -0
- package/lib/cli.js.map +1 -0
- package/lib/commands/add-util.d.ts +9 -0
- package/lib/commands/add-util.js +119 -0
- package/lib/commands/add-util.js.map +1 -0
- package/lib/commands/init.d.ts +11 -0
- package/lib/commands/init.js +372 -0
- package/lib/commands/init.js.map +1 -0
- package/lib/commands/sync.d.ts +10 -0
- package/lib/commands/sync.js +161 -0
- package/lib/commands/sync.js.map +1 -0
- package/lib/utils-registry.d.ts +25 -0
- package/lib/utils-registry.js +187 -0
- package/lib/utils-registry.js.map +1 -0
- package/package.json +38 -0
- package/src/project-template/__examples__/README.md +559 -0
- package/src/project-template/__examples__/blog-platform.model.ts +528 -0
- package/src/project-template/__examples__/communications-usage.ts +175 -0
- package/src/project-template/__examples__/ecommerce-store.model.ts +1200 -0
- package/src/project-template/__examples__/saas-multi-tenant.model.ts +798 -0
- package/src/project-template/__examples__/user.model.ts +221 -0
- package/src/project-template/__scripts__/deploy.js +115 -0
- package/src/project-template/__scripts__/generate.js +122 -0
- package/src/project-template/__scripts__/setup.js +425 -0
- package/src/project-template/__scripts__/validate.js +325 -0
- package/src/project-template/firebase.json +32 -0
- package/src/project-template/firestore.rules +12 -0
- package/src/project-template/functions/jest.config.js +49 -0
- package/src/project-template/functions/src/index.ts +46 -0
- package/src/project-template/functions/tsconfig.json +38 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sync Command
|
|
4
|
+
* Updates an existing project with latest boilerplate changes
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
40
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
|
+
};
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.syncProject = syncProject;
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs-extra"));
|
|
46
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
47
|
+
const child_process_1 = require("child_process");
|
|
48
|
+
const utils_registry_1 = require("../utils-registry");
|
|
49
|
+
async function syncProject(options) {
|
|
50
|
+
const projectDir = path.resolve(options.directory);
|
|
51
|
+
const functionsDir = path.join(projectDir, 'functions');
|
|
52
|
+
console.log(chalk_1.default.bold.blue('\n── XBG Backend Sync ────────────────────────────\n'));
|
|
53
|
+
// Verify this is an XBG project
|
|
54
|
+
if (!await fs.pathExists(path.join(functionsDir, 'package.json'))) {
|
|
55
|
+
console.error(chalk_1.default.red('Not an XBG backend project. Run from the project root.'));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const result = {
|
|
59
|
+
packagesUpdated: [],
|
|
60
|
+
packagesAdded: [],
|
|
61
|
+
filesUpdated: [],
|
|
62
|
+
newUtilitiesAvailable: [],
|
|
63
|
+
};
|
|
64
|
+
// Check for package updates
|
|
65
|
+
console.log(chalk_1.default.cyan('Checking for package updates...\n'));
|
|
66
|
+
const pkgJson = await fs.readJson(path.join(functionsDir, 'package.json'));
|
|
67
|
+
const deps = pkgJson.dependencies || {};
|
|
68
|
+
// Check installed @xbg packages
|
|
69
|
+
const installedXbgPackages = Object.keys(deps).filter((d) => d.startsWith('@xbg/'));
|
|
70
|
+
for (const pkg of installedXbgPackages) {
|
|
71
|
+
const currentVersion = deps[pkg];
|
|
72
|
+
try {
|
|
73
|
+
const latestVersion = (0, child_process_1.execSync)(`npm view ${pkg} version 2>/dev/null`, {
|
|
74
|
+
encoding: 'utf8',
|
|
75
|
+
timeout: 10000,
|
|
76
|
+
}).trim();
|
|
77
|
+
if (latestVersion && currentVersion !== `^${latestVersion}`) {
|
|
78
|
+
result.packagesUpdated.push(`${pkg}: ${currentVersion} -> ^${latestVersion}`);
|
|
79
|
+
console.log(chalk_1.default.yellow(` Update available: ${pkg} ${currentVersion} -> ^${latestVersion}`));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(chalk_1.default.green(` Up to date: ${pkg} ${currentVersion}`));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (_a) {
|
|
86
|
+
console.log(chalk_1.default.dim(` Skipped: ${pkg} (not published yet)`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Check for new utilities available
|
|
90
|
+
const allPackageNames = utils_registry_1.UTILITY_REGISTRY.map((u) => u.package);
|
|
91
|
+
const newUtils = allPackageNames.filter((pkg) => !installedXbgPackages.includes(pkg));
|
|
92
|
+
if (newUtils.length > 0) {
|
|
93
|
+
result.newUtilitiesAvailable = newUtils;
|
|
94
|
+
console.log(chalk_1.default.cyan(`\n${newUtils.length} additional utilities available:`));
|
|
95
|
+
for (const pkg of newUtils) {
|
|
96
|
+
const util = utils_registry_1.UTILITY_REGISTRY.find((u) => u.package === pkg);
|
|
97
|
+
if (util) {
|
|
98
|
+
console.log(chalk_1.default.dim(` ${util.name}: ${util.description} (${pkg})`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
console.log(chalk_1.default.dim(`\n Run ${chalk_1.default.bold('npx @xbg/create-backend add-util')} to add utilities.`));
|
|
102
|
+
}
|
|
103
|
+
// Sync scaffold files (tsconfig, scripts)
|
|
104
|
+
console.log(chalk_1.default.cyan('\nChecking scaffold files...\n'));
|
|
105
|
+
const templateDir = path.resolve(__dirname, '../../src/project-template');
|
|
106
|
+
// Check scripts
|
|
107
|
+
const scriptsDir = path.join(templateDir, '__scripts__');
|
|
108
|
+
if (await fs.pathExists(scriptsDir)) {
|
|
109
|
+
const scripts = await fs.readdir(scriptsDir);
|
|
110
|
+
for (const script of scripts) {
|
|
111
|
+
const templateScript = path.join(scriptsDir, script);
|
|
112
|
+
const projectScript = path.join(projectDir, '__scripts__', script);
|
|
113
|
+
if (!await fs.pathExists(projectScript)) {
|
|
114
|
+
if (!options.checkOnly) {
|
|
115
|
+
await fs.copy(templateScript, projectScript);
|
|
116
|
+
result.filesUpdated.push(`__scripts__/${script}`);
|
|
117
|
+
console.log(chalk_1.default.green(` Added: __scripts__/${script}`));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.log(chalk_1.default.yellow(` Missing: __scripts__/${script}`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const templateContent = await fs.readFile(templateScript, 'utf8');
|
|
125
|
+
const projectContent = await fs.readFile(projectScript, 'utf8');
|
|
126
|
+
if (templateContent !== projectContent) {
|
|
127
|
+
if (!options.checkOnly) {
|
|
128
|
+
await fs.copy(templateScript, projectScript);
|
|
129
|
+
result.filesUpdated.push(`__scripts__/${script}`);
|
|
130
|
+
console.log(chalk_1.default.yellow(` Updated: __scripts__/${script}`));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log(chalk_1.default.yellow(` Outdated: __scripts__/${script}`));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.log(chalk_1.default.green(` Current: __scripts__/${script}`));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Apply updates
|
|
143
|
+
if (!options.checkOnly && result.packagesUpdated.length > 0) {
|
|
144
|
+
console.log(chalk_1.default.cyan('\nUpdating packages...\n'));
|
|
145
|
+
try {
|
|
146
|
+
(0, child_process_1.execSync)('npm update', { cwd: functionsDir, stdio: 'inherit' });
|
|
147
|
+
console.log(chalk_1.default.green('Packages updated.'));
|
|
148
|
+
}
|
|
149
|
+
catch (_b) {
|
|
150
|
+
console.error(chalk_1.default.red('Failed to update packages. Run npm update manually.'));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Summary
|
|
154
|
+
console.log(chalk_1.default.bold.green(`\n── Sync Complete ───────────────────────────────\n`));
|
|
155
|
+
console.log(` Packages checked: ${installedXbgPackages.length}`);
|
|
156
|
+
console.log(` Updates available: ${result.packagesUpdated.length}`);
|
|
157
|
+
console.log(` Files updated: ${result.filesUpdated.length}`);
|
|
158
|
+
console.log(` New utils: ${result.newUtilitiesAvailable.length}`);
|
|
159
|
+
console.log('');
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry of available @xbg/utils-* packages
|
|
3
|
+
* Used by the CLI to offer utility selection during project init/sync
|
|
4
|
+
*/
|
|
5
|
+
export interface UtilityDefinition {
|
|
6
|
+
name: string;
|
|
7
|
+
package: string;
|
|
8
|
+
description: string;
|
|
9
|
+
category: 'core' | 'data' | 'communication' | 'integration' | 'security' | 'infrastructure';
|
|
10
|
+
alwaysIncluded?: boolean;
|
|
11
|
+
envVars?: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const UTILITY_REGISTRY: UtilityDefinition[];
|
|
14
|
+
/**
|
|
15
|
+
* Get utilities that are always included
|
|
16
|
+
*/
|
|
17
|
+
export declare function getRequiredUtilities(): UtilityDefinition[];
|
|
18
|
+
/**
|
|
19
|
+
* Get utilities available for selection
|
|
20
|
+
*/
|
|
21
|
+
export declare function getOptionalUtilities(): UtilityDefinition[];
|
|
22
|
+
/**
|
|
23
|
+
* Get utilities grouped by category
|
|
24
|
+
*/
|
|
25
|
+
export declare function getUtilitiesByCategory(): Record<string, UtilityDefinition[]>;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Registry of available @xbg/utils-* packages
|
|
4
|
+
* Used by the CLI to offer utility selection during project init/sync
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.UTILITY_REGISTRY = void 0;
|
|
8
|
+
exports.getRequiredUtilities = getRequiredUtilities;
|
|
9
|
+
exports.getOptionalUtilities = getOptionalUtilities;
|
|
10
|
+
exports.getUtilitiesByCategory = getUtilitiesByCategory;
|
|
11
|
+
exports.UTILITY_REGISTRY = [
|
|
12
|
+
// Core utilities (always included with @xbg/backend-core)
|
|
13
|
+
{
|
|
14
|
+
name: 'Logger',
|
|
15
|
+
package: '@xbg/utils-logger',
|
|
16
|
+
description: 'Structured logging with PII sanitization',
|
|
17
|
+
category: 'core',
|
|
18
|
+
alwaysIncluded: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'Events',
|
|
22
|
+
package: '@xbg/utils-events',
|
|
23
|
+
description: 'Event bus for domain events',
|
|
24
|
+
category: 'core',
|
|
25
|
+
alwaysIncluded: true,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: 'Errors',
|
|
29
|
+
package: '@xbg/utils-errors',
|
|
30
|
+
description: 'Custom error classes',
|
|
31
|
+
category: 'core',
|
|
32
|
+
alwaysIncluded: true,
|
|
33
|
+
},
|
|
34
|
+
// Data utilities
|
|
35
|
+
{
|
|
36
|
+
name: 'Firestore Connector',
|
|
37
|
+
package: '@xbg/utils-firestore-connector',
|
|
38
|
+
description: 'Multi-database Firestore access and Firebase Admin SDK init',
|
|
39
|
+
category: 'data',
|
|
40
|
+
alwaysIncluded: true,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Cache Connector',
|
|
44
|
+
package: '@xbg/utils-cache-connector',
|
|
45
|
+
description: 'Multi-provider caching (memory, Firestore, Redis)',
|
|
46
|
+
category: 'data',
|
|
47
|
+
envVars: ['CACHE_ENABLED', 'CACHE_DEFAULT_PROVIDER', 'CACHE_DEFAULT_TTL'],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Firebase Event Bridge',
|
|
51
|
+
package: '@xbg/utils-firebase-event-bridge',
|
|
52
|
+
description: 'Firebase triggers to domain event normalization',
|
|
53
|
+
category: 'data',
|
|
54
|
+
},
|
|
55
|
+
// Communication utilities
|
|
56
|
+
{
|
|
57
|
+
name: 'Email Connector',
|
|
58
|
+
package: '@xbg/utils-email-connector',
|
|
59
|
+
description: 'Email sending with Mailjet and Ortto providers',
|
|
60
|
+
category: 'communication',
|
|
61
|
+
envVars: ['EMAIL_ENABLED', 'EMAIL_PROVIDER', 'MAILJET_API_KEY', 'MAILJET_SECRET_KEY'],
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'SMS Connector',
|
|
65
|
+
package: '@xbg/utils-sms-connector',
|
|
66
|
+
description: 'SMS sending with Twilio and MessageBird providers',
|
|
67
|
+
category: 'communication',
|
|
68
|
+
envVars: ['SMS_ENABLED', 'SMS_PROVIDER', 'TWILIO_ACCOUNT_SID', 'TWILIO_AUTH_TOKEN'],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Push Notifications',
|
|
72
|
+
package: '@xbg/utils-push-notifications-connector',
|
|
73
|
+
description: 'Push notifications via Firebase Cloud Messaging',
|
|
74
|
+
category: 'communication',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Realtime Connector',
|
|
78
|
+
package: '@xbg/utils-realtime-connector',
|
|
79
|
+
description: 'SSE and WebSocket providers',
|
|
80
|
+
category: 'communication',
|
|
81
|
+
},
|
|
82
|
+
// Integration utilities
|
|
83
|
+
{
|
|
84
|
+
name: 'CRM Connector',
|
|
85
|
+
package: '@xbg/utils-crm-connector',
|
|
86
|
+
description: 'CRM integration with HubSpot and Salesforce',
|
|
87
|
+
category: 'integration',
|
|
88
|
+
envVars: ['CRM_ENABLED', 'CRM_PROVIDER', 'HUBSPOT_API_KEY'],
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'LLM Connector',
|
|
92
|
+
package: '@xbg/utils-llm-connector',
|
|
93
|
+
description: 'LLM integration with OpenAI, Claude, and Gemini',
|
|
94
|
+
category: 'integration',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'ERP Connector',
|
|
98
|
+
package: '@xbg/utils-erp-connector',
|
|
99
|
+
description: 'ERP integration with Workday',
|
|
100
|
+
category: 'integration',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Journey Connector',
|
|
104
|
+
package: '@xbg/utils-journey-connector',
|
|
105
|
+
description: 'Customer journey integration with Ortto',
|
|
106
|
+
category: 'integration',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: 'Survey Connector',
|
|
110
|
+
package: '@xbg/utils-survey-connector',
|
|
111
|
+
description: 'Survey integration',
|
|
112
|
+
category: 'integration',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'Work Mgmt Connector',
|
|
116
|
+
package: '@xbg/utils-work-mgmt-connector',
|
|
117
|
+
description: 'Work management with Notion and Asana',
|
|
118
|
+
category: 'integration',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: 'Document Connector',
|
|
122
|
+
package: '@xbg/utils-document-connector',
|
|
123
|
+
description: 'Document processing',
|
|
124
|
+
category: 'integration',
|
|
125
|
+
},
|
|
126
|
+
// Security utilities
|
|
127
|
+
{
|
|
128
|
+
name: 'Token Handler',
|
|
129
|
+
package: '@xbg/utils-token-handler',
|
|
130
|
+
description: 'JWT generation, verification, and blacklist management',
|
|
131
|
+
category: 'security',
|
|
132
|
+
envVars: ['JWT_ISSUER', 'JWT_AUDIENCE', 'JWT_EXPIRES_IN', 'TOKEN_BLACKLIST_ENABLED'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'Hashing',
|
|
136
|
+
package: '@xbg/utils-hashing',
|
|
137
|
+
description: 'PII encryption with AES-256-GCM',
|
|
138
|
+
category: 'security',
|
|
139
|
+
envVars: ['PII_ENCRYPTION_KEY'],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Validation',
|
|
143
|
+
package: '@xbg/utils-validation',
|
|
144
|
+
description: 'Input validation with Joi and express-validator',
|
|
145
|
+
category: 'security',
|
|
146
|
+
},
|
|
147
|
+
// Infrastructure utilities
|
|
148
|
+
{
|
|
149
|
+
name: 'Timezone',
|
|
150
|
+
package: '@xbg/utils-timezone',
|
|
151
|
+
description: 'Timezone conversion helper',
|
|
152
|
+
category: 'infrastructure',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'Address Validation',
|
|
156
|
+
package: '@xbg/utils-address-validation',
|
|
157
|
+
description: 'Google Maps address validation',
|
|
158
|
+
category: 'infrastructure',
|
|
159
|
+
envVars: ['GOOGLE_MAPS_API_KEY'],
|
|
160
|
+
},
|
|
161
|
+
];
|
|
162
|
+
/**
|
|
163
|
+
* Get utilities that are always included
|
|
164
|
+
*/
|
|
165
|
+
function getRequiredUtilities() {
|
|
166
|
+
return exports.UTILITY_REGISTRY.filter((u) => u.alwaysIncluded);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get utilities available for selection
|
|
170
|
+
*/
|
|
171
|
+
function getOptionalUtilities() {
|
|
172
|
+
return exports.UTILITY_REGISTRY.filter((u) => !u.alwaysIncluded);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get utilities grouped by category
|
|
176
|
+
*/
|
|
177
|
+
function getUtilitiesByCategory() {
|
|
178
|
+
const grouped = {};
|
|
179
|
+
for (const util of exports.UTILITY_REGISTRY) {
|
|
180
|
+
if (!grouped[util.category]) {
|
|
181
|
+
grouped[util.category] = [];
|
|
182
|
+
}
|
|
183
|
+
grouped[util.category].push(util);
|
|
184
|
+
}
|
|
185
|
+
return grouped;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=utils-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-registry.js","sourceRoot":"","sources":["../src/utils-registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xbg.solutions/create-backend",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool to scaffold and sync XBG backend projects",
|
|
5
|
+
"main": "lib/cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-xbg-backend": "bin/create-backend.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"lib",
|
|
11
|
+
"bin",
|
|
12
|
+
"src/project-template"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"build:watch": "tsc --watch",
|
|
17
|
+
"clean": "rm -rf lib",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"chalk": "^4.1.2",
|
|
22
|
+
"commander": "^11.1.0",
|
|
23
|
+
"fs-extra": "^11.2.0",
|
|
24
|
+
"inquirer": "^8.2.6"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/fs-extra": "^11.0.4",
|
|
28
|
+
"@types/inquirer": "^9.0.7",
|
|
29
|
+
"@types/node": "^20.11.0",
|
|
30
|
+
"typescript": "^5.3.3"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": "22"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
}
|
|
38
|
+
}
|