metal-orm 1.0.63 → 1.0.64

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 CHANGED
@@ -549,14 +549,16 @@ const [user] = await selectFromEntity(User)
549
549
  .where(eq(U.id, 1))
550
550
  .execute(session); // user is an actual instance of the User class!
551
551
 
552
- // Use executePlain() if you want raw POJOs instead of class instances
553
- const [rawUser] = await selectFromEntity(User).executePlain(session);
554
-
555
- user.posts.add({ title: 'From decorators' });
556
- await session.commit();
557
- ```
558
-
559
- Tip: to keep selections terse, use `select`, `include` (with `columns`), or the `sel`/`esel` helpers instead of spelling `table.columns.*` over and over. By default, `selectFromEntity` selects all columns if you don't specify any.
552
+ // Use executePlain() if you want raw POJOs instead of class instances
553
+ const [rawUser] = await selectFromEntity(User).executePlain(session);
554
+
555
+ user.posts.add({ title: 'From decorators' });
556
+ await session.commit();
557
+ ```
558
+
559
+ Note: relation helpers like `add`/`attach` are only available on tracked entities returned by `execute(session)`. `executePlain()` returns POJOs without relation wrappers. Make sure the primary key (e.g. `id`) is selected so relation adds can link correctly.
560
+
561
+ Tip: to keep selections terse, use `select`, `include` (with `columns`), or the `sel`/`esel` helpers instead of spelling `table.columns.*` over and over. By default, `selectFromEntity` selects all columns if you don't specify any.
560
562
 
561
563
 
562
564
  This level is nice when:
package/dist/index.cjs CHANGED
@@ -721,12 +721,24 @@ var createBinaryExpression = (operator, left2, right2, escape) => {
721
721
  }
722
722
  return node;
723
723
  };
724
- var eq = (left2, right2) => createBinaryExpression("=", left2, right2);
725
- var neq = (left2, right2) => createBinaryExpression("!=", left2, right2);
726
- var gt = (left2, right2) => createBinaryExpression(">", left2, right2);
727
- var gte = (left2, right2) => createBinaryExpression(">=", left2, right2);
728
- var lt = (left2, right2) => createBinaryExpression("<", left2, right2);
729
- var lte = (left2, right2) => createBinaryExpression("<=", left2, right2);
724
+ function eq(left2, right2) {
725
+ return createBinaryExpression("=", left2, right2);
726
+ }
727
+ function neq(left2, right2) {
728
+ return createBinaryExpression("!=", left2, right2);
729
+ }
730
+ function gt(left2, right2) {
731
+ return createBinaryExpression(">", left2, right2);
732
+ }
733
+ function gte(left2, right2) {
734
+ return createBinaryExpression(">=", left2, right2);
735
+ }
736
+ function lt(left2, right2) {
737
+ return createBinaryExpression("<", left2, right2);
738
+ }
739
+ function lte(left2, right2) {
740
+ return createBinaryExpression("<=", left2, right2);
741
+ }
730
742
  var like = (left2, pattern, escape) => createBinaryExpression("LIKE", left2, pattern, escape);
731
743
  var notLike = (left2, pattern, escape) => createBinaryExpression("NOT LIKE", left2, pattern, escape);
732
744
  var and = (...operands) => ({
@@ -836,7 +848,7 @@ var buildWindowFunction = (name, args = [], partitionBy, orderBy) => {
836
848
  if (orderBy && orderBy.length) {
837
849
  node.orderBy = orderBy;
838
850
  }
839
- return node;
851
+ return asType(node);
840
852
  };
841
853
  var rowNumber = () => buildWindowFunction("ROW_NUMBER");
842
854
  var rank = () => buildWindowFunction("RANK");
@@ -940,7 +952,7 @@ var ORDER_DIRECTIONS = {
940
952
  };
941
953
 
942
954
  // src/core/ast/aggregate-functions.ts
943
- var buildAggregate = (name) => (col2) => ({
955
+ var buildAggregate = (name) => (col2) => asType({
944
956
  type: "Function",
945
957
  name,
946
958
  args: [columnOperand(col2)]
@@ -950,7 +962,7 @@ var sum = buildAggregate("SUM");
950
962
  var avg = buildAggregate("AVG");
951
963
  var min = buildAggregate("MIN");
952
964
  var max = buildAggregate("MAX");
953
- var countAll = () => ({
965
+ var countAll = () => asType({
954
966
  type: "Function",
955
967
  name: "COUNT",
956
968
  args: []
@@ -960,7 +972,7 @@ var toOrderByNode = (order) => ({
960
972
  term: columnOperand(order.column),
961
973
  direction: order.direction ?? ORDER_DIRECTIONS.ASC
962
974
  });
963
- var groupConcat = (col2, options) => ({
975
+ var groupConcat = (col2, options) => asType({
964
976
  type: "Function",
965
977
  name: "GROUP_CONCAT",
966
978
  args: [columnOperand(col2)],
@@ -9783,45 +9795,47 @@ var fn = (key, args) => ({
9783
9795
  fn: key,
9784
9796
  args: args.map(toOperand2)
9785
9797
  });
9786
- var lower = (value) => fn("LOWER", [value]);
9787
- var upper = (value) => fn("UPPER", [value]);
9788
- var ascii = (value) => fn("ASCII", [value]);
9798
+ var sfn = (key, args) => asType(fn(key, args));
9799
+ var nfn = (key, args) => asType(fn(key, args));
9800
+ var lower = (value) => sfn("LOWER", [value]);
9801
+ var upper = (value) => sfn("UPPER", [value]);
9802
+ var ascii = (value) => nfn("ASCII", [value]);
9789
9803
  var char = (...codes) => {
9790
9804
  if (codes.length === 0) throw new Error("char() expects at least 1 argument");
9791
- return fn("CHAR", codes);
9805
+ return sfn("CHAR", codes);
9792
9806
  };
9793
- var charLength = (value) => fn("CHAR_LENGTH", [value]);
9794
- var length = (value) => fn("LENGTH", [value]);
9795
- var trim = (value, chars) => chars === void 0 ? fn("TRIM", [value]) : fn("TRIM", [value, chars]);
9796
- var ltrim = (value) => fn("LTRIM", [value]);
9797
- var rtrim = (value) => fn("RTRIM", [value]);
9807
+ var charLength = (value) => nfn("CHAR_LENGTH", [value]);
9808
+ var length = (value) => nfn("LENGTH", [value]);
9809
+ var trim = (value, chars) => chars === void 0 ? sfn("TRIM", [value]) : sfn("TRIM", [value, chars]);
9810
+ var ltrim = (value) => sfn("LTRIM", [value]);
9811
+ var rtrim = (value) => sfn("RTRIM", [value]);
9798
9812
  var concat = (...args) => {
9799
9813
  if (args.length < 2) throw new Error("concat() expects at least 2 arguments");
9800
- return fn("CONCAT", args);
9814
+ return sfn("CONCAT", args);
9801
9815
  };
9802
9816
  var concatWs = (separator, ...args) => {
9803
9817
  if (args.length < 1) throw new Error("concatWs() expects at least 2 arguments including the separator");
9804
- return fn("CONCAT_WS", [separator, ...args]);
9805
- };
9806
- var substr = (value, start, length2) => length2 === void 0 ? fn("SUBSTR", [value, start]) : fn("SUBSTR", [value, start, length2]);
9807
- var left = (value, len) => fn("LEFT", [value, len]);
9808
- var right = (value, len) => fn("RIGHT", [value, len]);
9809
- var position = (substring, value) => fn("POSITION", [substring, value]);
9810
- var instr = (value, substring) => fn("INSTR", [value, substring]);
9811
- var locate = (substring, value, start) => start === void 0 ? fn("LOCATE", [substring, value]) : fn("LOCATE", [substring, value, start]);
9812
- var replace = (value, search, replacement) => fn("REPLACE", [value, search, replacement]);
9813
- var repeat = (value, count2) => fn("REPEAT", [value, count2]);
9814
- var lpad = (value, len, pad) => fn("LPAD", [value, len, pad]);
9815
- var rpad = (value, len, pad) => fn("RPAD", [value, len, pad]);
9816
- var space = (count2) => fn("SPACE", [count2]);
9817
- var reverse = (value) => fn("REVERSE", [value]);
9818
- var initcap = (value) => fn("INITCAP", [value]);
9819
- var md5 = (value) => fn("MD5", [value]);
9820
- var sha1 = (value) => fn("SHA1", [value]);
9821
- var sha2 = (value, bits) => fn("SHA2", [value, bits]);
9822
- var bitLength = (value) => fn("BIT_LENGTH", [value]);
9823
- var octetLength = (value) => fn("OCTET_LENGTH", [value]);
9824
- var chr = (code) => fn("CHR", [code]);
9818
+ return sfn("CONCAT_WS", [separator, ...args]);
9819
+ };
9820
+ var substr = (value, start, length2) => length2 === void 0 ? sfn("SUBSTR", [value, start]) : sfn("SUBSTR", [value, start, length2]);
9821
+ var left = (value, len) => sfn("LEFT", [value, len]);
9822
+ var right = (value, len) => sfn("RIGHT", [value, len]);
9823
+ var position = (substring, value) => nfn("POSITION", [substring, value]);
9824
+ var instr = (value, substring) => nfn("INSTR", [value, substring]);
9825
+ var locate = (substring, value, start) => start === void 0 ? nfn("LOCATE", [substring, value]) : nfn("LOCATE", [substring, value, start]);
9826
+ var replace = (value, search, replacement) => sfn("REPLACE", [value, search, replacement]);
9827
+ var repeat = (value, count2) => sfn("REPEAT", [value, count2]);
9828
+ var lpad = (value, len, pad) => sfn("LPAD", [value, len, pad]);
9829
+ var rpad = (value, len, pad) => sfn("RPAD", [value, len, pad]);
9830
+ var space = (count2) => sfn("SPACE", [count2]);
9831
+ var reverse = (value) => sfn("REVERSE", [value]);
9832
+ var initcap = (value) => sfn("INITCAP", [value]);
9833
+ var md5 = (value) => sfn("MD5", [value]);
9834
+ var sha1 = (value) => sfn("SHA1", [value]);
9835
+ var sha2 = (value, bits) => sfn("SHA2", [value, bits]);
9836
+ var bitLength = (value) => nfn("BIT_LENGTH", [value]);
9837
+ var octetLength = (value) => nfn("OCTET_LENGTH", [value]);
9838
+ var chr = (code) => sfn("CHR", [code]);
9825
9839
 
9826
9840
  // src/core/ddl/introspect/functions/mssql.ts
9827
9841
  var isColumnReference = (value) => typeof value === "object" && value !== null && !("type" in value) && "name" in value && typeof value.name === "string";
@@ -10350,38 +10364,39 @@ var fn3 = (key, args) => ({
10350
10364
  fn: key,
10351
10365
  args: args.map(toOperand3)
10352
10366
  });
10353
- var abs = (value) => fn3("ABS", [value]);
10354
- var acos = (value) => fn3("ACOS", [value]);
10355
- var asin = (value) => fn3("ASIN", [value]);
10356
- var atan = (value) => fn3("ATAN", [value]);
10357
- var atan2 = (y, x) => fn3("ATAN2", [y, x]);
10358
- var ceil = (value) => fn3("CEIL", [value]);
10359
- var ceiling = (value) => fn3("CEILING", [value]);
10360
- var cos = (value) => fn3("COS", [value]);
10361
- var cot = (value) => fn3("COT", [value]);
10362
- var degrees = (value) => fn3("DEGREES", [value]);
10363
- var exp = (value) => fn3("EXP", [value]);
10364
- var floor = (value) => fn3("FLOOR", [value]);
10365
- var ln = (value) => fn3("LN", [value]);
10366
- var log = (value) => fn3("LOG", [value]);
10367
- var log10 = (value) => fn3("LOG10", [value]);
10368
- var logBase = (base, value) => fn3("LOG_BASE", [base, value]);
10369
- var mod = (x, y) => fn3("MOD", [x, y]);
10370
- var pi = () => fn3("PI", []);
10371
- var power = (x, y) => fn3("POWER", [x, y]);
10372
- var pow = (x, y) => fn3("POW", [x, y]);
10373
- var radians = (value) => fn3("RADIANS", [value]);
10374
- var random = () => fn3("RANDOM", []);
10375
- var rand = () => fn3("RAND", []);
10376
- var round = (value, decimals) => decimals === void 0 ? fn3("ROUND", [value]) : fn3("ROUND", [value, decimals]);
10377
- var sign = (value) => fn3("SIGN", [value]);
10378
- var sin = (value) => fn3("SIN", [value]);
10379
- var sqrt = (value) => fn3("SQRT", [value]);
10380
- var tan = (value) => fn3("TAN", [value]);
10381
- var trunc = (value, decimals) => decimals === void 0 ? fn3("TRUNC", [value]) : fn3("TRUNC", [value, decimals]);
10382
- var truncate = (value, decimals) => fn3("TRUNCATE", [value, decimals]);
10383
- var log2 = (value) => fn3("LOG2", [value]);
10384
- var cbrt = (value) => fn3("CBRT", [value]);
10367
+ var nfn2 = (key, args) => asType(fn3(key, args));
10368
+ var abs = (value) => nfn2("ABS", [value]);
10369
+ var acos = (value) => nfn2("ACOS", [value]);
10370
+ var asin = (value) => nfn2("ASIN", [value]);
10371
+ var atan = (value) => nfn2("ATAN", [value]);
10372
+ var atan2 = (y, x) => nfn2("ATAN2", [y, x]);
10373
+ var ceil = (value) => nfn2("CEIL", [value]);
10374
+ var ceiling = (value) => nfn2("CEILING", [value]);
10375
+ var cos = (value) => nfn2("COS", [value]);
10376
+ var cot = (value) => nfn2("COT", [value]);
10377
+ var degrees = (value) => nfn2("DEGREES", [value]);
10378
+ var exp = (value) => nfn2("EXP", [value]);
10379
+ var floor = (value) => nfn2("FLOOR", [value]);
10380
+ var ln = (value) => nfn2("LN", [value]);
10381
+ var log = (value) => nfn2("LOG", [value]);
10382
+ var log10 = (value) => nfn2("LOG10", [value]);
10383
+ var logBase = (base, value) => nfn2("LOG_BASE", [base, value]);
10384
+ var mod = (x, y) => nfn2("MOD", [x, y]);
10385
+ var pi = () => nfn2("PI", []);
10386
+ var power = (x, y) => nfn2("POWER", [x, y]);
10387
+ var pow = (x, y) => nfn2("POW", [x, y]);
10388
+ var radians = (value) => nfn2("RADIANS", [value]);
10389
+ var random = () => nfn2("RANDOM", []);
10390
+ var rand = () => nfn2("RAND", []);
10391
+ var round = (value, decimals) => decimals === void 0 ? nfn2("ROUND", [value]) : nfn2("ROUND", [value, decimals]);
10392
+ var sign = (value) => nfn2("SIGN", [value]);
10393
+ var sin = (value) => nfn2("SIN", [value]);
10394
+ var sqrt = (value) => nfn2("SQRT", [value]);
10395
+ var tan = (value) => nfn2("TAN", [value]);
10396
+ var trunc = (value, decimals) => decimals === void 0 ? nfn2("TRUNC", [value]) : nfn2("TRUNC", [value, decimals]);
10397
+ var truncate = (value, decimals) => nfn2("TRUNCATE", [value, decimals]);
10398
+ var log2 = (value) => nfn2("LOG2", [value]);
10399
+ var cbrt = (value) => nfn2("CBRT", [value]);
10385
10400
 
10386
10401
  // src/core/functions/datetime.ts
10387
10402
  var isColumnDef3 = (val) => !!val && typeof val === "object" && "type" in val && "name" in val;
@@ -10396,31 +10411,34 @@ var fn4 = (key, args) => ({
10396
10411
  fn: key,
10397
10412
  args: args.map(toOperand4)
10398
10413
  });
10399
- var now = () => fn4("NOW", []);
10400
- var currentDate = () => fn4("CURRENT_DATE", []);
10401
- var currentTime = () => fn4("CURRENT_TIME", []);
10402
- var utcNow = () => fn4("UTC_NOW", []);
10403
- var localTime = () => fn4("LOCALTIME", []);
10404
- var localTimestamp = () => fn4("LOCALTIMESTAMP", []);
10405
- var extract = (part, date) => fn4("EXTRACT", [part, date]);
10406
- var year = (date) => fn4("YEAR", [date]);
10407
- var month = (date) => fn4("MONTH", [date]);
10408
- var day = (date) => fn4("DAY", [date]);
10409
- var dateAdd = (date, interval, unit) => fn4("DATE_ADD", [date, interval, unit]);
10410
- var dateSub = (date, interval, unit) => fn4("DATE_SUB", [date, interval, unit]);
10411
- var dateDiff = (date1, date2) => fn4("DATE_DIFF", [date1, date2]);
10412
- var dateFormat = (date, format) => fn4("DATE_FORMAT", [date, format]);
10413
- var unixTimestamp = () => fn4("UNIX_TIMESTAMP", []);
10414
- var fromUnixTime = (timestamp) => fn4("FROM_UNIXTIME", [timestamp]);
10415
- var endOfMonth = (date) => fn4("END_OF_MONTH", [date]);
10416
- var dayOfWeek = (date) => fn4("DAY_OF_WEEK", [date]);
10417
- var weekOfYear = (date) => fn4("WEEK_OF_YEAR", [date]);
10418
- var dateTrunc = (part, date) => fn4("DATE_TRUNC", [part, date]);
10419
- var age = (timestamp, baseTimestamp) => baseTimestamp === void 0 ? fn4("AGE", [timestamp]) : fn4("AGE", [timestamp, baseTimestamp]);
10420
- var hour = (date) => fn4("HOUR", [date]);
10421
- var minute = (date) => fn4("MINUTE", [date]);
10422
- var second = (date) => fn4("SECOND", [date]);
10423
- var quarter = (date) => fn4("QUARTER", [date]);
10414
+ var dfn = (key, args) => asType(fn4(key, args));
10415
+ var nfn3 = (key, args) => asType(fn4(key, args));
10416
+ var sfn2 = (key, args) => asType(fn4(key, args));
10417
+ var now = () => dfn("NOW", []);
10418
+ var currentDate = () => dfn("CURRENT_DATE", []);
10419
+ var currentTime = () => dfn("CURRENT_TIME", []);
10420
+ var utcNow = () => dfn("UTC_NOW", []);
10421
+ var localTime = () => dfn("LOCALTIME", []);
10422
+ var localTimestamp = () => dfn("LOCALTIMESTAMP", []);
10423
+ var extract = (part, date) => nfn3("EXTRACT", [part, date]);
10424
+ var year = (date) => nfn3("YEAR", [date]);
10425
+ var month = (date) => nfn3("MONTH", [date]);
10426
+ var day = (date) => nfn3("DAY", [date]);
10427
+ var dateAdd = (date, interval, unit) => dfn("DATE_ADD", [date, interval, unit]);
10428
+ var dateSub = (date, interval, unit) => dfn("DATE_SUB", [date, interval, unit]);
10429
+ var dateDiff = (date1, date2) => nfn3("DATE_DIFF", [date1, date2]);
10430
+ var dateFormat = (date, format) => sfn2("DATE_FORMAT", [date, format]);
10431
+ var unixTimestamp = () => nfn3("UNIX_TIMESTAMP", []);
10432
+ var fromUnixTime = (timestamp) => dfn("FROM_UNIXTIME", [timestamp]);
10433
+ var endOfMonth = (date) => dfn("END_OF_MONTH", [date]);
10434
+ var dayOfWeek = (date) => nfn3("DAY_OF_WEEK", [date]);
10435
+ var weekOfYear = (date) => nfn3("WEEK_OF_YEAR", [date]);
10436
+ var dateTrunc = (part, date) => dfn("DATE_TRUNC", [part, date]);
10437
+ var age = (timestamp, baseTimestamp) => baseTimestamp === void 0 ? sfn2("AGE", [timestamp]) : sfn2("AGE", [timestamp, baseTimestamp]);
10438
+ var hour = (date) => nfn3("HOUR", [date]);
10439
+ var minute = (date) => nfn3("MINUTE", [date]);
10440
+ var second = (date) => nfn3("SECOND", [date]);
10441
+ var quarter = (date) => nfn3("QUARTER", [date]);
10424
10442
 
10425
10443
  // src/core/functions/control-flow.ts
10426
10444
  var isColumnDef4 = (val) => !!val && typeof val === "object" && "type" in val && "name" in val;
@@ -10435,18 +10453,19 @@ var fn5 = (key, args) => ({
10435
10453
  fn: key,
10436
10454
  args: args.map(toOperand5)
10437
10455
  });
10456
+ var afn = (key, args) => asType(fn5(key, args));
10438
10457
  var coalesce = (...args) => {
10439
10458
  if (args.length < 2) throw new Error("coalesce() expects at least 2 arguments");
10440
- return fn5("COALESCE", args);
10459
+ return afn("COALESCE", args);
10441
10460
  };
10442
- var nullif = (val1, val2) => fn5("NULLIF", [val1, val2]);
10461
+ var nullif = (val1, val2) => afn("NULLIF", [val1, val2]);
10443
10462
  var greatest = (...args) => {
10444
10463
  if (args.length < 2) throw new Error("greatest() expects at least 2 arguments");
10445
- return fn5("GREATEST", args);
10464
+ return afn("GREATEST", args);
10446
10465
  };
10447
10466
  var least = (...args) => {
10448
10467
  if (args.length < 2) throw new Error("least() expects at least 2 arguments");
10449
- return fn5("LEAST", args);
10468
+ return afn("LEAST", args);
10450
10469
  };
10451
10470
  var ifNull = (val, defaultValue) => coalesce(val, defaultValue);
10452
10471
 
@@ -10463,10 +10482,12 @@ var fn6 = (key, args) => ({
10463
10482
  fn: key,
10464
10483
  args: args.map(toOperand6)
10465
10484
  });
10466
- var jsonLength = (target, path) => path === void 0 ? fn6("JSON_LENGTH", [target]) : fn6("JSON_LENGTH", [target, path]);
10467
- var jsonSet = (target, path, value) => fn6("JSON_SET", [target, path, value]);
10468
- var jsonArrayAgg = (value) => fn6("JSON_ARRAYAGG", [value]);
10469
- var jsonContains = (target, candidate, path) => path === void 0 ? fn6("JSON_CONTAINS", [target, candidate]) : fn6("JSON_CONTAINS", [target, candidate, path]);
10485
+ var nfn4 = (key, args) => asType(fn6(key, args));
10486
+ var afn2 = (key, args) => asType(fn6(key, args));
10487
+ var jsonLength = (target, path) => path === void 0 ? nfn4("JSON_LENGTH", [target]) : nfn4("JSON_LENGTH", [target, path]);
10488
+ var jsonSet = (target, path, value) => afn2("JSON_SET", [target, path, value]);
10489
+ var jsonArrayAgg = (value) => afn2("JSON_ARRAYAGG", [value]);
10490
+ var jsonContains = (target, candidate, path) => path === void 0 ? afn2("JSON_CONTAINS", [target, candidate]) : afn2("JSON_CONTAINS", [target, candidate, path]);
10470
10491
 
10471
10492
  // src/core/functions/array.ts
10472
10493
  var isColumnDef6 = (val) => !!val && typeof val === "object" && "type" in val && "name" in val;
@@ -10481,7 +10502,8 @@ var fn7 = (key, args) => ({
10481
10502
  fn: key,
10482
10503
  args: args.map(toOperand7)
10483
10504
  });
10484
- var arrayAppend = (array, value) => fn7("ARRAY_APPEND", [array, value]);
10505
+ var afn3 = (key, args) => asType(fn7(key, args));
10506
+ var arrayAppend = (array, value) => afn3("ARRAY_APPEND", [array, value]);
10485
10507
 
10486
10508
  // src/orm/als.ts
10487
10509
  var AsyncLocalStorage = class {