grafeo-ogm 1.8.7 → 1.9.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/CHANGELOG.md +57 -0
- package/README.md +131 -26
- package/dist/cjs/cli/commands/db-push.d.ts +3 -0
- package/dist/cjs/cli/commands/db-push.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-push.js +197 -0
- package/dist/cjs/cli/commands/db-push.js.map +1 -0
- package/dist/cjs/cli/commands/db-seed.d.ts +3 -0
- package/dist/cjs/cli/commands/db-seed.d.ts.map +1 -0
- package/dist/cjs/cli/commands/db-seed.js +153 -0
- package/dist/cjs/cli/commands/db-seed.js.map +1 -0
- package/dist/cjs/cli/commands/generate.d.ts +3 -0
- package/dist/cjs/cli/commands/generate.d.ts.map +1 -0
- package/dist/cjs/cli/commands/generate.js +218 -0
- package/dist/cjs/cli/commands/generate.js.map +1 -0
- package/dist/cjs/cli/config.d.ts +38 -0
- package/dist/cjs/cli/config.d.ts.map +1 -0
- package/dist/cjs/cli/config.js +173 -0
- package/dist/cjs/cli/config.js.map +1 -0
- package/dist/cjs/cli/driver.d.ts +12 -0
- package/dist/cjs/cli/driver.d.ts.map +1 -0
- package/dist/cjs/cli/driver.js +21 -0
- package/dist/cjs/cli/driver.js.map +1 -0
- package/dist/cjs/cli/errors.d.ts +16 -0
- package/dist/cjs/cli/errors.d.ts.map +1 -0
- package/dist/cjs/cli/errors.js +66 -0
- package/dist/cjs/cli/errors.js.map +1 -0
- package/dist/cjs/cli/index.d.ts +8 -0
- package/dist/cjs/cli/index.d.ts.map +1 -0
- package/dist/cjs/cli/index.js +187 -0
- package/dist/cjs/cli/index.js.map +1 -0
- package/dist/cjs/cli/introspect.d.ts +8 -0
- package/dist/cjs/cli/introspect.d.ts.map +1 -0
- package/dist/cjs/cli/introspect.js +52 -0
- package/dist/cjs/cli/introspect.js.map +1 -0
- package/dist/cjs/cli/push-planner.d.ts +52 -0
- package/dist/cjs/cli/push-planner.d.ts.map +1 -0
- package/dist/cjs/cli/push-planner.js +114 -0
- package/dist/cjs/cli/push-planner.js.map +1 -0
- package/dist/cjs/cli/types.d.ts +71 -0
- package/dist/cjs/cli/types.d.ts.map +1 -0
- package/dist/cjs/cli/types.js +8 -0
- package/dist/cjs/cli/types.js.map +1 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +6 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/ogm.d.ts +0 -3
- package/dist/cjs/ogm.d.ts.map +1 -1
- package/dist/cjs/ogm.js +13 -50
- package/dist/cjs/ogm.js.map +1 -1
- package/dist/cjs/schema/index-statements.d.ts +50 -0
- package/dist/cjs/schema/index-statements.d.ts.map +1 -0
- package/dist/cjs/schema/index-statements.js +117 -0
- package/dist/cjs/schema/index-statements.js.map +1 -0
- package/dist/esm/cli/commands/db-push.d.ts +3 -0
- package/dist/esm/cli/commands/db-push.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-push.js +161 -0
- package/dist/esm/cli/commands/db-push.js.map +1 -0
- package/dist/esm/cli/commands/db-seed.d.ts +3 -0
- package/dist/esm/cli/commands/db-seed.d.ts.map +1 -0
- package/dist/esm/cli/commands/db-seed.js +117 -0
- package/dist/esm/cli/commands/db-seed.js.map +1 -0
- package/dist/esm/cli/commands/generate.d.ts +3 -0
- package/dist/esm/cli/commands/generate.d.ts.map +1 -0
- package/dist/esm/cli/commands/generate.js +182 -0
- package/dist/esm/cli/commands/generate.js.map +1 -0
- package/dist/esm/cli/config.d.ts +38 -0
- package/dist/esm/cli/config.d.ts.map +1 -0
- package/dist/esm/cli/config.js +134 -0
- package/dist/esm/cli/config.js.map +1 -0
- package/dist/esm/cli/driver.d.ts +12 -0
- package/dist/esm/cli/driver.d.ts.map +1 -0
- package/dist/esm/cli/driver.js +15 -0
- package/dist/esm/cli/driver.js.map +1 -0
- package/dist/esm/cli/errors.d.ts +16 -0
- package/dist/esm/cli/errors.d.ts.map +1 -0
- package/dist/esm/cli/errors.js +61 -0
- package/dist/esm/cli/errors.js.map +1 -0
- package/dist/esm/cli/index.d.ts +8 -0
- package/dist/esm/cli/index.d.ts.map +1 -0
- package/dist/esm/cli/index.js +151 -0
- package/dist/esm/cli/index.js.map +1 -0
- package/dist/esm/cli/introspect.d.ts +8 -0
- package/dist/esm/cli/introspect.d.ts.map +1 -0
- package/dist/esm/cli/introspect.js +49 -0
- package/dist/esm/cli/introspect.js.map +1 -0
- package/dist/esm/cli/push-planner.d.ts +52 -0
- package/dist/esm/cli/push-planner.d.ts.map +1 -0
- package/dist/esm/cli/push-planner.js +111 -0
- package/dist/esm/cli/push-planner.js.map +1 -0
- package/dist/esm/cli/types.d.ts +71 -0
- package/dist/esm/cli/types.d.ts.map +1 -0
- package/dist/esm/cli/types.js +5 -0
- package/dist/esm/cli/types.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ogm.d.ts +0 -3
- package/dist/esm/ogm.d.ts.map +1 -1
- package/dist/esm/ogm.js +13 -50
- package/dist/esm/ogm.js.map +1 -1
- package/dist/esm/schema/index-statements.d.ts +50 -0
- package/dist/esm/schema/index-statements.d.ts.map +1 -0
- package/dist/esm/schema/index-statements.js +109 -0
- package/dist/esm/schema/index-statements.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runDbSeed = runDbSeed;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
const node_util_1 = require("node:util");
|
|
40
|
+
const ogm_1 = require("../../ogm");
|
|
41
|
+
const config_1 = require("../config");
|
|
42
|
+
const driver_1 = require("../driver");
|
|
43
|
+
const errors_1 = require("../errors");
|
|
44
|
+
/** Idempotent-by-upsert example embedded in the no-seed-found message. */
|
|
45
|
+
const SEED_EXAMPLE = `// seed.ts
|
|
46
|
+
import type { OGM } from 'grafeo-ogm';
|
|
47
|
+
|
|
48
|
+
export default async function seed(ogm: OGM) {
|
|
49
|
+
const Book = ogm.model('Book');
|
|
50
|
+
// upsert (not create) so repeated seeds converge instead of duplicating.
|
|
51
|
+
await Book.upsert({
|
|
52
|
+
where: { id: '1' },
|
|
53
|
+
create: { id: '1', title: 'Dune' },
|
|
54
|
+
update: { title: 'Dune' },
|
|
55
|
+
});
|
|
56
|
+
}`;
|
|
57
|
+
function parseDbSeedFlags(argv) {
|
|
58
|
+
try {
|
|
59
|
+
const { values } = (0, node_util_1.parseArgs)({
|
|
60
|
+
args: argv,
|
|
61
|
+
options: {
|
|
62
|
+
schema: { type: 'string' },
|
|
63
|
+
uri: { type: 'string' },
|
|
64
|
+
username: { type: 'string' },
|
|
65
|
+
database: { type: 'string' },
|
|
66
|
+
debug: { type: 'boolean' },
|
|
67
|
+
},
|
|
68
|
+
strict: true,
|
|
69
|
+
allowPositionals: false,
|
|
70
|
+
});
|
|
71
|
+
return values;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
throw new errors_1.CliError(`db seed: ${message}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Resolve the seed entry point (cli-db-seed spec). Precedence: config `seed`
|
|
80
|
+
* → `./seed.ts` → `./seed.js`. A config-declared path that is missing is a
|
|
81
|
+
* pointed "not found" error; the zero-config miss instead shows the expected
|
|
82
|
+
* locations plus an upsert-based example.
|
|
83
|
+
*/
|
|
84
|
+
function resolveSeedPath(config, cwd) {
|
|
85
|
+
if (config.seed) {
|
|
86
|
+
const resolved = path.resolve(cwd, config.seed);
|
|
87
|
+
if (!fs.existsSync(resolved))
|
|
88
|
+
throw new errors_1.CliError(`Seed file not found: ${resolved}`);
|
|
89
|
+
return resolved;
|
|
90
|
+
}
|
|
91
|
+
for (const name of ['seed.ts', 'seed.js']) {
|
|
92
|
+
const candidate = path.join(cwd, name);
|
|
93
|
+
if (fs.existsSync(candidate))
|
|
94
|
+
return candidate;
|
|
95
|
+
}
|
|
96
|
+
throw new errors_1.CliError(`No seed script found. Looked for:\n` +
|
|
97
|
+
` - "seed" in grafeo.config.ts\n` +
|
|
98
|
+
` - ${path.join(cwd, 'seed.ts')}\n` +
|
|
99
|
+
` - ${path.join(cwd, 'seed.js')}\n\n` +
|
|
100
|
+
`Create one (upsert keeps repeated runs idempotent):\n\n${SEED_EXAMPLE}`);
|
|
101
|
+
}
|
|
102
|
+
/** Load the seed module through jiti and pull out its default function. */
|
|
103
|
+
async function loadSeedFn(seedPath) {
|
|
104
|
+
const { createJiti } = await Promise.resolve().then(() => __importStar(require('jiti')));
|
|
105
|
+
const jiti = createJiti(__filename);
|
|
106
|
+
let loaded;
|
|
107
|
+
try {
|
|
108
|
+
loaded = await jiti.import(seedPath);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
112
|
+
throw new errors_1.CliError(`Failed to load seed ${path.basename(seedPath)}: ${message}`);
|
|
113
|
+
}
|
|
114
|
+
const fn = loaded && typeof loaded === 'object' && 'default' in loaded
|
|
115
|
+
? loaded.default
|
|
116
|
+
: loaded;
|
|
117
|
+
if (typeof fn !== 'function')
|
|
118
|
+
throw new errors_1.CliError(`Seed ${path.basename(seedPath)} must export a default async function ` +
|
|
119
|
+
`\`(ogm) => void\`.\n\n${SEED_EXAMPLE}`);
|
|
120
|
+
return fn;
|
|
121
|
+
}
|
|
122
|
+
async function runDbSeed(argv, io) {
|
|
123
|
+
const flags = parseDbSeedFlags(argv);
|
|
124
|
+
const { config } = await (0, config_1.loadConfigFile)(io.cwd);
|
|
125
|
+
const schemaPath = (0, config_1.resolveSchemaPath)(flags, config, io.cwd);
|
|
126
|
+
const typeDefs = fs.readFileSync(schemaPath, 'utf-8');
|
|
127
|
+
const connection = (0, config_1.resolveConnection)(flags, config, io.env);
|
|
128
|
+
// Resolve and load the seed BEFORE opening a connection, so a missing or
|
|
129
|
+
// broken seed fails without ever creating a driver.
|
|
130
|
+
const seedPath = resolveSeedPath(config, io.cwd);
|
|
131
|
+
const seed = await loadSeedFn(seedPath);
|
|
132
|
+
const driver = (0, driver_1.createDriver)(io, connection);
|
|
133
|
+
try {
|
|
134
|
+
// The OGM constructor parses the SDL synchronously and throws on an
|
|
135
|
+
// invalid schema — it lives inside this try so the driver created above
|
|
136
|
+
// is still closed in that case (cli-db-seed spec: close on any failure).
|
|
137
|
+
const ogm = new ogm_1.OGM({ typeDefs, driver });
|
|
138
|
+
await ogm.init();
|
|
139
|
+
io.out(`running seed ${seedPath}`);
|
|
140
|
+
try {
|
|
141
|
+
await seed(ogm);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
ogm.close();
|
|
145
|
+
}
|
|
146
|
+
io.out('✓ seed complete');
|
|
147
|
+
return 0;
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
await driver.close();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=db-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-seed.js","sourceRoot":"","sources":["../../../../src/cli/commands/db-seed.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHA,8BA+BC;AAlJD,4CAA8B;AAC9B,gDAAkC;AAClC,yCAAsC;AACtC,mCAAgC;AAChC,sCAImB;AACnB,sCAAyC;AACzC,sCAAqC;AAarC,0EAA0E;AAC1E,MAAM,YAAY,GAAG;;;;;;;;;;;EAWnB,CAAC;AAEH,SAAS,gBAAgB,CAAC,IAAc;IACtC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,qBAAS,EAAC;YAC3B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE;gBACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;aAC3B;YACD,MAAM,EAAE,IAAI;YACZ,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;QACH,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,iBAAQ,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,MAAoB,EAAE,GAAW;IACxD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1B,MAAM,IAAI,iBAAQ,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,iBAAQ,CAChB,qCAAqC;QACnC,kCAAkC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM;QACtC,0DAA0D,YAAY,EAAE,CAC3E,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEpC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,iBAAQ,CAChB,uBAAuB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GACN,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM;QACzD,CAAC,CAAE,MAA+B,CAAC,OAAO;QAC1C,CAAC,CAAC,MAAM,CAAC;IAEb,IAAI,OAAO,EAAE,KAAK,UAAU;QAC1B,MAAM,IAAI,iBAAQ,CAChB,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,wCAAwC;YACrE,yBAAyB,YAAY,EAAE,CAC1C,CAAC;IAEJ,OAAO,EAAY,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,EAAS;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAA,uBAAc,EAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAA,0BAAiB,EAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAE5D,yEAAyE;IACzE,oDAAoD;IACpD,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAExC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,oEAAoE;QACpE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEjB,EAAE,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,UAAU,CAAC;AAqLpD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAoC5E"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.runGenerate = runGenerate;
|
|
37
|
+
const fs = __importStar(require("node:fs"));
|
|
38
|
+
const os = __importStar(require("node:os"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const node_util_1 = require("node:util");
|
|
41
|
+
const generate_types_1 = require("../../generator/generate-types");
|
|
42
|
+
const config_1 = require("../config");
|
|
43
|
+
const errors_1 = require("../errors");
|
|
44
|
+
/** Local HH:MM:SS stamp prefixed to watch-mode lines (cli-generate spec). */
|
|
45
|
+
function timeNow() {
|
|
46
|
+
return new Date().toTimeString().slice(0, 8);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run the generator, naming the schema file in schema-related failures
|
|
50
|
+
* (cli-config error convention: "stderr names the schema file"). The error
|
|
51
|
+
* class is preserved so renderError still tags it (`SchemaParseError: …`) and
|
|
52
|
+
* `--debug` keeps a usable stack. Output-path errors are left untouched —
|
|
53
|
+
* naming the schema file there would mislead.
|
|
54
|
+
*/
|
|
55
|
+
async function runGenerator(typeDefs, outFile, config, schemaPath) {
|
|
56
|
+
try {
|
|
57
|
+
return await (0, generate_types_1.generateTypes)({ typeDefs, outFile, config: config.generate });
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
if (error instanceof generate_types_1.SchemaParseError)
|
|
61
|
+
throw new generate_types_1.SchemaParseError(`${schemaPath}: ${error.message}`);
|
|
62
|
+
if (error instanceof generate_types_1.EmptySchemaError)
|
|
63
|
+
throw new generate_types_1.EmptySchemaError(`${schemaPath}: ${error.message}`);
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function parseGenerateFlags(argv) {
|
|
68
|
+
try {
|
|
69
|
+
const { values } = (0, node_util_1.parseArgs)({
|
|
70
|
+
args: argv,
|
|
71
|
+
options: {
|
|
72
|
+
schema: { type: 'string' },
|
|
73
|
+
out: { type: 'string' },
|
|
74
|
+
watch: { type: 'boolean' },
|
|
75
|
+
verify: { type: 'boolean' },
|
|
76
|
+
poll: { type: 'string' },
|
|
77
|
+
debug: { type: 'boolean' },
|
|
78
|
+
},
|
|
79
|
+
strict: true,
|
|
80
|
+
allowPositionals: false,
|
|
81
|
+
});
|
|
82
|
+
return values;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
86
|
+
throw new errors_1.CliError(`generate: ${message}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function generateOnce(schemaPath, outPath, config, io, opts) {
|
|
90
|
+
const typeDefs = fs.readFileSync(schemaPath, 'utf-8');
|
|
91
|
+
const result = await runGenerator(typeDefs, outPath, config, schemaPath);
|
|
92
|
+
for (const warning of result.warnings)
|
|
93
|
+
io.err(`warning: ${warning.message}`);
|
|
94
|
+
const stamp = opts?.timestamped ? `[${timeNow()}] ` : '';
|
|
95
|
+
io.out(`${stamp}✓ generated ${result.outputPath} (${result.typeCount} types, ` +
|
|
96
|
+
`${(result.fileSize / 1024).toFixed(1)} kB, ${result.durationMs} ms)`);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* `--verify` (cli-generate spec): generate through the EXACT same
|
|
100
|
+
* `generateTypes()` pipeline (including its Prettier step) into a temp
|
|
101
|
+
* file, byte-compare against the configured output, and never write to
|
|
102
|
+
* it. Reusing the real pipeline is what makes verify-vs-generate drift
|
|
103
|
+
* structurally impossible.
|
|
104
|
+
*/
|
|
105
|
+
async function verifyOnce(schemaPath, outPath, config, io) {
|
|
106
|
+
const staleMessage = `Generated types are out of date. Run \`grafeo generate\`.`;
|
|
107
|
+
if (!fs.existsSync(outPath)) {
|
|
108
|
+
io.err(`error: output file does not exist: ${outPath}`);
|
|
109
|
+
io.err(staleMessage);
|
|
110
|
+
return 1;
|
|
111
|
+
}
|
|
112
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'grafeo-verify-'));
|
|
113
|
+
const tmpOut = path.join(tmpDir, path.basename(outPath));
|
|
114
|
+
try {
|
|
115
|
+
const typeDefs = fs.readFileSync(schemaPath, 'utf-8');
|
|
116
|
+
await runGenerator(typeDefs, tmpOut, config, schemaPath);
|
|
117
|
+
const expected = fs.readFileSync(tmpOut, 'utf-8');
|
|
118
|
+
const actual = fs.readFileSync(outPath, 'utf-8');
|
|
119
|
+
if (expected === actual) {
|
|
120
|
+
io.out(`✓ ${outPath} is up to date`);
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
io.err(`error: ${outPath} is stale (schema changed since generation)`);
|
|
124
|
+
io.err(staleMessage);
|
|
125
|
+
return 1;
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* `--watch` (cli-generate spec): debounced re-generation on schema change.
|
|
133
|
+
* A failed regeneration prints the error and KEEPS WATCHING. `--poll <ms>`
|
|
134
|
+
* swaps fs.watch for fs.watchFile polling (documented fallback for
|
|
135
|
+
* platforms/editors where fs.watch misfires).
|
|
136
|
+
*/
|
|
137
|
+
async function watchLoop(schemaPath, outPath, config, io, pollMs) {
|
|
138
|
+
const DEBOUNCE_MS = 100;
|
|
139
|
+
let timer;
|
|
140
|
+
const regenerate = async () => {
|
|
141
|
+
try {
|
|
142
|
+
await generateOnce(schemaPath, outPath, config, io, {
|
|
143
|
+
timestamped: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
148
|
+
io.err(`watch: generation failed — ${message}`);
|
|
149
|
+
io.err('watch: still watching; fix the schema and save again');
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const onChange = () => {
|
|
153
|
+
if (timer)
|
|
154
|
+
clearTimeout(timer);
|
|
155
|
+
timer = setTimeout(() => void regenerate(), DEBOUNCE_MS);
|
|
156
|
+
timer.unref?.();
|
|
157
|
+
};
|
|
158
|
+
let close;
|
|
159
|
+
if (pollMs !== undefined) {
|
|
160
|
+
fs.watchFile(schemaPath, { interval: pollMs }, onChange);
|
|
161
|
+
close = () => fs.unwatchFile(schemaPath, onChange);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const watcher = fs.watch(schemaPath, onChange);
|
|
165
|
+
close = () => watcher.close();
|
|
166
|
+
}
|
|
167
|
+
io.out(`watching ${schemaPath} — Ctrl-C to stop`);
|
|
168
|
+
return new Promise((resolve) => {
|
|
169
|
+
const finish = () => {
|
|
170
|
+
if (timer)
|
|
171
|
+
clearTimeout(timer);
|
|
172
|
+
close();
|
|
173
|
+
resolve(0);
|
|
174
|
+
};
|
|
175
|
+
if (io.signal) {
|
|
176
|
+
if (io.signal.aborted)
|
|
177
|
+
return finish();
|
|
178
|
+
io.signal.addEventListener('abort', finish, { once: true });
|
|
179
|
+
}
|
|
180
|
+
// Without a signal (the real bin), the promise intentionally never
|
|
181
|
+
// resolves — the process runs until killed.
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async function runGenerate(argv, io) {
|
|
185
|
+
const flags = parseGenerateFlags(argv);
|
|
186
|
+
if (flags.watch && flags.verify)
|
|
187
|
+
throw new errors_1.CliError('generate: --watch and --verify are mutually exclusive');
|
|
188
|
+
const { config } = await (0, config_1.loadConfigFile)(io.cwd);
|
|
189
|
+
const schemaPath = (0, config_1.resolveSchemaPath)(flags, config, io.cwd);
|
|
190
|
+
const outPath = (0, config_1.resolveOutPath)(flags, config, io.cwd);
|
|
191
|
+
if (flags.verify)
|
|
192
|
+
return verifyOnce(schemaPath, outPath, config, io);
|
|
193
|
+
let pollMs;
|
|
194
|
+
if (flags.poll !== undefined) {
|
|
195
|
+
pollMs = Math.trunc(Number(flags.poll));
|
|
196
|
+
if (!Number.isFinite(pollMs) || pollMs <= 0)
|
|
197
|
+
throw new errors_1.CliError('generate: --poll must be a positive integer (ms)');
|
|
198
|
+
}
|
|
199
|
+
if (pollMs !== undefined && !flags.watch)
|
|
200
|
+
throw new errors_1.CliError('generate: --poll only applies with --watch');
|
|
201
|
+
// Initial generation always runs (and in watch mode a broken schema at
|
|
202
|
+
// startup is reported but does not prevent watching).
|
|
203
|
+
if (flags.watch) {
|
|
204
|
+
try {
|
|
205
|
+
await generateOnce(schemaPath, outPath, config, io, {
|
|
206
|
+
timestamped: true,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
211
|
+
io.err(`watch: initial generation failed — ${message}`);
|
|
212
|
+
}
|
|
213
|
+
return watchLoop(schemaPath, outPath, config, io, pollMs);
|
|
214
|
+
}
|
|
215
|
+
await generateOnce(schemaPath, outPath, config, io);
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GrafeoConfig, ResolvedConnection } from './types';
|
|
2
|
+
export interface LoadedConfig {
|
|
3
|
+
config: GrafeoConfig;
|
|
4
|
+
/** Absolute path of the file that was loaded, if any. */
|
|
5
|
+
filePath?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Discover and load grafeo.config.{ts,js,json} from `cwd`. TS/JS configs
|
|
9
|
+
* load through jiti (the CLI's single runtime dependency) so users get
|
|
10
|
+
* `grafeo.config.ts` without pre-compiling — the same DX as Prisma/Drizzle.
|
|
11
|
+
* Returns an empty config when no file exists; commands fall back to flags
|
|
12
|
+
* and defaults.
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadConfigFile(cwd: string): Promise<LoadedConfig>;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the SDL schema path. Precedence: flag > config > ./schema.graphql
|
|
17
|
+
* (zero-config default, only when the file actually exists). A flag/config
|
|
18
|
+
* path that doesn't exist is an error naming the resolved path; nothing at
|
|
19
|
+
* all is an error showing a minimal config example (cli-config spec).
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveSchemaPath(flags: {
|
|
22
|
+
schema?: string;
|
|
23
|
+
}, config: GrafeoConfig, cwd: string): string;
|
|
24
|
+
/** Resolve the codegen output path. Precedence: flag > config > default. */
|
|
25
|
+
export declare function resolveOutPath(flags: {
|
|
26
|
+
out?: string;
|
|
27
|
+
}, config: GrafeoConfig, cwd: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Resolve the Neo4j connection per the cli-config spec. Precedence per
|
|
30
|
+
* setting: flag > config `database` block > NEO4J_* env var. The password
|
|
31
|
+
* has NO flag path by design.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveConnection(flags: {
|
|
34
|
+
uri?: string;
|
|
35
|
+
username?: string;
|
|
36
|
+
database?: string;
|
|
37
|
+
}, config: GrafeoConfig, env: NodeJS.ProcessEnv): ResolvedConnection;
|
|
38
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAiBhE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA+BvE;AAsCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1B,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,CAgBR;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EACvB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,GACV,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7D,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,kBAAkB,CA8BpB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadConfigFile = loadConfigFile;
|
|
37
|
+
exports.resolveSchemaPath = resolveSchemaPath;
|
|
38
|
+
exports.resolveOutPath = resolveOutPath;
|
|
39
|
+
exports.resolveConnection = resolveConnection;
|
|
40
|
+
const fs = __importStar(require("node:fs"));
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const errors_1 = require("./errors");
|
|
43
|
+
/** Discovery order — first match in the working directory wins. */
|
|
44
|
+
const CONFIG_FILENAMES = [
|
|
45
|
+
'grafeo.config.ts',
|
|
46
|
+
'grafeo.config.js',
|
|
47
|
+
'grafeo.config.json',
|
|
48
|
+
];
|
|
49
|
+
const CONFIG_EXAMPLE = `// grafeo.config.ts
|
|
50
|
+
import { defineConfig } from 'grafeo-ogm';
|
|
51
|
+
|
|
52
|
+
export default defineConfig({
|
|
53
|
+
schema: './schema.graphql',
|
|
54
|
+
out: './src/grafeo.generated.ts',
|
|
55
|
+
});`;
|
|
56
|
+
/**
|
|
57
|
+
* Discover and load grafeo.config.{ts,js,json} from `cwd`. TS/JS configs
|
|
58
|
+
* load through jiti (the CLI's single runtime dependency) so users get
|
|
59
|
+
* `grafeo.config.ts` without pre-compiling — the same DX as Prisma/Drizzle.
|
|
60
|
+
* Returns an empty config when no file exists; commands fall back to flags
|
|
61
|
+
* and defaults.
|
|
62
|
+
*/
|
|
63
|
+
async function loadConfigFile(cwd) {
|
|
64
|
+
for (const name of CONFIG_FILENAMES) {
|
|
65
|
+
const filePath = path.join(cwd, name);
|
|
66
|
+
if (!fs.existsSync(filePath))
|
|
67
|
+
continue;
|
|
68
|
+
if (name.endsWith('.json'))
|
|
69
|
+
try {
|
|
70
|
+
const parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
71
|
+
return { config: parsed, filePath };
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
75
|
+
throw new errors_1.CliError(`Failed to parse ${name}: ${message}`);
|
|
76
|
+
}
|
|
77
|
+
const { createJiti } = await Promise.resolve().then(() => __importStar(require('jiti')));
|
|
78
|
+
const jiti = createJiti(__filename);
|
|
79
|
+
let loaded;
|
|
80
|
+
try {
|
|
81
|
+
loaded = await jiti.import(filePath);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
85
|
+
throw new errors_1.CliError(`Failed to load ${name}: ${message}`);
|
|
86
|
+
}
|
|
87
|
+
const config = extractConfigExport(loaded, name);
|
|
88
|
+
return { config, filePath };
|
|
89
|
+
}
|
|
90
|
+
return { config: {} };
|
|
91
|
+
}
|
|
92
|
+
/** Keys a config object may legitimately carry. */
|
|
93
|
+
const KNOWN_CONFIG_KEYS = new Set([
|
|
94
|
+
'schema',
|
|
95
|
+
'out',
|
|
96
|
+
'generate',
|
|
97
|
+
'database',
|
|
98
|
+
'seed',
|
|
99
|
+
'vectorIndexes',
|
|
100
|
+
]);
|
|
101
|
+
/**
|
|
102
|
+
* Pull the config object out of a jiti-loaded module. `export default {…}`
|
|
103
|
+
* arrives under `default`; CJS `module.exports = {…}` arrives as the
|
|
104
|
+
* namespace itself — accepted only when every key is a known config key,
|
|
105
|
+
* so a module that merely forgot its default export fails loudly instead
|
|
106
|
+
* of being silently treated as an (empty-ish) config.
|
|
107
|
+
*/
|
|
108
|
+
function extractConfigExport(loaded, name) {
|
|
109
|
+
const invalid = () => new errors_1.CliError(`${name} must export a configuration object as its default export.\n\n${CONFIG_EXAMPLE}`);
|
|
110
|
+
if (!loaded || typeof loaded !== 'object')
|
|
111
|
+
throw invalid();
|
|
112
|
+
if ('default' in loaded) {
|
|
113
|
+
const dflt = loaded.default;
|
|
114
|
+
if (!dflt || typeof dflt !== 'object')
|
|
115
|
+
throw invalid();
|
|
116
|
+
return dflt;
|
|
117
|
+
}
|
|
118
|
+
const keys = Object.keys(loaded);
|
|
119
|
+
if (keys.some((k) => !KNOWN_CONFIG_KEYS.has(k)))
|
|
120
|
+
throw invalid();
|
|
121
|
+
return loaded;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve the SDL schema path. Precedence: flag > config > ./schema.graphql
|
|
125
|
+
* (zero-config default, only when the file actually exists). A flag/config
|
|
126
|
+
* path that doesn't exist is an error naming the resolved path; nothing at
|
|
127
|
+
* all is an error showing a minimal config example (cli-config spec).
|
|
128
|
+
*/
|
|
129
|
+
function resolveSchemaPath(flags, config, cwd) {
|
|
130
|
+
const declared = flags.schema ?? config.schema;
|
|
131
|
+
if (declared) {
|
|
132
|
+
const resolved = path.resolve(cwd, declared);
|
|
133
|
+
if (!fs.existsSync(resolved))
|
|
134
|
+
throw new errors_1.CliError(`Schema file not found: ${resolved}`);
|
|
135
|
+
return resolved;
|
|
136
|
+
}
|
|
137
|
+
const fallback = path.resolve(cwd, 'schema.graphql');
|
|
138
|
+
if (fs.existsSync(fallback))
|
|
139
|
+
return fallback;
|
|
140
|
+
throw new errors_1.CliError(`No schema found. Pass --schema <path>, set "schema" in grafeo.config.ts, ` +
|
|
141
|
+
`or create ./schema.graphql.\n\n${CONFIG_EXAMPLE}`);
|
|
142
|
+
}
|
|
143
|
+
/** Resolve the codegen output path. Precedence: flag > config > default. */
|
|
144
|
+
function resolveOutPath(flags, config, cwd) {
|
|
145
|
+
return path.resolve(cwd, flags.out ?? config.out ?? 'grafeo.generated.ts');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Resolve the Neo4j connection per the cli-config spec. Precedence per
|
|
149
|
+
* setting: flag > config `database` block > NEO4J_* env var. The password
|
|
150
|
+
* has NO flag path by design.
|
|
151
|
+
*/
|
|
152
|
+
function resolveConnection(flags, config, env) {
|
|
153
|
+
const uri = flags.uri ?? config.database?.uri ?? env.NEO4J_URI;
|
|
154
|
+
const username = flags.username ?? config.database?.username ?? env.NEO4J_USERNAME;
|
|
155
|
+
const password = config.database?.password ?? env.NEO4J_PASSWORD;
|
|
156
|
+
const database = flags.database ?? config.database?.database ?? env.NEO4J_DATABASE;
|
|
157
|
+
const missing = [];
|
|
158
|
+
if (!uri)
|
|
159
|
+
missing.push('uri — pass --uri, set database.uri, or NEO4J_URI');
|
|
160
|
+
if (!username)
|
|
161
|
+
missing.push('username — pass --username, set database.username, or NEO4J_USERNAME');
|
|
162
|
+
if (!password)
|
|
163
|
+
missing.push('password — set database.password or NEO4J_PASSWORD (never a flag)');
|
|
164
|
+
if (missing.length > 0)
|
|
165
|
+
throw new errors_1.CliError(`Missing database connection settings:\n - ${missing.join('\n - ')}`);
|
|
166
|
+
return {
|
|
167
|
+
uri: uri,
|
|
168
|
+
username: username,
|
|
169
|
+
password: password,
|
|
170
|
+
database,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Driver } from 'neo4j-driver';
|
|
2
|
+
import type { CliIO, ResolvedConnection } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Obtain the driver for a db command. Production goes straight to
|
|
5
|
+
* `neo4j-driver`; tests inject a mock through `io.driverFactory` so no
|
|
6
|
+
* command ever touches a real database in the suite.
|
|
7
|
+
*
|
|
8
|
+
* Imported only by `db push` / `db seed` (themselves lazy-loaded from the
|
|
9
|
+
* router), so `grafeo generate` never pays the neo4j-driver load.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createDriver(io: CliIO, connection: ResolvedConnection): Driver;
|
|
12
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/cli/driver.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,KAAK,EACT,UAAU,EAAE,kBAAkB,GAC7B,MAAM,CAMR"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createDriver = createDriver;
|
|
7
|
+
const neo4j_driver_1 = __importDefault(require("neo4j-driver"));
|
|
8
|
+
/**
|
|
9
|
+
* Obtain the driver for a db command. Production goes straight to
|
|
10
|
+
* `neo4j-driver`; tests inject a mock through `io.driverFactory` so no
|
|
11
|
+
* command ever touches a real database in the suite.
|
|
12
|
+
*
|
|
13
|
+
* Imported only by `db push` / `db seed` (themselves lazy-loaded from the
|
|
14
|
+
* router), so `grafeo generate` never pays the neo4j-driver load.
|
|
15
|
+
*/
|
|
16
|
+
function createDriver(io, connection) {
|
|
17
|
+
if (io.driverFactory)
|
|
18
|
+
return io.driverFactory(connection);
|
|
19
|
+
return neo4j_driver_1.default.driver(connection.uri, neo4j_driver_1.default.auth.basic(connection.username, connection.password));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=driver.js.map
|