@paralect/hive 0.1.49 → 0.1.50-alpha.2
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/.hive/.babelrc +3 -0
- package/.hive/.cursor/commands/add-endpoint.md +262 -0
- package/.hive/.cursor/commands/add-handler.md +137 -0
- package/.hive/.cursor/commands/add-middleware.md +95 -0
- package/.hive/.cursor/commands/add-resource.md +71 -0
- package/.hive/.cursor/commands/add-scheduler.md +138 -0
- package/.hive/.cursor/commands/add-service.md +188 -0
- package/.hive/.cursor/skills/hive-auth/SKILL.md +134 -0
- package/.hive/.cursor/skills/hive-database/SKILL.md +103 -0
- package/.hive/.cursor/skills/hive-endpoint/SKILL.md +103 -0
- package/.hive/.cursor/skills/hive-handler/SKILL.md +88 -0
- package/.hive/.cursor/skills/hive-mapping/SKILL.md +85 -0
- package/.hive/.cursor/skills/hive-middleware/SKILL.md +104 -0
- package/.hive/.cursor/skills/hive-overview/SKILL.md +50 -0
- package/.hive/.cursor/skills/hive-scheduler/SKILL.md +94 -0
- package/.hive/.cursor/skills/hive-schema/SKILL.md +73 -0
- package/.hive/.cursor/skills/hive-service/SKILL.md +90 -0
- package/.hive/.dockerignore +1 -0
- package/.hive/Dockerfile +22 -0
- package/.hive/Dockerfile.dev +33 -0
- package/.hive/Dockerfile.prod +29 -0
- package/.hive/README.md +11 -0
- package/.hive/bin/deploy.sh +5 -0
- package/.hive/bin/start.sh +2 -0
- package/.hive/bootstrap-hive.js +118 -0
- package/.hive/deploy/api/Chart.yaml +6 -0
- package/.hive/deploy/api/staging.yaml +3 -0
- package/.hive/deploy/api/templates/deployment.yaml +44 -0
- package/.hive/deploy/api/templates/ingress.yaml +26 -0
- package/.hive/deploy/api/templates/service.yaml +14 -0
- package/.hive/deploy/script/Dockerfile +39 -0
- package/.hive/deploy/script/package-lock.json +1499 -0
- package/.hive/deploy/script/package.json +12 -0
- package/.hive/deploy/script/src/config.js +48 -0
- package/.hive/deploy/script/src/index.js +108 -0
- package/.hive/deploy/script/src/util.js +19 -0
- package/.hive/initial-data.json +176 -0
- package/.hive/package-lock.json +10242 -0
- package/.hive/package.json +98 -0
- package/.hive/ship_logo.png +0 -0
- package/.hive/src/app-config/app.js +3 -0
- package/.hive/src/app-config/assertEnv.js +15 -0
- package/.hive/src/app-config/index.js +62 -0
- package/.hive/src/app.js +69 -0
- package/.hive/src/assets/emails/components/header.mjml +13 -0
- package/.hive/src/assets/emails/dist/.gitkeep +0 -0
- package/.hive/src/assets/emails/signup-welcome.mjml +34 -0
- package/.hive/src/assets/emails/styles/index.mjml +77 -0
- package/.hive/src/autoMap/addHandlers.js +142 -0
- package/.hive/src/autoMap/getDependentFields.js +37 -0
- package/.hive/src/autoMap/mapSchema.js +99 -0
- package/.hive/src/autoMap/schemaMappings.js +13 -0
- package/.hive/src/autoMap/schemaMappings.json +3 -0
- package/.hive/src/bullMqBus.js +21 -0
- package/.hive/src/bullMqWrapper.js +23 -0
- package/.hive/src/db.js +52 -0
- package/.hive/src/emails/MyEmailComponent.jsx +14 -0
- package/.hive/src/emails/compiled/MyEmailComponent.js +18 -0
- package/.hive/src/emails/compiled/compiled/MyEmailComponent.js +18 -0
- package/.hive/src/helpers/db/ifUpdated.js +22 -0
- package/.hive/src/helpers/getMiddlewares.js +38 -0
- package/.hive/src/helpers/getResourceEndpoints.js +28 -0
- package/.hive/src/helpers/getResources.js +32 -0
- package/.hive/src/helpers/getSchemas.js +50 -0
- package/.hive/src/helpers/importHandlers.js +29 -0
- package/.hive/src/helpers/isZodArray.js +13 -0
- package/.hive/src/helpers/prettierFormat.js +8 -0
- package/.hive/src/helpers/schema/db.schema.js +9 -0
- package/.hive/src/helpers/schema/pagination.schema.js +14 -0
- package/.hive/src/ioEmitter.js +9 -0
- package/.hive/src/jsconfig.json +5 -0
- package/.hive/src/lib/node-mongo/.github/workflows/npm-publish.yml +32 -0
- package/.hive/src/lib/node-mongo/API.md +654 -0
- package/.hive/src/lib/node-mongo/CHANGELOG.md +98 -0
- package/.hive/src/lib/node-mongo/README.md +97 -0
- package/.hive/src/lib/node-mongo/package-lock.json +3682 -0
- package/.hive/src/lib/node-mongo/package.json +74 -0
- package/.hive/src/lib/node-mongo/src/index.js +64 -0
- package/.hive/src/lib/node-mongo/src/mongo-query-service.js +78 -0
- package/.hive/src/lib/node-mongo/src/mongo-service-error.js +15 -0
- package/.hive/src/lib/node-mongo/src/mongo-service.js +303 -0
- package/.hive/src/logger.js +43 -0
- package/.hive/src/middlewares/allowNoAuth.js +9 -0
- package/.hive/src/middlewares/attachUser.js +41 -0
- package/.hive/src/middlewares/global/extractUserTokens.js +15 -0
- package/.hive/src/middlewares/global/tryToAttachUser.js +33 -0
- package/.hive/src/middlewares/isAuthorized.js +18 -0
- package/.hive/src/middlewares/shouldExist.js +37 -0
- package/.hive/src/middlewares/shouldNotExist.js +19 -0
- package/.hive/src/middlewares/uploadFile.js +5 -0
- package/.hive/src/middlewares/validate.js +32 -0
- package/.hive/src/migrations/migration.js +8 -0
- package/.hive/src/migrations/migration.service.js +73 -0
- package/.hive/src/migrations/migrations/1.js +22 -0
- package/.hive/src/migrations/migrations-log/migration-log.schema.js +13 -0
- package/.hive/src/migrations/migrations-log/migration-log.service.js +50 -0
- package/.hive/src/migrations/migrations.schema.js +6 -0
- package/.hive/src/migrations/migrator.js +75 -0
- package/.hive/src/migrator.js +4 -0
- package/.hive/src/resources/_dev/endpoints/triggerSchedulerHandler.js +32 -0
- package/.hive/src/resources/health/endpoints/get.js +19 -0
- package/.hive/src/resources/schemaMappings/schemaMappings.schema.js +6 -0
- package/.hive/src/resources/tokens/methods/generateSecureToken.js +9 -0
- package/.hive/src/resources/tokens/methods/setToken.js +8 -0
- package/.hive/src/resources/tokens/methods/storeToken.js +35 -0
- package/.hive/src/resources/tokens/tokens.schema.js +11 -0
- package/.hive/src/resources/users/endpoints/getCurrentUser.js +14 -0
- package/.hive/src/resources/users/endpoints/getUserProfile.js +19 -0
- package/.hive/src/resources/users/handlers/test.js +1 -0
- package/.hive/src/resources/users/methods/ensureUserCreated.js +68 -0
- package/.hive/src/resources/users/users.schema.js +16 -0
- package/.hive/src/routes/index.js +172 -0
- package/.hive/src/routes/middlewares/attachCustomErrors.js +28 -0
- package/.hive/src/routes/middlewares/routeErrorHandler.js +27 -0
- package/.hive/src/scheduler/handlers/sendDailyReport.example.js +7 -0
- package/.hive/src/scheduler.js +32 -0
- package/.hive/src/security.util.js +38 -0
- package/.hive/src/services/emailService.js +15 -0
- package/.hive/src/services/globalTest.js +0 -0
- package/.hive/src/services/setCookie.js +21 -0
- package/.hive/src/socketIo.js +99 -0
- package/.hive/tsconfig.json +31 -0
- package/cli/helpers/docker.js +59 -0
- package/cli/helpers/envCheck.js +127 -0
- package/cli/helpers/findPort.js +32 -0
- package/cli/hive.js +91 -17
- package/package.json +1 -1
- package/starter/loader.mjs +40 -0
- package/starter/package-lock.json +3512 -262
- package/starter/package.json +7 -2
- package/starter/register.mjs +6 -0
- package/starter/src/app-config/index.js +3 -0
- package/starter/src/app.js +10 -14
- package/starter/src/autoMap/addHandlers.js +3 -3
- package/starter/src/autoMap/getDependentFields.js +1 -1
- package/starter/src/autoMap/mapSchema.js +2 -2
- package/starter/src/bullMqBus.js +1 -1
- package/starter/src/bullMqWrapper.js +1 -1
- package/starter/src/db.js +12 -11
- package/starter/src/helpers/esm.js +56 -0
- package/starter/src/helpers/getMiddlewares.js +3 -0
- package/starter/src/helpers/getResourceEndpoints.js +3 -0
- package/starter/src/helpers/getResources.js +3 -0
- package/starter/src/helpers/getSchemas.js +3 -0
- package/starter/src/helpers/importHandlers.js +11 -20
- package/starter/src/ioEmitter.js +1 -1
- package/starter/src/logger.js +1 -1
- package/starter/src/middlewares/attachUser.js +2 -2
- package/starter/src/middlewares/global/tryToAttachUser.js +1 -1
- package/starter/src/middlewares/shouldExist.js +1 -1
- package/starter/src/middlewares/shouldNotExist.js +1 -1
- package/starter/src/migrations/migration.service.js +4 -1
- package/starter/src/migrations/migrations-log/migration-log.schema.js +1 -1
- package/starter/src/migrations/migrations-log/migration-log.service.js +1 -1
- package/starter/src/migrations/migrations.schema.js +1 -1
- package/starter/src/migrations/migrator.js +1 -1
- package/starter/src/migrator.js +2 -3
- package/starter/src/resources/schemaMappings/schemaMappings.schema.js +1 -1
- package/starter/src/resources/tokens/methods/setToken.js +1 -1
- package/starter/src/resources/tokens/methods/storeToken.js +2 -2
- package/starter/src/resources/tokens/tokens.schema.js +1 -1
- package/starter/src/resources/users/endpoints/getCurrentUser.js +1 -1
- package/starter/src/resources/users/endpoints/getUserProfile.js +1 -1
- package/starter/src/resources/users/methods/ensureUserCreated.js +1 -1
- package/starter/src/resources/users/users.schema.js +1 -1
- package/starter/src/routes/index.js +8 -8
- package/starter/src/routes/middlewares/routeErrorHandler.js +1 -1
- package/starter/src/scheduler.js +10 -7
- package/starter/src/services/emailService.js +1 -1
- package/starter/src/services/setCookie.js +2 -2
- package/starter/src/socketIo.js +3 -3
- package/test-app/.cursor/commands/add-endpoint.md +262 -0
- package/test-app/.cursor/commands/add-handler.md +137 -0
- package/test-app/.cursor/commands/add-middleware.md +95 -0
- package/test-app/.cursor/commands/add-resource.md +71 -0
- package/test-app/.cursor/commands/add-scheduler.md +138 -0
- package/test-app/.cursor/commands/add-service.md +188 -0
- package/test-app/.cursor/skills/hive-auth/SKILL.md +134 -0
- package/test-app/.cursor/skills/hive-database/SKILL.md +103 -0
- package/test-app/.cursor/skills/hive-endpoint/SKILL.md +103 -0
- package/test-app/.cursor/skills/hive-handler/SKILL.md +88 -0
- package/test-app/.cursor/skills/hive-mapping/SKILL.md +85 -0
- package/test-app/.cursor/skills/hive-middleware/SKILL.md +104 -0
- package/test-app/.cursor/skills/hive-overview/SKILL.md +50 -0
- package/test-app/.cursor/skills/hive-scheduler/SKILL.md +94 -0
- package/test-app/.cursor/skills/hive-schema/SKILL.md +73 -0
- package/test-app/.cursor/skills/hive-service/SKILL.md +90 -0
- package/test-app/package-lock.json +462 -0
- package/test-app/package.json +21 -0
package/cli/hive.js
CHANGED
|
@@ -7,9 +7,36 @@ const inquirer = require('inquirer');
|
|
|
7
7
|
const mergeDirs = require('./helpers/mergeDirs');
|
|
8
8
|
const execCommand = require('./helpers/execCommand');
|
|
9
9
|
const downloadDirectory = require('./helpers/downloadDirectory');
|
|
10
|
+
const { isDockerInstalled, startMongo, startRedis } = require('./helpers/docker');
|
|
11
|
+
const { ensureEnvConfig, hashCode } = require('./helpers/envCheck');
|
|
12
|
+
const { findAvailablePort } = require('./helpers/findPort');
|
|
10
13
|
const axios = require('axios');
|
|
11
|
-
const tsx = require('tsx/cjs/api');
|
|
12
14
|
const fs = require('fs');
|
|
15
|
+
const { spawn } = require('child_process');
|
|
16
|
+
|
|
17
|
+
const hivePackage = require('../package.json');
|
|
18
|
+
|
|
19
|
+
let appPackage = {
|
|
20
|
+
"name": "my-hive-app",
|
|
21
|
+
"version": "1.0.0",
|
|
22
|
+
"description": "Hive App",
|
|
23
|
+
"main": "src/app.js",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"prepare": "hive prepare ./src",
|
|
26
|
+
"dev": "hive prepare ./src && HIVE_SRC=$PWD/src npm -C .hive run dev",
|
|
27
|
+
"start": "hive prepare ./src && HIVE_SRC=$PWD/src npm -C .hive run start",
|
|
28
|
+
"deploy-local": "hive build-local && hive deploy"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [],
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "ISC",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@paralect/hive": hivePackage.version,
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"nodemon": "^3.1.4"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
13
40
|
|
|
14
41
|
program
|
|
15
42
|
.command('init [projectName]')
|
|
@@ -43,23 +70,22 @@ program
|
|
|
43
70
|
path.join(projectDir, 'package.json'),
|
|
44
71
|
JSON.stringify({
|
|
45
72
|
name,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
dev: 'hive run ./src',
|
|
49
|
-
start: 'hive run ./src'
|
|
50
|
-
},
|
|
51
|
-
dependencies: {}
|
|
73
|
+
...appPackage
|
|
74
|
+
|
|
52
75
|
}, null, 2)
|
|
53
76
|
);
|
|
54
77
|
|
|
78
|
+
const redisDb = hashCode(name) % 16;
|
|
79
|
+
const appConfigDir = path.join(projectDir, 'src', 'app-config');
|
|
80
|
+
await execCommand(`mkdir -p ${appConfigDir}`);
|
|
55
81
|
fs.writeFileSync(
|
|
56
|
-
path.join(
|
|
57
|
-
`
|
|
82
|
+
path.join(appConfigDir, '.env'),
|
|
83
|
+
`MONGODB_URI=mongodb://localhost:27027/${name}\nREDIS_URI=redis://localhost:6389/${redisDb}\nPORT=3001\nNODE_ENV=development\n`
|
|
58
84
|
);
|
|
59
85
|
|
|
60
86
|
fs.writeFileSync(
|
|
61
87
|
path.join(projectDir, '.gitignore'),
|
|
62
|
-
`node_modules\n.hive\n.env\n`
|
|
88
|
+
`node_modules\n.hive\n.env\nsrc/app-config/.env\n`
|
|
63
89
|
);
|
|
64
90
|
|
|
65
91
|
await execCommand(`cp -r ${path.resolve(__dirname, '..')}/starter/.cursor ${projectDir}/`);
|
|
@@ -76,18 +102,62 @@ program
|
|
|
76
102
|
}
|
|
77
103
|
});
|
|
78
104
|
|
|
105
|
+
program
|
|
106
|
+
.command('infra-docker')
|
|
107
|
+
.description('Start shared MongoDB and Redis containers for local development')
|
|
108
|
+
.action(async () => {
|
|
109
|
+
try {
|
|
110
|
+
if (!isDockerInstalled()) {
|
|
111
|
+
console.error('Docker is not installed or not running. Please install Docker first.');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
console.log('\nStarting Hive infrastructure...\n');
|
|
116
|
+
|
|
117
|
+
await startMongo();
|
|
118
|
+
await startRedis();
|
|
119
|
+
|
|
120
|
+
console.log('\n✅ Infrastructure ready!\n');
|
|
121
|
+
console.log('Connection URIs:');
|
|
122
|
+
console.log(' MongoDB: mongodb://localhost:27027/<your-db-name>');
|
|
123
|
+
console.log(' Redis: redis://localhost:6389/<db-number>\n');
|
|
124
|
+
console.log('These containers are shared across all Hive projects.');
|
|
125
|
+
console.log('Each project uses a unique database name for isolation.\n');
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.error('An error occurred:', error.message);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
|
|
79
131
|
program
|
|
80
132
|
.command('run [dirPath]')
|
|
81
133
|
.description('Run Hive server')
|
|
82
134
|
.action(async (dirPath = '.') => {
|
|
83
135
|
try {
|
|
84
|
-
|
|
136
|
+
const hiveSrc = path.resolve(process.cwd(), dirPath);
|
|
137
|
+
const projectDir = path.resolve(hiveSrc, '..');
|
|
138
|
+
const hiveProjectDir = path.resolve(projectDir, '.hive');
|
|
139
|
+
|
|
140
|
+
// Ensure env config exists in hive_src/app-config/.env
|
|
141
|
+
await ensureEnvConfig(hiveSrc);
|
|
142
|
+
|
|
143
|
+
// Find available port
|
|
144
|
+
const defaultPort = parseInt(process.env.PORT) || 3001;
|
|
145
|
+
const port = await findAvailablePort(defaultPort);
|
|
146
|
+
if (port !== defaultPort) {
|
|
147
|
+
console.log(` Port ${defaultPort} in use, using ${port} instead\n`);
|
|
148
|
+
}
|
|
85
149
|
|
|
86
|
-
const hiveProjectDir = path.resolve(process.env.HIVE_SRC, `../.hive`);
|
|
87
150
|
await execCommand(`mkdir -p ${hiveProjectDir}`);
|
|
88
|
-
await execCommand(`
|
|
151
|
+
await execCommand(`rsync -a --exclude node_modules ${path.resolve(__dirname, '..')}/starter/ ${hiveProjectDir}/`);
|
|
152
|
+
|
|
153
|
+
const child = spawn('npx', ['tsx', '--watch', '--import', './register.mjs', 'src/app.js'], {
|
|
154
|
+
cwd: hiveProjectDir,
|
|
155
|
+
stdio: 'inherit',
|
|
156
|
+
env: { ...process.env, HIVE_SRC: hiveSrc, PORT: String(port) }
|
|
157
|
+
});
|
|
89
158
|
|
|
90
|
-
|
|
159
|
+
child.on('error', (err) => console.error('Failed to start:', err.message));
|
|
160
|
+
child.on('close', (code) => process.exit(code));
|
|
91
161
|
} catch (error) {
|
|
92
162
|
console.error('An error occurred:', error.message);
|
|
93
163
|
}
|
|
@@ -98,11 +168,15 @@ program
|
|
|
98
168
|
.description('Prepare Hive server')
|
|
99
169
|
.action(async (dirPath = '.') => {
|
|
100
170
|
try {
|
|
101
|
-
|
|
102
|
-
const
|
|
171
|
+
const hiveSrc = path.resolve(process.cwd(), dirPath);
|
|
172
|
+
const projectDir = path.resolve(hiveSrc, '..');
|
|
173
|
+
const hiveProjectDir = path.resolve(projectDir, '.hive');
|
|
174
|
+
|
|
175
|
+
// Ensure env config exists in hive_src/app-config/.env
|
|
176
|
+
await ensureEnvConfig(hiveSrc);
|
|
103
177
|
|
|
104
178
|
await execCommand(`mkdir -p ${hiveProjectDir}`);
|
|
105
|
-
await execCommand(`
|
|
179
|
+
await execCommand(`rsync -a --exclude node_modules ${path.resolve(__dirname, '..')}/starter/ ${hiveProjectDir}/`);
|
|
106
180
|
} catch (error) {
|
|
107
181
|
console.error('An error occurred:', error.message);
|
|
108
182
|
}
|
package/package.json
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { resolve as resolvePath } from 'path';
|
|
2
|
+
import { pathToFileURL } from 'url';
|
|
3
|
+
import { existsSync, statSync } from 'fs';
|
|
4
|
+
|
|
5
|
+
function resolveFilePath(basePath) {
|
|
6
|
+
// If path exists as-is and is a file, use it
|
|
7
|
+
if (existsSync(basePath) && statSync(basePath).isFile()) {
|
|
8
|
+
return basePath;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// If path is a directory, try index.js
|
|
12
|
+
if (existsSync(basePath) && statSync(basePath).isDirectory()) {
|
|
13
|
+
const indexPath = resolvePath(basePath, 'index.js');
|
|
14
|
+
if (existsSync(indexPath)) {
|
|
15
|
+
return indexPath;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Try adding .js extension
|
|
20
|
+
const withJs = basePath + '.js';
|
|
21
|
+
if (existsSync(withJs)) {
|
|
22
|
+
return withJs;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Fallback to original path (will error if not found)
|
|
26
|
+
return basePath;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function resolve(specifier, context, nextResolve) {
|
|
30
|
+
// #root/... → HIVE_SRC/... (user code)
|
|
31
|
+
// Note: #hive/... is handled by package.json imports field
|
|
32
|
+
if (specifier.startsWith('#root/')) {
|
|
33
|
+
const relativePath = specifier.slice(6); // remove '#root/'
|
|
34
|
+
const basePath = resolvePath(process.env.HIVE_SRC, relativePath);
|
|
35
|
+
const absolutePath = resolveFilePath(basePath);
|
|
36
|
+
return { url: pathToFileURL(absolutePath).href, shortCircuit: true };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return nextResolve(specifier, context);
|
|
40
|
+
}
|