velocious 1.0.112 → 1.0.114

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.
Files changed (28) hide show
  1. package/dist/src/database/query/index.d.ts +46 -120
  2. package/dist/src/database/query/index.d.ts.map +1 -1
  3. package/dist/src/database/query/index.js +31 -219
  4. package/dist/src/database/query/join-object.d.ts.map +1 -1
  5. package/dist/src/database/query/join-object.js +7 -2
  6. package/dist/src/database/query/model-class-query.d.ts +77 -0
  7. package/dist/src/database/query/model-class-query.d.ts.map +1 -0
  8. package/dist/src/database/query/model-class-query.js +212 -0
  9. package/dist/src/database/query-parser/select-parser.d.ts.map +1 -1
  10. package/dist/src/database/query-parser/select-parser.js +3 -1
  11. package/dist/src/database/record/index.d.ts +42 -67
  12. package/dist/src/database/record/index.d.ts.map +1 -1
  13. package/dist/src/database/record/index.js +33 -57
  14. package/dist/src/database/record/instance-relationships/base.d.ts +35 -24
  15. package/dist/src/database/record/instance-relationships/base.d.ts.map +1 -1
  16. package/dist/src/database/record/instance-relationships/base.js +24 -11
  17. package/dist/src/database/record/instance-relationships/belongs-to.d.ts +11 -1
  18. package/dist/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
  19. package/dist/src/database/record/instance-relationships/belongs-to.js +14 -3
  20. package/dist/src/database/record/instance-relationships/has-many.d.ts +23 -3
  21. package/dist/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
  22. package/dist/src/database/record/instance-relationships/has-many.js +16 -4
  23. package/dist/src/database/record/instance-relationships/has-one.d.ts +21 -4
  24. package/dist/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  25. package/dist/src/database/record/instance-relationships/has-one.js +19 -8
  26. package/dist/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  27. package/dist/src/environment-handlers/node/cli/commands/generate/base-models.js +26 -10
  28. package/package.json +1 -1
@@ -1,17 +1,28 @@
1
1
  // @ts-check
2
2
  import BaseInstanceRelationship from "./base.js";
3
+ /**
4
+ * A generic query over some model type.
5
+ * @template {typeof import("../index.js").default} MC
6
+ * @template {typeof import("../index.js").default} TMC
7
+ */
3
8
  export default class VelociousDatabaseRecordHasOneInstanceRelationship extends BaseInstanceRelationship {
4
- /** @type {import("../index.js").default | undefined} */
9
+ /**
10
+ * @param {import("./base.js").InstanceRelationshipsBaseArgs<MC, TMC>} args
11
+ */
12
+ constructor(args) {
13
+ super(args);
14
+ }
15
+ /** @type {InstanceType<TMC> | undefined} */
5
16
  _loaded = undefined;
6
17
  /**
7
18
  * @param {Record<string, any>} data
8
- * @returns {import("../index.js").default}
19
+ * @returns {InstanceType<TMC>}
9
20
  */
10
21
  build(data) {
11
- const TargetModelClass = this.getTargetModelClass();
22
+ const TargetModelClass = /** @type {TMC} */ (this.getTargetModelClass());
12
23
  if (!TargetModelClass)
13
24
  throw new Error("Can't build a new record without a target model class");
14
- const newInstance = new TargetModelClass(data);
25
+ const newInstance = /** @type {InstanceType<TMC>} */ (new TargetModelClass(data));
15
26
  this._loaded = newInstance;
16
27
  return newInstance;
17
28
  }
@@ -19,19 +30,19 @@ export default class VelociousDatabaseRecordHasOneInstanceRelationship extends B
19
30
  const foreignKey = this.getForeignKey();
20
31
  const primaryKey = this.getPrimaryKey();
21
32
  const primaryModelID = this.getModel().readColumn(primaryKey);
22
- const TargetModelClass = this.getTargetModelClass();
33
+ const TargetModelClass = /** @type {TMC} */ (this.getTargetModelClass());
23
34
  if (!TargetModelClass)
24
35
  throw new Error("Can't load without a target model class");
25
36
  /** @type {Record<string, any>} */
26
37
  const whereArgs = {};
27
38
  whereArgs[foreignKey] = primaryModelID;
28
- const foreignModel = await TargetModelClass.where(whereArgs).first();
39
+ const foreignModel = /** @type {InstanceType<TMC>} */ (await TargetModelClass.where(whereArgs).first());
29
40
  this.setLoaded(foreignModel);
30
41
  this.setDirty(false);
31
42
  this.setPreloaded(true);
32
43
  }
33
44
  /**
34
- * @returns {import("../index.js").default | Array<import("../index.js").default> | undefined} The loaded model or models (depending on relationship type)
45
+ * @returns {InstanceType<TMC> | Array<InstanceType<TMC>> | undefined} The loaded model or models (depending on relationship type)
35
46
  */
36
47
  loaded() {
37
48
  if (!this._preloaded && this.model.isPersisted()) {
@@ -40,7 +51,7 @@ export default class VelociousDatabaseRecordHasOneInstanceRelationship extends B
40
51
  return this._loaded;
41
52
  }
42
53
  getLoadedOrUndefined() { return this._loaded; }
43
- /** @param {import("../index.js").default|Array<import("../index.js").default>} model */
54
+ /** @param {InstanceType<TMC> | Array<InstanceType<TMC>>} model */
44
55
  setLoaded(model) {
45
56
  if (Array.isArray(model))
46
57
  throw new Error(`Argument given to setLoaded was an array: ${typeof model}`);
@@ -1 +1 @@
1
- {"version":3,"file":"base-models.d.ts","sourceRoot":"","sources":["../../../../../../../src/environment-handlers/node/cli/commands/generate/base-models.js"],"names":[],"mappings":"AAKA;IACE,yBA4OC;IAED;;;OAGG;IACH,4BAHW,OAAO,gDAAgD,EAAE,OAAO,GAC9D,MAAM,GAAG,SAAS,CAY9B;CACF;wBAnQuB,oCAAoC"}
1
+ {"version":3,"file":"base-models.d.ts","sourceRoot":"","sources":["../../../../../../../src/environment-handlers/node/cli/commands/generate/base-models.js"],"names":[],"mappings":"AAKA;IACE,yBAsPC;IAED;;;OAGG;IACH,4BAHW,OAAO,gDAAgD,EAAE,OAAO,GAC9D,MAAM,GAAG,SAAS,CAkB9B;CACF;wBAnRuB,oCAAoC"}
@@ -5,22 +5,31 @@ import * as inflection from "inflection";
5
5
  export default class DbGenerateModel extends BaseCommand {
6
6
  async execute() {
7
7
  await this.getConfiguration().initializeModels();
8
- const modelsDir = `${process.cwd()}/src/model-bases`;
8
+ const modelsDir = `${process.cwd()}/src/models`;
9
+ const baseModelsDir = `${process.cwd()}/src/model-bases`;
9
10
  const modelClasses = this.getConfiguration().getModelClasses();
10
11
  let devMode = false;
11
- if (modelsDir.endsWith("velocious/spec/dummy/src/model-bases")) {
12
+ if (baseModelsDir.endsWith("velocious/spec/dummy/src/model-bases")) {
12
13
  devMode = true;
13
14
  }
14
- if (!await fileExists(modelsDir)) {
15
- await fs.mkdir(modelsDir, { recursive: true });
15
+ if (!await fileExists(baseModelsDir)) {
16
+ await fs.mkdir(baseModelsDir, { recursive: true });
16
17
  }
17
18
  for (const modelClassName in modelClasses) {
18
19
  const modelClass = modelClasses[modelClassName];
19
20
  const modelName = inflection.dasherize(modelClassName);
20
21
  const modelNameCamelized = inflection.camelize(modelName.replaceAll("-", "_"));
21
22
  const modelBaseFileName = `${inflection.dasherize(inflection.underscore(modelName))}.js`;
22
- const modelPath = `${modelsDir}/${modelBaseFileName}`;
23
+ const modelPath = `${baseModelsDir}/${modelBaseFileName}`;
23
24
  console.log(`create src/model-bases/${modelBaseFileName}`);
25
+ const sourceModelFullFilePath = `${modelsDir}/${modelBaseFileName}`;
26
+ let sourceModelFilePath;
27
+ if (await fileExists(sourceModelFullFilePath)) {
28
+ sourceModelFilePath = `../models/${modelBaseFileName}`;
29
+ }
30
+ else {
31
+ sourceModelFilePath = "velocious/dist/src/database/record/index.js";
32
+ }
24
33
  let fileContent = "";
25
34
  let velociousPath;
26
35
  if (devMode) {
@@ -169,7 +178,7 @@ export default class DbGenerateModel extends BaseCommand {
169
178
  recordImport = `${velociousPath}/database/record/index.js`;
170
179
  }
171
180
  fileContent += " /**\n";
172
- fileContent += ` * @returns {import("${hasManyRelationFilePath}").default}\n`;
181
+ fileContent += ` * @returns {import("${hasManyRelationFilePath}").default<typeof import("${sourceModelFilePath}").default, typeof import("${recordImport}").default>}\n`;
173
182
  fileContent += " */\n";
174
183
  fileContent += ` ${relationship.getRelationshipName()}() { return /** @type {import("${hasManyRelationFilePath}").default} */ (this.getRelationshipByName("${relationship.getRelationshipName()}")) }\n`;
175
184
  fileContent += "\n";
@@ -205,17 +214,24 @@ export default class DbGenerateModel extends BaseCommand {
205
214
  * @returns {string | undefined}
206
215
  */
207
216
  jsDocTypeFromColumn(column) {
208
- if (column.getType() == "varchar") {
217
+ const type = column.getType();
218
+ if (type == "boolean") {
219
+ return "boolean";
220
+ }
221
+ else if (type == "json") {
222
+ return "Record<string, any>";
223
+ }
224
+ else if (type == "blob" || type == "varchar" || type == "text" || type == "uuid") {
209
225
  return "string";
210
226
  }
211
- else if (["bigint", "int", "integer", "smallint"].includes(column.getType())) {
227
+ else if (["bigint", "int", "integer", "smallint"].includes(type)) {
212
228
  return "number";
213
229
  }
214
- else if (["date", "datetime"].includes(column.getType())) {
230
+ else if (["date", "datetime"].includes(type)) {
215
231
  return "Date";
216
232
  }
217
233
  else {
218
- console.error(`Unknown column type: ${column.getType()}`);
234
+ console.error(`Unknown column type: ${type}`);
219
235
  }
220
236
  }
221
237
  }
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "velocious": "dist/bin/velocious.js"
4
4
  },
5
5
  "name": "velocious",
6
- "version": "1.0.112",
6
+ "version": "1.0.114",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
9
9
  "files": ["dist/**"],