rado 0.2.19 → 0.2.21

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.
@@ -1,3 +1,4 @@
1
+ import { Callable } from '../util/Callable';
1
2
  import { EV, Expr, ExprData } from './Expr';
2
3
  import { Fields } from './Fields';
3
4
  declare const DATA: unique symbol;
@@ -38,7 +39,7 @@ export declare namespace Column {
38
39
  interface ValueColumn<T> extends Expr<T> {
39
40
  <X extends T = T>(): ValueColumn<T extends null ? X | null : X>;
40
41
  }
41
- declare class ValueColumn<T> implements Column<T> {
42
+ declare class ValueColumn<T> extends Callable implements Column<T> {
42
43
  [TYPE]: T;
43
44
  [DATA]: PartialColumnData;
44
45
  constructor(data: PartialColumnData);
@@ -58,7 +59,7 @@ export declare class PrimaryColumn<T, K> extends ValueColumn<PrimaryKey<T, K>> {
58
59
  interface ObjectColumn<T> {
59
60
  <X extends T = T>(): Column<T extends null ? X | null : X> & Fields<X>;
60
61
  }
61
- declare class ObjectColumn<T> implements Column<T> {
62
+ declare class ObjectColumn<T> extends Callable implements Column<T> {
62
63
  [TYPE]: T;
63
64
  [DATA]: PartialColumnData;
64
65
  constructor(data: PartialColumnData);
@@ -76,7 +77,7 @@ type DefaultValue<T> = EV<T> | (() => EV<T>);
76
77
  interface UnTyped {
77
78
  (name: string): UnTyped;
78
79
  }
79
- declare class UnTyped {
80
+ declare class UnTyped extends Callable {
80
81
  [DATA]: PartialColumnData;
81
82
  constructor(data?: PartialColumnData);
82
83
  get nullable(): NullableUnTyped;
@@ -1,5 +1,5 @@
1
1
  // src/define/Column.ts
2
- import { callable } from "../util/Callable.js";
2
+ import { Callable } from "../util/Callable.js";
3
3
  import { Expr, ExprData } from "./Expr.js";
4
4
  var DATA = Symbol("DATA");
5
5
  var TYPE = Symbol("tYPE");
@@ -16,16 +16,11 @@ var Column;
16
16
  Column2.Data = DATA;
17
17
  Column2.Type = TYPE;
18
18
  })(Column || (Column = {}));
19
- var ValueColumn = class {
19
+ var ValueColumn = class extends Callable {
20
20
  [(TYPE, DATA)];
21
21
  constructor(data) {
22
+ super(() => this);
22
23
  this[DATA] = data;
23
- return callable(this, (defaultValue) => {
24
- return new ValueColumn({
25
- ...this[DATA],
26
- defaultValue: createDefaultValue(defaultValue)
27
- });
28
- });
29
24
  }
30
25
  get nullable() {
31
26
  return new ValueColumn({ ...this[DATA], nullable: true });
@@ -67,11 +62,11 @@ var OptionalColumn = class extends ValueColumn {
67
62
  var PrimaryColumn = class extends ValueColumn {
68
63
  [Column.IsPrimary];
69
64
  };
70
- var ObjectColumn = class {
65
+ var ObjectColumn = class extends Callable {
71
66
  [(TYPE, DATA)];
72
67
  constructor(data) {
68
+ super(() => this);
73
69
  this[DATA] = data;
74
- return callable(this, () => this);
75
70
  }
76
71
  get nullable() {
77
72
  return new ObjectColumn({ ...this[DATA], nullable: true });
@@ -89,13 +84,13 @@ var ObjectColumn = class {
89
84
  var OptionalObjectColumn = class extends ObjectColumn {
90
85
  [Column.IsOptional];
91
86
  };
92
- var UnTyped = class {
87
+ var UnTyped = class extends Callable {
93
88
  [DATA];
94
89
  constructor(data = {}) {
95
- this[DATA] = data;
96
- return callable(this, (name) => {
90
+ super((name) => {
97
91
  return new ValueColumn({ ...data, name });
98
92
  });
93
+ this[DATA] = data;
99
94
  }
100
95
  get nullable() {
101
96
  return new UnTyped({ ...this[DATA], nullable: true });
@@ -13,28 +13,16 @@ var {
13
13
  entries,
14
14
  fromEntries,
15
15
  getOwnPropertyDescriptors,
16
- assign,
17
16
  getPrototypeOf,
18
17
  setPrototypeOf,
19
- getOwnPropertyDescriptor,
18
+ defineProperty,
20
19
  getOwnPropertyNames
21
20
  } = Object;
22
- var { ownKeys } = Reflect;
23
21
  var Table;
24
22
  ((Table2) => {
25
23
  Table2.Data = DATA;
26
24
  Table2.Meta = META;
27
25
  })(Table || (Table = {}));
28
- function keysOf(input) {
29
- const methods = [];
30
- while (input = getPrototypeOf(input)) {
31
- const keys2 = ownKeys(input);
32
- for (const key of keys2)
33
- if (typeof key === "string")
34
- methods.push(key);
35
- }
36
- return methods;
37
- }
38
26
  function createTable(data) {
39
27
  const target = Target.Table(data);
40
28
  const call = {
@@ -56,7 +44,6 @@ function createTable(data) {
56
44
  }
57
45
  }[data.name];
58
46
  const cols = keys(data.columns);
59
- const hasKeywords = cols.concat(keysOf(data.definition)).some((name) => name in Function);
60
47
  const row = ExprData.Row(target);
61
48
  const expressions = fromEntries(
62
49
  cols.map((name) => {
@@ -67,46 +54,14 @@ function createTable(data) {
67
54
  })
68
55
  );
69
56
  const toExpr = () => new Expr(row);
70
- const funcNames = getOwnPropertyNames(call);
71
- const ownKeys2 = Array.from(/* @__PURE__ */ new Set([...funcNames, ...cols]));
72
- let res;
73
- if (!hasKeywords) {
74
- res = assign(call, expressions, { [DATA]: data, [Expr.ToExpr]: toExpr });
75
- setPrototypeOf(call, getPrototypeOf(data.definition));
76
- } else {
77
- let get2 = function(key) {
78
- return expressions[key] || data.definition[key];
79
- };
80
- var get = get2;
81
- res = new Proxy(call, {
82
- get(target2, key) {
83
- if (key === DATA)
84
- return data;
85
- if (key === Expr.ToExpr)
86
- return toExpr;
87
- return get2(key);
88
- },
89
- ownKeys(target2) {
90
- return ownKeys2;
91
- },
92
- getOwnPropertyDescriptor(target2, key) {
93
- const value = get2(key);
94
- const descriptor = getOwnPropertyDescriptor(call, key);
95
- if (descriptor)
96
- return {
97
- ...descriptor,
98
- enumerable: cols.includes(key),
99
- value
100
- };
101
- return {
102
- value,
103
- enumerable: true,
104
- configurable: true
105
- };
106
- }
107
- });
108
- }
109
- return res;
57
+ delete call.name;
58
+ delete call.length;
59
+ for (const [key, value] of entries(expressions))
60
+ defineProperty(call, key, { value, enumerable: true, configurable: true });
61
+ defineProperty(call, DATA, { value: data, enumerable: false });
62
+ defineProperty(call, Expr.ToExpr, { value: toExpr, enumerable: false });
63
+ setPrototypeOf(call, getPrototypeOf(data.definition));
64
+ return call;
110
65
  }
111
66
  function table(define) {
112
67
  const names = keys(define);
@@ -3,9 +3,10 @@ import { Expr } from '../define/Expr';
3
3
  import { Query } from '../define/Query';
4
4
  import { SchemaInstructions } from '../define/Schema';
5
5
  import { Table } from '../define/Table';
6
+ import { Callable } from '../util/Callable';
6
7
  import { Formatter } from './Formatter';
7
8
  import { Statement } from './Statement';
8
- declare abstract class DriverBase {
9
+ declare abstract class DriverBase extends Callable {
9
10
  formatter: Formatter;
10
11
  constructor(formatter: Formatter);
11
12
  compile<T extends Array<Expr<any>>, R>(create: (...params: T) => Cursor<R>): [Query<T>, Statement];
@@ -5,14 +5,13 @@ import { ParamData } from "../define/Param.js";
5
5
  import { Query, QueryType } from "../define/Query.js";
6
6
  import { Schema } from "../define/Schema.js";
7
7
  import { Table } from "../define/Table.js";
8
- import { callable } from "../util/Callable.js";
8
+ import { Callable } from "../util/Callable.js";
9
9
  function isTemplateStringsArray(input) {
10
10
  return Boolean(Array.isArray(input) && input.raw);
11
11
  }
12
- var DriverBase = class {
12
+ var DriverBase = class extends Callable {
13
13
  constructor(formatter) {
14
- this.formatter = formatter;
15
- return callable(this, (...args) => {
14
+ super((...args) => {
16
15
  const [input, ...rest] = args;
17
16
  if (input instanceof Cursor && rest.length === 0)
18
17
  return this.executeQuery(input[Cursor.Query]);
@@ -24,6 +23,7 @@ var DriverBase = class {
24
23
  })
25
24
  );
26
25
  });
26
+ this.formatter = formatter;
27
27
  }
28
28
  compile(create) {
29
29
  const { length } = create;
@@ -1 +1,3 @@
1
- export declare function callable(target: any, call: Function): any;
1
+ export declare class Callable {
2
+ constructor(fn: Function);
3
+ }
@@ -1,15 +1,10 @@
1
1
  // src/util/Callable.ts
2
- function callable(target, call) {
3
- return new Proxy(call, {
4
- set(_, prop, value) {
5
- target[prop] = value;
6
- return true;
7
- },
8
- get(_, prop) {
9
- return target[prop];
10
- }
11
- });
12
- }
2
+ var { setPrototypeOf } = Object;
3
+ var Callable = class {
4
+ constructor(fn) {
5
+ return setPrototypeOf(fn, new.target.prototype);
6
+ }
7
+ };
13
8
  export {
14
- callable
9
+ Callable
15
10
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rado",
3
- "version": "0.2.19",
3
+ "version": "0.2.21",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",