drizzle-orm 0.10.4 → 0.10.8
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 +12 -2
- package/builders/aggregators/deleteAggregator.d.ts +5 -1
- package/builders/aggregators/deleteAggregator.js +5 -2
- package/builders/aggregators/insertAggregator.d.ts +5 -1
- package/builders/aggregators/insertAggregator.js +18 -9
- package/builders/aggregators/selectAggregator.d.ts +6 -1
- package/builders/aggregators/selectAggregator.js +10 -6
- package/builders/aggregators/updateAggregator.d.ts +5 -1
- package/builders/aggregators/updateAggregator.js +9 -3
- package/builders/highLvlBuilders/deleteRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/insertRequestBuilder.js +5 -2
- package/builders/highLvlBuilders/selectRequestBuilder.js +7 -2
- package/builders/highLvlBuilders/updateRequestBuilder.js +6 -2
- package/builders/joinBuilders/builders/abstractJoinBuilder.js +7 -3
- package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +4 -1
- package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/insertInto.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectFrom.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/selectJoined.d.ts +4 -1
- package/builders/lowLvlBuilders/selects/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/updateIn.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSelect.d.ts +4 -1
- package/builders/lowLvlBuilders/updates/whereSet.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.d.ts +4 -1
- package/builders/requestBuilders/updates/combine.js +8 -3
- package/builders/requestBuilders/updates/increment.d.ts +4 -1
- package/builders/requestBuilders/updates/increment.js +4 -1
- package/builders/requestBuilders/updates/setObjects.d.ts +4 -1
- package/builders/requestBuilders/updates/setObjects.js +5 -1
- package/builders/requestBuilders/updates/updates.d.ts +4 -1
- package/builders/requestBuilders/where/and.d.ts +6 -1
- package/builders/requestBuilders/where/and.js +9 -3
- package/builders/requestBuilders/where/const.d.ts +4 -1
- package/builders/requestBuilders/where/const.js +6 -4
- package/builders/requestBuilders/where/constArray.d.ts +4 -1
- package/builders/requestBuilders/where/constArray.js +11 -5
- package/builders/requestBuilders/where/eqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/eqWhere.js +6 -1
- package/builders/requestBuilders/where/greater.d.ts +6 -1
- package/builders/requestBuilders/where/greater.js +6 -1
- package/builders/requestBuilders/where/greaterEq.d.ts +6 -1
- package/builders/requestBuilders/where/greaterEq.js +6 -1
- package/builders/requestBuilders/where/in.d.ts +6 -1
- package/builders/requestBuilders/where/in.js +6 -1
- package/builders/requestBuilders/where/isNull.d.ts +6 -1
- package/builders/requestBuilders/where/isNull.js +5 -1
- package/builders/requestBuilders/where/less.d.ts +6 -1
- package/builders/requestBuilders/where/less.js +6 -1
- package/builders/requestBuilders/where/lessEq.d.ts +6 -1
- package/builders/requestBuilders/where/lessEq.js +6 -1
- package/builders/requestBuilders/where/like.d.ts +6 -1
- package/builders/requestBuilders/where/like.js +6 -1
- package/builders/requestBuilders/where/notEqWhere.d.ts +6 -1
- package/builders/requestBuilders/where/notEqWhere.js +6 -1
- package/builders/requestBuilders/where/or.d.ts +6 -1
- package/builders/requestBuilders/where/or.js +9 -3
- package/builders/requestBuilders/where/rawWhere.d.ts +4 -1
- package/builders/requestBuilders/where/rawWhere.js +2 -1
- package/builders/requestBuilders/where/var.d.ts +6 -1
- package/builders/requestBuilders/where/var.js +4 -1
- package/builders/requestBuilders/where/where.d.ts +6 -1
- package/builders/requestBuilders/where/where.js +1 -0
- package/columns/types/pgEnum.js +1 -1
- package/columns/types/pgJsonb.js +3 -1
- package/columns/types/pgText.js +1 -1
- package/columns/types/pgTimestamp.js +1 -1
- package/columns/types/pgTimestamptz.js +1 -1
- package/columns/types/pgVarChar.js +1 -1
- package/db/session.d.ts +2 -2
- package/db/session.js +2 -2
- package/docs/cases/simple_delete.js +5 -3
- package/docs/cases/simple_insert.js +7 -9
- package/docs/cases/simple_join.js +9 -7
- package/docs/cases/simple_select.js +4 -2
- package/docs/cases/simple_update.js +5 -2
- package/docs/tables/usersTable.d.ts +11 -10
- package/docs/tables/usersTable.js +5 -4
- package/mappers/responseMapper.js +2 -2
- package/package.json +1 -1
- package/serializer/serializer.js +4 -1
- package/test.js +47 -13
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
|
-
const create_1 = require("../../builders/lowLvlBuilders/create");
|
|
5
3
|
const dbConnector_1 = require("../../db/dbConnector");
|
|
6
4
|
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
7
5
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
@@ -10,19 +8,19 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
10
8
|
(async () => {
|
|
11
9
|
try {
|
|
12
10
|
const db = await new dbConnector_1.default()
|
|
13
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
11
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
14
12
|
.connect();
|
|
15
13
|
const usersTable = new usersTable_1.default(db);
|
|
16
14
|
const citiesTable = new citiesTable_1.default(db);
|
|
17
15
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
18
|
-
await db.session().execute(
|
|
19
|
-
await db.session().execute(
|
|
20
|
-
await db.session().execute(
|
|
16
|
+
// await db.session().execute(Create.table(usersTable).build());
|
|
17
|
+
// await db.session().execute(Create.table(citiesTable).build());
|
|
18
|
+
// await db.session().execute(Create.table(userGroupsTable).build());
|
|
21
19
|
db.useLogger(new consoleLogger_1.default());
|
|
22
20
|
await usersTable.insert({
|
|
23
21
|
decimalField: 12.4,
|
|
24
22
|
createdAt: new Date(),
|
|
25
|
-
|
|
23
|
+
role: 'foo',
|
|
26
24
|
}).execute();
|
|
27
25
|
const insertedCities = await citiesTable.insert({
|
|
28
26
|
foundationDate: new Date(),
|
|
@@ -41,11 +39,11 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
41
39
|
const conflictInsertedUsers = await usersTable.insertMany([{
|
|
42
40
|
decimalField: 12.4,
|
|
43
41
|
createdAt: new Date(),
|
|
44
|
-
|
|
42
|
+
role: 'foo',
|
|
45
43
|
}, {
|
|
46
44
|
decimalField: 32.4,
|
|
47
45
|
createdAt: new Date(),
|
|
48
|
-
|
|
46
|
+
role: 'foo',
|
|
49
47
|
phone: '+1808',
|
|
50
48
|
}])
|
|
51
49
|
.onConflict((table) => table.phoneIndex, { isArchived: true }).all();
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
5
5
|
const __1 = require("../..");
|
|
6
6
|
const builders_1 = require("../../builders");
|
|
7
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
7
8
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
8
9
|
const userGroupsTable_1 = require("../tables/userGroupsTable");
|
|
9
10
|
const usersTable_1 = require("../tables/usersTable");
|
|
@@ -12,24 +13,25 @@ const usersToUserGroups_1 = require("../tables/usersToUserGroups");
|
|
|
12
13
|
var _a, _b, _c, _d, _e, _f;
|
|
13
14
|
try {
|
|
14
15
|
const db = await new __1.DbConnector()
|
|
15
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
16
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
16
17
|
.connect();
|
|
18
|
+
db.useLogger(new consoleLogger_1.default());
|
|
17
19
|
const usersTable = new usersTable_1.default(db);
|
|
18
20
|
const citiesTable = new citiesTable_1.default(db);
|
|
19
21
|
const usersToUserGroupsTable = new usersToUserGroups_1.default(db);
|
|
20
22
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
21
|
-
await db.session().execute(
|
|
22
|
-
await db.session().execute(
|
|
23
|
-
await db.session().execute(
|
|
24
|
-
await db.session().execute(
|
|
23
|
+
// await db.session().execute(Create.table(usersTable).build());
|
|
24
|
+
// await db.session().execute(Create.table(citiesTable).build());
|
|
25
|
+
// await db.session().execute(Create.table(userGroupsTable).build());
|
|
26
|
+
// await db.session().execute(Create.table(usersToUserGroupsTable).build());
|
|
25
27
|
const userRes = await usersTable.insertMany([{
|
|
26
28
|
decimalField: 4.2,
|
|
27
29
|
createdAt: new Date(),
|
|
28
|
-
|
|
30
|
+
role: 'foo',
|
|
29
31
|
}, {
|
|
30
32
|
decimalField: 5.8,
|
|
31
33
|
createdAt: new Date(),
|
|
32
|
-
|
|
34
|
+
role: 'foo',
|
|
33
35
|
}]).all();
|
|
34
36
|
const citiesRes = await citiesTable.insertMany([{
|
|
35
37
|
foundationDate: new Date(),
|
|
@@ -5,17 +5,19 @@ const __1 = require("../..");
|
|
|
5
5
|
const builders_1 = require("../../builders");
|
|
6
6
|
const order_1 = require("../../builders/highLvlBuilders/order");
|
|
7
7
|
const static_1 = require("../../builders/requestBuilders/where/static");
|
|
8
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
8
9
|
const usersTable_1 = require("../tables/usersTable");
|
|
9
10
|
(async () => {
|
|
10
11
|
try {
|
|
11
12
|
const db = await new __1.DbConnector()
|
|
12
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
13
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
13
14
|
.connect();
|
|
14
15
|
const usersTable = new usersTable_1.default(db);
|
|
16
|
+
db.useLogger(new consoleLogger_1.default());
|
|
15
17
|
// select all
|
|
16
18
|
const allSelect = await usersTable.select().all();
|
|
17
19
|
// select first
|
|
18
|
-
const firstSelect = await usersTable.select().
|
|
20
|
+
const firstSelect = await usersTable.select().all();
|
|
19
21
|
// select using filters
|
|
20
22
|
const eqSelect = await usersTable.select().where(builders_1.eq(usersTable.phone, 'hello')).all();
|
|
21
23
|
const andSelect = await usersTable.select().where(builders_1.and([builders_1.eq(usersTable.phone, 'hello')])).all();
|
|
@@ -3,14 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
4
4
|
const __1 = require("../..");
|
|
5
5
|
const builders_1 = require("../../builders");
|
|
6
|
+
const consoleLogger_1 = require("../../logger/consoleLogger");
|
|
6
7
|
const citiesTable_1 = require("../tables/citiesTable");
|
|
7
8
|
const userGroupsTable_1 = require("../tables/userGroupsTable");
|
|
8
9
|
const usersTable_1 = require("../tables/usersTable");
|
|
9
10
|
(async () => {
|
|
10
11
|
try {
|
|
11
12
|
const db = await new __1.DbConnector()
|
|
12
|
-
.connectionString('postgresql://postgres@127.0.0.1/
|
|
13
|
+
.connectionString('postgresql://postgres@127.0.0.1/migrator')
|
|
13
14
|
.connect();
|
|
15
|
+
db.useLogger(new consoleLogger_1.default());
|
|
14
16
|
const usersTable = new usersTable_1.default(db);
|
|
15
17
|
const citiesTable = new citiesTable_1.default(db);
|
|
16
18
|
const userGroupsTable = new userGroupsTable_1.default(db);
|
|
@@ -22,10 +24,11 @@ const usersTable_1 = require("../tables/usersTable");
|
|
|
22
24
|
.where(builders_1.eq(citiesTable.location, 'USA'))
|
|
23
25
|
.set({ metadata: { population: 1, connection: 'first' } })
|
|
24
26
|
.all();
|
|
27
|
+
console.log(updatedCities);
|
|
25
28
|
const updatedUserGroup = await userGroupsTable.update()
|
|
26
29
|
.where(builders_1.eq(userGroupsTable.id, 1))
|
|
27
30
|
.set({ description: 'updated description' })
|
|
28
|
-
.
|
|
31
|
+
.all();
|
|
29
32
|
}
|
|
30
33
|
catch (e) {
|
|
31
34
|
console.log(e);
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import AbstractTable from '../../tables/abstractTable';
|
|
2
|
-
export declare const rolesEnum: import("../../types/type").default<"
|
|
2
|
+
export declare const rolesEnum: import("../../types/type").default<"foo" | "bar" | "baz">;
|
|
3
3
|
export default class UsersTable extends AbstractTable<UsersTable> {
|
|
4
|
-
id: import("
|
|
5
|
-
fullName: import("
|
|
6
|
-
phone: import("
|
|
7
|
-
media: import("
|
|
8
|
-
decimalField: import("
|
|
9
|
-
bigIntField: import("
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
id: import("../../columns/column").Column<import("../../columns/types/pgSerial").default, true, true, this>;
|
|
5
|
+
fullName: import("../../columns/column").Column<import("../..").PgText, true, false, this>;
|
|
6
|
+
phone: import("../../columns/column").Column<import("../..").PgVarChar, true, false, this>;
|
|
7
|
+
media: import("../../columns/column").Column<import("../..").PgJsonb<string[]>, true, false, this>;
|
|
8
|
+
decimalField: import("../../columns/column").Column<import("../..").PgBigDecimal, false, false, this>;
|
|
9
|
+
bigIntField: import("../../columns/column").Column<import("../..").PgBigInt, true, true, this>;
|
|
10
|
+
role: import("../../columns/column").Column<import("../../columns/types/pgEnum").default<"foo" | "bar" | "baz">, false, false, this>;
|
|
11
|
+
createdAt: import("../../columns/column").Column<import("../..").PgTimestamp, false, false, this>;
|
|
12
|
+
updatedAt: import("../../columns/column").Column<import("../..").PgTimestamp, true, false, this>;
|
|
13
|
+
isArchived: import("../../columns/column").Column<import("../..").PgBoolean, true, false, this>;
|
|
13
14
|
phoneFullNameIndex: import("../../indexes/tableIndex").default;
|
|
14
15
|
phoneIndex: import("../../indexes/tableIndex").default;
|
|
15
16
|
tableName(): string;
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.rolesEnum = void 0;
|
|
4
4
|
/* eslint-disable max-classes-per-file */
|
|
5
5
|
// import { Defaults } from '../../columns/column';
|
|
6
|
+
const column_1 = require("../../columns/column");
|
|
6
7
|
const abstractTable_1 = require("../../tables/abstractTable");
|
|
7
8
|
const type_1 = require("../../types/type");
|
|
8
9
|
// import { rolesEnum } from '../types/rolesType';
|
|
9
|
-
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['
|
|
10
|
+
exports.rolesEnum = type_1.createEnum({ alias: 'test-enum', values: ['foo', 'bar', 'baz'] });
|
|
10
11
|
class UsersTable extends abstractTable_1.default {
|
|
11
12
|
constructor() {
|
|
12
13
|
super(...arguments);
|
|
@@ -16,10 +17,10 @@ class UsersTable extends abstractTable_1.default {
|
|
|
16
17
|
this.media = this.jsonb('media');
|
|
17
18
|
this.decimalField = this.decimal('test', { precision: 100, scale: 2 }).notNull();
|
|
18
19
|
this.bigIntField = this.bigint('test1', 'max_bytes_53');
|
|
19
|
-
|
|
20
|
+
this.role = this.type(exports.rolesEnum, 'name_in_table').notNull();
|
|
20
21
|
this.createdAt = this.timestamp('created_at').notNull();
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
// public createdAtWithTimezone = this.timestamptz('created_at');
|
|
23
|
+
this.updatedAt = this.timestamp('updated_at').defaultValue(column_1.Defaults.CURRENT_TIMESTAMP);
|
|
23
24
|
this.isArchived = this.bool('is_archived').defaultValue(false);
|
|
24
25
|
this.phoneFullNameIndex = this.index([this.phone, this.fullName]);
|
|
25
26
|
this.phoneIndex = this.uniqueIndex(this.phone);
|
|
@@ -13,7 +13,7 @@ QueryResponseMapper.map = (mappedServiceToDb, queryResult, joinId) => {
|
|
|
13
13
|
const column = mappedServiceToDb[key];
|
|
14
14
|
const alias = `${column.getAlias()}${joinId ? `_${joinId}` : ''}`;
|
|
15
15
|
const value = column.getColumnType().selectStrategy(row[alias]);
|
|
16
|
-
mappedRow[key] = value;
|
|
16
|
+
mappedRow[key] = value === null ? undefined : value;
|
|
17
17
|
});
|
|
18
18
|
response.push(mappedRow);
|
|
19
19
|
});
|
|
@@ -27,7 +27,7 @@ QueryResponseMapper.partialMap = (partial, queryResult, joinId) => {
|
|
|
27
27
|
const column = partial[key];
|
|
28
28
|
const alias = `${column.getAlias()}${joinId ? `_${joinId}` : ''}`;
|
|
29
29
|
const value = column.getColumnType().selectStrategy(row[alias]);
|
|
30
|
-
mappedRow[key] = value;
|
|
30
|
+
mappedRow[key] = value === null ? undefined : value;
|
|
31
31
|
});
|
|
32
32
|
response.push(mappedRow);
|
|
33
33
|
});
|
package/package.json
CHANGED
package/serializer/serializer.js
CHANGED
|
@@ -39,9 +39,12 @@ class MigrationSerializer {
|
|
|
39
39
|
type: value.getColumnType().getDbName(),
|
|
40
40
|
primaryKey: !!value.primaryKeyName,
|
|
41
41
|
// unique: !!value.uniqueKeyName,
|
|
42
|
-
default: value.getDefaultValue() === null ? undefined : value.getDefaultValue(),
|
|
42
|
+
// default: value.getDefaultValue() === null ? undefined : value.getDefaultValue(),
|
|
43
43
|
notNull: !value.isNullableFlag,
|
|
44
44
|
};
|
|
45
|
+
if (value.getDefaultValue() !== undefined && value.getDefaultValue() !== null) {
|
|
46
|
+
columnToReturn[value.getColumnName()].default = value.getDefaultValue();
|
|
47
|
+
}
|
|
45
48
|
if (value.uniqueKeyName) {
|
|
46
49
|
const indexName = `${value.getParent().tableName()}_${value.getColumnName()}_index`;
|
|
47
50
|
const indexColumnToReturn = {};
|
package/test.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const _1 = require(".");
|
|
4
|
-
const builders_1 = require("./builders");
|
|
5
4
|
const citiesTable_1 = require("./docs/tables/citiesTable");
|
|
6
5
|
const usersTable_1 = require("./docs/tables/usersTable");
|
|
7
6
|
const consoleLogger_1 = require("./logger/consoleLogger");
|
|
@@ -27,18 +26,53 @@ const fromTypeFile = (filepath) => {
|
|
|
27
26
|
db.useLogger(new consoleLogger_1.default());
|
|
28
27
|
const table = new usersTable_1.default(db);
|
|
29
28
|
const citiesTable = new citiesTable_1.default(db);
|
|
30
|
-
const res = await table.
|
|
31
|
-
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
// ).execute();
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
// const res = await table.insert({
|
|
30
|
+
// decimalField: 12.4,
|
|
31
|
+
// createdAt: new Date(),
|
|
32
|
+
// }).all();
|
|
33
|
+
// console.log(res);
|
|
34
|
+
const res1 = await citiesTable.select().leftJoin(usersTable_1.default, (cities) => cities.userId, (users) => users.id).execute();
|
|
35
|
+
// const res: QueryResult<any> = await db.session().execute('SELECT * FROM users');
|
|
36
|
+
// eslint-disable-next-line array-callback-return
|
|
37
|
+
res1.map((city, user) => {
|
|
38
|
+
console.log(city);
|
|
39
|
+
console.log(user.decimalField);
|
|
40
|
+
});
|
|
41
|
+
// const res = await db.session().execute('SELECT * FROM users WHERE user.id = $1', [1]);
|
|
42
|
+
// await table.update()
|
|
43
|
+
// .where({
|
|
44
|
+
// id: eq(1),
|
|
45
|
+
// })
|
|
46
|
+
// .set({
|
|
47
|
+
// phone: 'hello'
|
|
48
|
+
// })
|
|
49
|
+
// .all();
|
|
50
|
+
// await table.select()
|
|
51
|
+
// .where({
|
|
52
|
+
// and: {
|
|
53
|
+
// id: {
|
|
54
|
+
// eq: 1,
|
|
55
|
+
// },
|
|
56
|
+
// phone: {
|
|
57
|
+
// notEq: 'hello',
|
|
58
|
+
// },
|
|
59
|
+
// },
|
|
60
|
+
// })
|
|
61
|
+
// .all();
|
|
62
|
+
// await table.select()
|
|
63
|
+
// .where({
|
|
64
|
+
// and: {
|
|
65
|
+
// id: eq(1),
|
|
66
|
+
// phone: notEq('hello'),
|
|
67
|
+
// },
|
|
68
|
+
// })
|
|
69
|
+
// .all();
|
|
70
|
+
// await table.select()
|
|
71
|
+
// .where(and([
|
|
72
|
+
// eq(table.id, 1),
|
|
73
|
+
// notEq(table.phone, 'hello'),
|
|
74
|
+
// ]))
|
|
75
|
+
// .all();
|
|
42
76
|
// await table.insertMany([{
|
|
43
77
|
// decimalField: 12.4,
|
|
44
78
|
// createdAt: new Date(),
|