js-bao 0.2.11 → 0.2.12
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 +174 -0
- package/dist/BaseModel-5YQCROYE.js +17 -0
- package/dist/BaseModel-5YQCROYE.js.map +1 -0
- package/dist/BaseModel-FCNWDJBH.js +17 -0
- package/dist/BaseModel-FCNWDJBH.js.map +1 -0
- package/dist/BrowserDatabaseFactory-PXOTK2DQ.js +119 -0
- package/dist/BrowserDatabaseFactory-PXOTK2DQ.js.map +1 -0
- package/dist/BrowserDatabaseFactory-WD4VX2VZ.js +119 -0
- package/dist/BrowserDatabaseFactory-WD4VX2VZ.js.map +1 -0
- package/dist/IncludeResolver-RCKQGNPZ.js +385 -0
- package/dist/IncludeResolver-RCKQGNPZ.js.map +1 -0
- package/dist/IncludeResolver-WGSQDMS7.js +385 -0
- package/dist/IncludeResolver-WGSQDMS7.js.map +1 -0
- package/dist/NodeDatabaseFactory-J4Z36UF3.js +165 -0
- package/dist/NodeDatabaseFactory-J4Z36UF3.js.map +1 -0
- package/dist/NodeDatabaseFactory-QIEKAXBM.js +10 -0
- package/dist/NodeDatabaseFactory-QIEKAXBM.js.map +1 -0
- package/dist/NodeSqliteEngine-HJSAYE4E.js +383 -0
- package/dist/NodeSqliteEngine-HJSAYE4E.js.map +1 -0
- package/dist/NodeSqliteEngine-I5SLWLME.js +383 -0
- package/dist/NodeSqliteEngine-I5SLWLME.js.map +1 -0
- package/dist/browser.cjs +3779 -3370
- package/dist/browser.d.cts +18 -1
- package/dist/browser.d.ts +18 -1
- package/dist/browser.js +3750 -3341
- package/dist/chunk-3PZWHUZO.js +4153 -0
- package/dist/chunk-3PZWHUZO.js.map +1 -0
- package/dist/chunk-53MS4MN7.js +373 -0
- package/dist/chunk-53MS4MN7.js.map +1 -0
- package/dist/chunk-65G2P4GL.js +709 -0
- package/dist/chunk-65G2P4GL.js.map +1 -0
- package/dist/chunk-6UX3YSCW.js +4151 -0
- package/dist/chunk-6UX3YSCW.js.map +1 -0
- package/dist/chunk-DANSD6BE.js +709 -0
- package/dist/chunk-DANSD6BE.js.map +1 -0
- package/dist/chunk-DF3JEQXA.js +373 -0
- package/dist/chunk-DF3JEQXA.js.map +1 -0
- package/dist/chunk-GO3APTPX.js +61 -0
- package/dist/chunk-GO3APTPX.js.map +1 -0
- package/dist/chunk-ID4U6IQC.js +53 -0
- package/dist/chunk-ID4U6IQC.js.map +1 -0
- package/dist/chunk-RQVS3LVL.js +165 -0
- package/dist/chunk-RQVS3LVL.js.map +1 -0
- package/dist/client.cjs +837 -0
- package/dist/client.d.cts +1101 -0
- package/dist/client.d.ts +1101 -0
- package/dist/client.js +806 -0
- package/dist/cloudflare-do.cjs +3637 -0
- package/dist/cloudflare-do.d.cts +1366 -0
- package/dist/cloudflare-do.d.ts +1366 -0
- package/dist/cloudflare-do.js +3614 -0
- package/dist/cloudflare.cjs +1048 -0
- package/dist/cloudflare.d.cts +1381 -0
- package/dist/cloudflare.d.ts +1381 -0
- package/dist/cloudflare.js +1017 -0
- package/dist/codegen.cjs +260 -19
- package/dist/environment-TOTQICSE.js +17 -0
- package/dist/environment-TOTQICSE.js.map +1 -0
- package/dist/index.cjs +1905 -1492
- package/dist/index.d.cts +19 -2
- package/dist/index.d.ts +19 -2
- package/dist/index.js +1870 -1457
- package/dist/node.cjs +4779 -4366
- package/dist/node.d.cts +18 -1
- package/dist/node.d.ts +18 -1
- package/dist/node.js +4758 -4345
- package/package.json +42 -13
package/dist/codegen.cjs
CHANGED
|
@@ -1004,10 +1004,192 @@ ${methods.map((method) => ` ${method}`).join("\n")}
|
|
|
1004
1004
|
}
|
|
1005
1005
|
};
|
|
1006
1006
|
|
|
1007
|
+
// src/cli/extractors/SchemaExtractor.ts
|
|
1008
|
+
var ts2 = __toESM(require("typescript"), 1);
|
|
1009
|
+
var SchemaExtractor = class {
|
|
1010
|
+
program;
|
|
1011
|
+
verbose;
|
|
1012
|
+
constructor(filePaths, verbose = false) {
|
|
1013
|
+
this.verbose = verbose;
|
|
1014
|
+
this.program = ts2.createProgram(filePaths, {
|
|
1015
|
+
target: ts2.ScriptTarget.ES2020,
|
|
1016
|
+
module: ts2.ModuleKind.CommonJS,
|
|
1017
|
+
allowJs: false,
|
|
1018
|
+
declaration: true,
|
|
1019
|
+
esModuleInterop: true,
|
|
1020
|
+
skipLibCheck: true
|
|
1021
|
+
});
|
|
1022
|
+
}
|
|
1023
|
+
/**
|
|
1024
|
+
* Extract all schemas from model files
|
|
1025
|
+
*/
|
|
1026
|
+
async extractSchemas() {
|
|
1027
|
+
const schemas = [];
|
|
1028
|
+
for (const sourceFile of this.program.getSourceFiles()) {
|
|
1029
|
+
if (sourceFile.isDeclarationFile) continue;
|
|
1030
|
+
const fileSchemas = this.extractFromFile(sourceFile);
|
|
1031
|
+
schemas.push(...fileSchemas);
|
|
1032
|
+
}
|
|
1033
|
+
return schemas;
|
|
1034
|
+
}
|
|
1035
|
+
/**
|
|
1036
|
+
* Generate schema output in the format expected by registerSchema
|
|
1037
|
+
*/
|
|
1038
|
+
async generateSchemaOutput() {
|
|
1039
|
+
const schemas = await this.extractSchemas();
|
|
1040
|
+
const output = { models: {} };
|
|
1041
|
+
for (const schema of schemas) {
|
|
1042
|
+
output.models[schema.modelName] = {
|
|
1043
|
+
fields: schema.fields
|
|
1044
|
+
};
|
|
1045
|
+
}
|
|
1046
|
+
return output;
|
|
1047
|
+
}
|
|
1048
|
+
/**
|
|
1049
|
+
* Extract schemas from a single file
|
|
1050
|
+
*/
|
|
1051
|
+
extractFromFile(sourceFile) {
|
|
1052
|
+
const schemas = [];
|
|
1053
|
+
const visit = (node) => {
|
|
1054
|
+
if (ts2.isVariableStatement(node) && node.declarationList.declarations.length > 0) {
|
|
1055
|
+
for (const declaration of node.declarationList.declarations) {
|
|
1056
|
+
if (declaration.initializer && ts2.isCallExpression(declaration.initializer) && ts2.isIdentifier(declaration.initializer.expression) && declaration.initializer.expression.text === "defineModelSchema" && declaration.initializer.arguments.length > 0) {
|
|
1057
|
+
const arg = declaration.initializer.arguments[0];
|
|
1058
|
+
if (ts2.isObjectLiteralExpression(arg)) {
|
|
1059
|
+
const schema = this.parseDefineModelSchema(arg);
|
|
1060
|
+
if (schema) {
|
|
1061
|
+
Logger.verbose(
|
|
1062
|
+
`Extracted schema for model: ${schema.modelName}`,
|
|
1063
|
+
"SchemaExtractor"
|
|
1064
|
+
);
|
|
1065
|
+
schemas.push(schema);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
ts2.forEachChild(node, visit);
|
|
1072
|
+
};
|
|
1073
|
+
visit(sourceFile);
|
|
1074
|
+
return schemas;
|
|
1075
|
+
}
|
|
1076
|
+
/**
|
|
1077
|
+
* Parse defineModelSchema argument
|
|
1078
|
+
*/
|
|
1079
|
+
parseDefineModelSchema(obj) {
|
|
1080
|
+
let modelName = null;
|
|
1081
|
+
let fields = {};
|
|
1082
|
+
for (const property of obj.properties) {
|
|
1083
|
+
if (ts2.isPropertyAssignment(property) && ts2.isIdentifier(property.name)) {
|
|
1084
|
+
const propName = property.name.text;
|
|
1085
|
+
if (propName === "name" && ts2.isStringLiteral(property.initializer)) {
|
|
1086
|
+
modelName = property.initializer.text;
|
|
1087
|
+
} else if (propName === "fields" && ts2.isObjectLiteralExpression(property.initializer)) {
|
|
1088
|
+
fields = this.parseFields(property.initializer);
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
return modelName ? { modelName, fields } : null;
|
|
1093
|
+
}
|
|
1094
|
+
/**
|
|
1095
|
+
* Parse fields object
|
|
1096
|
+
*/
|
|
1097
|
+
parseFields(obj) {
|
|
1098
|
+
const fields = {};
|
|
1099
|
+
for (const property of obj.properties) {
|
|
1100
|
+
if (ts2.isPropertyAssignment(property) && ts2.isIdentifier(property.name)) {
|
|
1101
|
+
const fieldName = property.name.text;
|
|
1102
|
+
if (ts2.isObjectLiteralExpression(property.initializer)) {
|
|
1103
|
+
const fieldDef = this.parseFieldDefinition(property.initializer);
|
|
1104
|
+
if (fieldDef) {
|
|
1105
|
+
fields[fieldName] = fieldDef;
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
}
|
|
1110
|
+
return fields;
|
|
1111
|
+
}
|
|
1112
|
+
/**
|
|
1113
|
+
* Parse individual field definition
|
|
1114
|
+
*/
|
|
1115
|
+
parseFieldDefinition(obj) {
|
|
1116
|
+
const fieldDef = { type: "string" };
|
|
1117
|
+
for (const property of obj.properties) {
|
|
1118
|
+
if (ts2.isPropertyAssignment(property) && ts2.isIdentifier(property.name)) {
|
|
1119
|
+
const propName = property.name.text;
|
|
1120
|
+
const value = this.parsePropertyValue(property.initializer);
|
|
1121
|
+
switch (propName) {
|
|
1122
|
+
case "type":
|
|
1123
|
+
if (typeof value === "string") {
|
|
1124
|
+
fieldDef.type = value;
|
|
1125
|
+
}
|
|
1126
|
+
break;
|
|
1127
|
+
case "indexed":
|
|
1128
|
+
if (typeof value === "boolean") {
|
|
1129
|
+
fieldDef.indexed = value;
|
|
1130
|
+
}
|
|
1131
|
+
break;
|
|
1132
|
+
case "unique":
|
|
1133
|
+
if (typeof value === "boolean") {
|
|
1134
|
+
fieldDef.unique = value;
|
|
1135
|
+
}
|
|
1136
|
+
break;
|
|
1137
|
+
case "required":
|
|
1138
|
+
if (typeof value === "boolean") {
|
|
1139
|
+
fieldDef.required = value;
|
|
1140
|
+
}
|
|
1141
|
+
break;
|
|
1142
|
+
case "autoAssign":
|
|
1143
|
+
if (typeof value === "boolean") {
|
|
1144
|
+
fieldDef.autoAssign = value;
|
|
1145
|
+
}
|
|
1146
|
+
break;
|
|
1147
|
+
case "primaryKey":
|
|
1148
|
+
if (typeof value === "boolean") {
|
|
1149
|
+
fieldDef.primaryKey = value;
|
|
1150
|
+
}
|
|
1151
|
+
break;
|
|
1152
|
+
case "default":
|
|
1153
|
+
fieldDef.default = value;
|
|
1154
|
+
break;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
return fieldDef.type ? fieldDef : null;
|
|
1159
|
+
}
|
|
1160
|
+
/**
|
|
1161
|
+
* Parse a property value to a JavaScript value
|
|
1162
|
+
*/
|
|
1163
|
+
parsePropertyValue(node) {
|
|
1164
|
+
if (ts2.isStringLiteral(node)) {
|
|
1165
|
+
return node.text;
|
|
1166
|
+
} else if (ts2.isNumericLiteral(node)) {
|
|
1167
|
+
return parseFloat(node.text);
|
|
1168
|
+
} else if (node.kind === ts2.SyntaxKind.TrueKeyword) {
|
|
1169
|
+
return true;
|
|
1170
|
+
} else if (node.kind === ts2.SyntaxKind.FalseKeyword) {
|
|
1171
|
+
return false;
|
|
1172
|
+
} else if (node.kind === ts2.SyntaxKind.NullKeyword) {
|
|
1173
|
+
return null;
|
|
1174
|
+
} else if (ts2.isArrayLiteralExpression(node)) {
|
|
1175
|
+
return node.elements.map((el) => this.parsePropertyValue(el));
|
|
1176
|
+
} else if (ts2.isObjectLiteralExpression(node)) {
|
|
1177
|
+
const obj = {};
|
|
1178
|
+
for (const prop of node.properties) {
|
|
1179
|
+
if (ts2.isPropertyAssignment(prop) && ts2.isIdentifier(prop.name)) {
|
|
1180
|
+
obj[prop.name.text] = this.parsePropertyValue(prop.initializer);
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
return obj;
|
|
1184
|
+
}
|
|
1185
|
+
return void 0;
|
|
1186
|
+
}
|
|
1187
|
+
};
|
|
1188
|
+
|
|
1007
1189
|
// package.json
|
|
1008
1190
|
var package_default = {
|
|
1009
1191
|
name: "js-bao",
|
|
1010
|
-
version: "0.2.
|
|
1192
|
+
version: "0.2.12",
|
|
1011
1193
|
description: "A library providing data modeling capabilities which support live updates and queries.",
|
|
1012
1194
|
types: "dist/index.d.ts",
|
|
1013
1195
|
type: "module",
|
|
@@ -1039,6 +1221,21 @@ var package_default = {
|
|
|
1039
1221
|
types: "./dist/browser.d.ts",
|
|
1040
1222
|
import: "./dist/browser.js",
|
|
1041
1223
|
require: "./dist/browser.cjs"
|
|
1224
|
+
},
|
|
1225
|
+
"./cloudflare": {
|
|
1226
|
+
types: "./dist/cloudflare.d.ts",
|
|
1227
|
+
import: "./dist/cloudflare.js",
|
|
1228
|
+
require: "./dist/cloudflare.cjs"
|
|
1229
|
+
},
|
|
1230
|
+
"./cloudflare/do": {
|
|
1231
|
+
types: "./dist/cloudflare-do.d.ts",
|
|
1232
|
+
import: "./dist/cloudflare-do.js",
|
|
1233
|
+
require: "./dist/cloudflare-do.cjs"
|
|
1234
|
+
},
|
|
1235
|
+
"./client": {
|
|
1236
|
+
types: "./dist/client.d.ts",
|
|
1237
|
+
import: "./dist/client.js",
|
|
1238
|
+
require: "./dist/client.cjs"
|
|
1042
1239
|
}
|
|
1043
1240
|
},
|
|
1044
1241
|
bin: {
|
|
@@ -1046,32 +1243,37 @@ var package_default = {
|
|
|
1046
1243
|
"jsbao-codegen": "./dist/codegen.cjs"
|
|
1047
1244
|
},
|
|
1048
1245
|
scripts: {
|
|
1049
|
-
build: "
|
|
1050
|
-
"build:main": "
|
|
1246
|
+
build: "pnpm build:cli && pnpm codegen && rm -f dist/index.* dist/node.* dist/browser.* dist/cloudflare.* dist/cloudflare-do.* dist/client.* && pnpm build:main",
|
|
1247
|
+
"build:main": "pnpm build:browser && pnpm build:node && pnpm build:universal && pnpm build:cloudflare && pnpm build:cloudflare-do && pnpm build:client",
|
|
1051
1248
|
"build:browser": "tsup src/browser.ts --format esm,cjs --dts --platform browser --external better-sqlite3 --external sql.js --external async-mutex --external ulid --no-splitting",
|
|
1052
1249
|
"build:node": "tsup src/node.ts --format esm,cjs --dts --platform node --external better-sqlite3 --external sql.js --external async-mutex --external ulid --no-splitting",
|
|
1053
1250
|
"build:universal": "tsup src/index.ts --format esm,cjs --dts --external better-sqlite3 --external sql.js --external async-mutex --external ulid --no-splitting",
|
|
1251
|
+
"build:cloudflare": "tsup src/cloudflare.ts --format esm,cjs --dts --platform browser --external better-sqlite3 --external sql.js --external async-mutex --external ulid --external yjs --no-splitting",
|
|
1252
|
+
"build:cloudflare-do": "tsup src/cloudflare-do.ts --format esm,cjs --dts --platform neutral --external better-sqlite3 --external sql.js --external async-mutex --external ulid --external yjs --no-splitting",
|
|
1253
|
+
"build:client": "tsup src/client.ts --format esm,cjs --dts --platform browser --external better-sqlite3 --external sql.js --external async-mutex --external ulid --external yjs --no-splitting",
|
|
1054
1254
|
"build:cli": "tsup src/cli/codegen.ts --format cjs --dts --platform node --target node18 --external commander --external typescript --external fs --external path --external util --no-splitting",
|
|
1055
|
-
dev: '
|
|
1056
|
-
"dev:main": 'concurrently "
|
|
1057
|
-
"dev:simple": "
|
|
1255
|
+
dev: 'pnpm build:cli && concurrently "pnpm codegen:watch" "pnpm dev:main"',
|
|
1256
|
+
"dev:main": 'concurrently "pnpm build:browser:dev --watch" "pnpm build:node:dev --watch" "pnpm build:universal:dev --watch"',
|
|
1257
|
+
"dev:simple": "pnpm build:cli && pnpm codegen && pnpm build:main --watch",
|
|
1058
1258
|
"build:browser:dev": "tsup src/browser.ts --format esm,cjs --dts --sourcemap --platform browser --external better-sqlite3 --external sql.js --external async-mutex --external ulid",
|
|
1059
1259
|
"build:node:dev": "tsup src/node.ts --format esm,cjs --dts --sourcemap --platform node --external better-sqlite3 --external sql.js --external async-mutex --external ulid",
|
|
1060
1260
|
"build:universal:dev": "tsup src/index.ts --format esm,cjs --dts --sourcemap --external better-sqlite3 --external sql.js --external async-mutex --external ulid",
|
|
1061
1261
|
codegen: "./dist/codegen.cjs --config js-bao.config.cjs || echo 'Codegen skipped (likely in consumer project)'",
|
|
1062
1262
|
"codegen:watch": "./dist/codegen.cjs --config js-bao.config.cjs --watch",
|
|
1063
1263
|
"codegen:consumer": `node -e "require('child_process').spawn('./node_modules/.bin/js-bao-codegen', process.argv.slice(2), {stdio: 'inherit'})"`,
|
|
1264
|
+
"publish:alpha": "node scripts/publish.js --tag alpha",
|
|
1265
|
+
"publish:stable": "node scripts/publish.js",
|
|
1064
1266
|
test: 'echo "Error: no test specified" && exit 1',
|
|
1065
|
-
prepare: "
|
|
1066
|
-
prepublishOnly: "
|
|
1267
|
+
prepare: "pnpm build",
|
|
1268
|
+
prepublishOnly: "pnpm build"
|
|
1067
1269
|
},
|
|
1068
1270
|
dependencies: {
|
|
1069
1271
|
"async-mutex": "^0.5.0",
|
|
1070
|
-
"sql.js": "
|
|
1272
|
+
"sql.js": "^1.13.0",
|
|
1071
1273
|
ulid: "^3.0.0"
|
|
1072
1274
|
},
|
|
1073
1275
|
devDependencies: {
|
|
1074
|
-
"@types/better-sqlite3": "^7.6.
|
|
1276
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
1075
1277
|
"@types/node": "^20.17.51",
|
|
1076
1278
|
"@types/sql.js": "^1.4.9",
|
|
1077
1279
|
commander: "^11.0.0",
|
|
@@ -1085,7 +1287,7 @@ var package_default = {
|
|
|
1085
1287
|
yjs: "^13.6.18"
|
|
1086
1288
|
},
|
|
1087
1289
|
optionalDependencies: {
|
|
1088
|
-
"better-sqlite3": "^
|
|
1290
|
+
"better-sqlite3": "^12.6.2"
|
|
1089
1291
|
},
|
|
1090
1292
|
keywords: [
|
|
1091
1293
|
"yjs",
|
|
@@ -1096,10 +1298,19 @@ var package_default = {
|
|
|
1096
1298
|
"reactivedb",
|
|
1097
1299
|
"nodejs",
|
|
1098
1300
|
"browser",
|
|
1099
|
-
"sqlite"
|
|
1301
|
+
"sqlite",
|
|
1302
|
+
"cloudflare",
|
|
1303
|
+
"durable-objects",
|
|
1304
|
+
"workers"
|
|
1100
1305
|
],
|
|
1101
1306
|
author: "Primitive LLC",
|
|
1102
|
-
license: "UNLICENSED"
|
|
1307
|
+
license: "UNLICENSED",
|
|
1308
|
+
pnpm: {
|
|
1309
|
+
onlyBuiltDependencies: [
|
|
1310
|
+
"better-sqlite3",
|
|
1311
|
+
"esbuild"
|
|
1312
|
+
]
|
|
1313
|
+
}
|
|
1103
1314
|
};
|
|
1104
1315
|
|
|
1105
1316
|
// src/cli/codegen.ts
|
|
@@ -1132,7 +1343,15 @@ var CodegenCLI = class {
|
|
|
1132
1343
|
"--no-include-pagination",
|
|
1133
1344
|
"Exclude pagination types from output",
|
|
1134
1345
|
false
|
|
1135
|
-
).option("-v, --verbose", "Show detailed logging information", false).
|
|
1346
|
+
).option("-v, --verbose", "Show detailed logging information", false).option(
|
|
1347
|
+
"-s, --schema",
|
|
1348
|
+
"Generate schema.json file for dynamic schema registration",
|
|
1349
|
+
false
|
|
1350
|
+
).option(
|
|
1351
|
+
"--schema-output <file>",
|
|
1352
|
+
"Output path for schema.json file",
|
|
1353
|
+
"./schema.json"
|
|
1354
|
+
).action(async (options) => {
|
|
1136
1355
|
await this.run(options);
|
|
1137
1356
|
});
|
|
1138
1357
|
}
|
|
@@ -1180,6 +1399,9 @@ ${formattedList}`,
|
|
|
1180
1399
|
Logger.warn("No model files found. Exiting.", "js-bao-codegen");
|
|
1181
1400
|
return;
|
|
1182
1401
|
}
|
|
1402
|
+
if (config.schema) {
|
|
1403
|
+
await this.generateSchema(modelFiles, config);
|
|
1404
|
+
}
|
|
1183
1405
|
const analyzer = new ModelAnalyzer(modelFiles, cliOptions.verbose);
|
|
1184
1406
|
const models = await analyzer.analyzeModels();
|
|
1185
1407
|
Logger.verbose(
|
|
@@ -1187,10 +1409,12 @@ ${formattedList}`,
|
|
|
1187
1409
|
"js-bao-codegen"
|
|
1188
1410
|
);
|
|
1189
1411
|
if (models.length === 0) {
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1412
|
+
if (!config.schema) {
|
|
1413
|
+
Logger.warn(
|
|
1414
|
+
"No models with relationships found. Exiting.",
|
|
1415
|
+
"js-bao-codegen"
|
|
1416
|
+
);
|
|
1417
|
+
}
|
|
1194
1418
|
return;
|
|
1195
1419
|
}
|
|
1196
1420
|
const generationOptions = {
|
|
@@ -1236,7 +1460,9 @@ ${formattedList}`,
|
|
|
1236
1460
|
exclude: cliOptions.exclude.length > 2 ? cliOptions.exclude : configFile.exclude || ["**/*.test.ts", "**/*.spec.ts"],
|
|
1237
1461
|
generatePerModelFiles: cliOptions.generatePerModelFiles || configFile.generatePerModelFiles || false,
|
|
1238
1462
|
includePagination: configFile.includePagination ?? true,
|
|
1239
|
-
verbose: cliOptions.verbose
|
|
1463
|
+
verbose: cliOptions.verbose,
|
|
1464
|
+
schema: cliOptions.schema || configFile.schema || false,
|
|
1465
|
+
schemaOutput: cliOptions.schemaOutput !== "./schema.json" ? cliOptions.schemaOutput : configFile.schemaOutput || "./schema.json"
|
|
1240
1466
|
};
|
|
1241
1467
|
} else {
|
|
1242
1468
|
Logger.warn(`Config file not found: ${configPath}`, "js-bao-codegen");
|
|
@@ -1252,6 +1478,21 @@ ${formattedList}`,
|
|
|
1252
1478
|
const resolvedInputDir = path3.resolve(inputDir);
|
|
1253
1479
|
return await FileUtils.findTSFiles(resolvedInputDir, exclude);
|
|
1254
1480
|
}
|
|
1481
|
+
async generateSchema(modelFiles, config) {
|
|
1482
|
+
Logger.log("Generating schema.json...", "js-bao-codegen");
|
|
1483
|
+
const extractor = new SchemaExtractor(modelFiles, config.verbose);
|
|
1484
|
+
const schemaOutput = await extractor.generateSchemaOutput();
|
|
1485
|
+
const outputPath = path3.resolve(config.schemaOutput);
|
|
1486
|
+
await FileUtils.writeFileContent(
|
|
1487
|
+
outputPath,
|
|
1488
|
+
JSON.stringify(schemaOutput, null, 2)
|
|
1489
|
+
);
|
|
1490
|
+
Logger.log(`Schema written to ${outputPath}`, "js-bao-codegen");
|
|
1491
|
+
Logger.verbose(
|
|
1492
|
+
`Extracted ${Object.keys(schemaOutput.models).length} model(s)`,
|
|
1493
|
+
"js-bao-codegen"
|
|
1494
|
+
);
|
|
1495
|
+
}
|
|
1255
1496
|
async setupWatchMode(config, initialFiles) {
|
|
1256
1497
|
Logger.log("Watch mode enabled. Watching for changes...", "js-bao-codegen");
|
|
1257
1498
|
const checkInterval = 2e3;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
constants,
|
|
3
|
+
detectEnvironment,
|
|
4
|
+
features,
|
|
5
|
+
isBrowser,
|
|
6
|
+
isNode,
|
|
7
|
+
isNodeModuleAvailable
|
|
8
|
+
} from "./chunk-GO3APTPX.js";
|
|
9
|
+
export {
|
|
10
|
+
constants,
|
|
11
|
+
detectEnvironment,
|
|
12
|
+
features,
|
|
13
|
+
isBrowser,
|
|
14
|
+
isNode,
|
|
15
|
+
isNodeModuleAvailable
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=environment-TOTQICSE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|