Skip to content

Commit

Permalink
store: more unification
Browse files Browse the repository at this point in the history
  • Loading branch information
terrablue committed Jul 21, 2024
1 parent 5634468 commit f15d96b
Show file tree
Hide file tree
Showing 72 changed files with 262 additions and 242 deletions.
3 changes: 3 additions & 0 deletions packages/store/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@
"type": "module",
"exports": {
".": "./src/index.js",
"./*/common": "./src/server/*/common.js",
"./base/*": "./src/base/*.js",
"./sql/*": "./src/sql/*.js",
"./errors/*": "./src/errors/*.js",
"./*": {
"runtime": "./src/server/*/runtime/index.js",
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
1 change: 1 addition & 0 deletions packages/store/src/base/pool.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from "./pool/Pool.js";
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import InvalidValue from "@primate/store/errors/invalid-value";
import InvalidDocument from "@primate/store/errors/invalid-document";
import InvalidValue from "@primate/store/errors/invalid-value";
import NoDocument from "@primate/store/errors/no-document";
import { maybe } from "rcompat/invariant";
import * as O from "rcompat/object";
import { tryreturn } from "rcompat/sync";
import bases from "./bases.js";
import primary from "./primary.js";
import validate from "./validate.js";
import bases from "./wrap/bases.js";
import validate from "./wrap/validate.js";

const transform = to => ({ types, schema, document = {}, path, mode }) =>
O.transform(document, entry => entry
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import modes from "./modes.js";
import modes from "@primate/store/base/modes";

const normalize = string => string.trim() === "" ? undefined : string;

const is_strict = mode => mode === modes.strict;
Expand Down
2 changes: 1 addition & 1 deletion packages/store/src/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import modes from "@primate/store/base/modes";
import memory from "@primate/store/memory";
import { assert } from "rcompat/invariant";
import build from "./build.js";
import modes from "./modes.js";
import route from "./route.js";
import serve from "./serve.js";

Expand Down
1 change: 0 additions & 1 deletion packages/store/src/pool/exports.js

This file was deleted.

2 changes: 1 addition & 1 deletion packages/store/src/serve.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import primary from "@primate/store/base/primary";
import EmptyStoreDirectory from "@primate/store/errors/empty-store-directory";
import InvalidType from "@primate/store/errors/invalid-type";
import NoPrimaryKey from "@primate/store/errors/no-primary-key";
import * as A from "rcompat/array";
import { dim } from "rcompat/colors";
import * as O from "rcompat/object";
import primary from "./primary.js";

const valid_type = ({ base, validate }) =>
base !== undefined && typeof validate === "function";
Expand Down
1 change: 0 additions & 1 deletion packages/store/src/server/common/exports.js

This file was deleted.

3 changes: 0 additions & 3 deletions packages/store/src/server/common/peers.js

This file was deleted.

1 change: 1 addition & 0 deletions packages/store/src/server/json/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const name = "json";
2 changes: 1 addition & 1 deletion packages/store/src/server/json/default/build.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// noop
export default name => async () => {};
export default async () => {};
8 changes: 3 additions & 5 deletions packages/store/src/server/json/default/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import build from "./build.js";
import serve from "../runtime/serve.js";

const name = "json";
import build from "./build.js";

export default ({ database }) => ({
build: build(name),
serve: serve(database),
build,
serve: serve({ database }),
});
23 changes: 23 additions & 0 deletions packages/store/src/server/json/runtime/driver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { File } from "rcompat/fs";
import { is } from "rcompat/invariant";
import * as O from "rcompat/object";

export const connect = async ({ database }) => {
is(database).string();

const path = new File(database);
const db = {
collections: await path.exists() ? await path.json() : {},
};

return {
read(name) {
return db.collections[name] ?? [];
},
async write(name, callback) {
db.collections[name] = await callback(this.read(name));
// write to file
await path.write(O.stringify(db.collections));
},
};
};
2 changes: 1 addition & 1 deletion packages/store/src/server/json/runtime/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import serve from "./serve.js";

export default ({ database }) => ({
serve: serve(database),
serve: serve({ database }),
});
31 changes: 7 additions & 24 deletions packages/store/src/server/json/runtime/serve.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,18 @@
import { File } from "rcompat/fs";
import * as O from "rcompat/object";
import { is } from "rcompat/invariant";
import wrap from "../../../wrap.js";
import wrap from "@primate/store/base/wrap";
import { name } from "@primate/store/json/common";
import Facade from "../../memory/runtime/Facade.js";
import types from "../../memory/runtime/types.js";
import { connect } from "./driver.js";

export default database => async () => {
is(database).string();

const path = new File(database);
const db = {
collections: await path.exists() ? await path.json() : {},
};

const connection = {
read(name) {
return db.collections[name] ?? [];
},
async write(name, callback) {
db.collections[name] = await callback(this.read(name));
// write to file
await path.write(O.stringify(db.collections));
},
};
export default options => async () => {
const client = await connect(options);

return {
name: "json",
name,
types,
async transact(stores) {
return (others, next) => {
const facade = new Facade(connection);
const facade = new Facade(client);
return next([
...others, ...stores.map(([name, store]) =>
[name, wrap(store, facade, types)]),
Expand Down
2 changes: 1 addition & 1 deletion packages/store/src/server/json/runtime/serve.spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import base from "@primate/store/base/test";
import { File } from "rcompat/fs";
import serve from "./serve.js";
import base from "../base.test.js";

const database = new File(import.meta.url).up(1).join("db.json");

Expand Down
1 change: 1 addition & 0 deletions packages/store/src/server/memory/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const name = "memory";
2 changes: 1 addition & 1 deletion packages/store/src/server/memory/default/build.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// noop
export default name => async () => {};
export default () => {};
4 changes: 1 addition & 3 deletions packages/store/src/server/memory/default/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import build from "./build.js";
import serve from "../runtime/serve.js";

const name = "memory";

export default () => ({
build: build(name),
build,
serve: serve(),
});
14 changes: 14 additions & 0 deletions packages/store/src/server/memory/runtime/driver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export const connect = () => {
const database = {
collections: {},
};
return {
read(name) {
return database.collections[name] ?? [];
},
write(name, callback) {
// do a read
database.collections[name] = callback(this.read(name));
},
};
};
23 changes: 7 additions & 16 deletions packages/store/src/server/memory/runtime/serve.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,19 @@
import types from "./types.js";
import wrap from "@primate/store/base/wrap";
import { name } from "@primate/store/memory/common";
import { connect } from "./driver.js";
import Facade from "./Facade.js";
import wrap from "../../../wrap.js";
import types from "./types.js";

// no conf
export default () => async () => {
const database = {
collections: {},
};
const connection = {
read(name) {
return database.collections[name] ?? [];
},
write(name, callback) {
// do a read
database.collections[name] = callback(this.read(name));
},
};
const client = await connect();

return {
name: "memory",
name,
types,
async transact(stores) {
return (others, next) => {
const facade = new Facade(connection);
const facade = new Facade(client);
return next([
...others, ...stores.map(([name, store]) =>
[name, wrap(store, facade, types)]),
Expand Down
2 changes: 1 addition & 1 deletion packages/store/src/server/memory/runtime/serve.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import base from "@primate/store/base/test";
import serve from "./serve.js";
import base from "../../base.test.js";

export default test => base(test, () => serve()());
2 changes: 1 addition & 1 deletion packages/store/src/server/memory/runtime/types.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import ident from "../../ident.js";
import ident from "@primate/store/base/ident";

// we can't depend on @primate/types here
const valid = /^[^\W_]{8}-[^\W_]{4}-[^\W_]{4}-[^\W_]{4}-[^\W_]{12}$/u;
Expand Down
8 changes: 8 additions & 0 deletions packages/store/src/server/mongodb/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const dependencies = ["mongodb"];

export const defaults = {
host: "localhost",
port: 27017,
};

export const name = "mongodb";
7 changes: 3 additions & 4 deletions packages/store/src/server/mongodb/default/build.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import depend from "../../../depend.js";
import depend from "@primate/store/base/depend";
import { name, dependencies } from "@primate/store/mongodb/common";

const dependencies = ["mongodb"];

export default name => async () => {
export default async () => {
await depend(dependencies, name);
};
11 changes: 3 additions & 8 deletions packages/store/src/server/mongodb/default/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
import build from "./build.js";
import { defaults } from "@primate/store/mongodb/common";
import serve from "../runtime/serve.js";

const defaults = {
host: "localhost",
port: 27017,
};
const name = "mongodb";
import build from "./build.js";

export default ({
host = defaults.host,
port = defaults.port,
database,
} = {}) => ({
build: build(name),
build,
serve: serve({ host, port, database }),
});
11 changes: 11 additions & 0 deletions packages/store/src/server/mongodb/runtime/driver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Decimal128, MongoClient, ObjectId } from "mongodb";

export const connect = async ({ host, port }) => {
const url = `mongodb://${host}:${port}?replicaSet=rs0&directConnection=true`;
const client = new MongoClient(url);
await client.connect();
return client;
};

export { Decimal128, ObjectId };

6 changes: 1 addition & 5 deletions packages/store/src/server/mongodb/runtime/index.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
import { defaults } from "@primate/store/mongodb/common";
import serve from "./serve.js";

const defaults = {
host: "localhost",
port: 27017,
};

export default ({
host = defaults.host,
port = defaults.port,
Expand Down
13 changes: 5 additions & 8 deletions packages/store/src/server/mongodb/runtime/serve.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import { Decimal128, MongoClient, ObjectId } from "mongodb";
import wrap from "../../../wrap.js";
import ident from "../../ident.js";
import ident from "@primate/store/base/ident";
import wrap from "@primate/store/base/wrap";
import { name } from "@primate/store/mongodb/common";
import Facade from "./Facade.js";

const name = "mongodb";
import { connect, Decimal128, ObjectId } from "./driver.js";

export default ({ host, port, database } = {}) => async _ => {
const url = `mongodb://${host}:${port}?replicaSet=rs0&directConnection=true`;
const client = new MongoClient(url);
await client.connect();
const client = await connect({ host, port });

const types = {
primary: {
Expand Down
2 changes: 1 addition & 1 deletion packages/store/src/server/mongodb/runtime/serve.spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import serve from "./serve.js";
import base from "../../base.test.js";
import base from "@primate/store/base/test";

export default async test => base(test, () => serve({ database: "primate" })());
8 changes: 8 additions & 0 deletions packages/store/src/server/mysql/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const dependencies = ["mysql2"];

export const defaults = {
host: "localhost",
port: 3306,
};

export const name = "mysql";
7 changes: 3 additions & 4 deletions packages/store/src/server/mysql/default/build.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import depend from "../../../depend.js";
import depend from "@primate/store/base/depend";
import { dependencies, name } from "@primate/store/mysql/common";

const dependencies = ["mysql2"];

export default name => async () => {
export default async () => {
await depend(dependencies, name);
};
9 changes: 2 additions & 7 deletions packages/store/src/server/mysql/default/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
import build from "./build.js";
import serve from "../runtime/serve.js";

const defaults = {
host: "localhost",
port: 3306,
};
const name = "mysql";
import { defaults } from "@primate/store/mysql/common";

export default ({
host = defaults.host,
Expand All @@ -14,6 +9,6 @@ export default ({
username,
password,
} = {}) => ({
build: build(name),
build,
serve: serve({ host, port, database, username, password }),
});
2 changes: 1 addition & 1 deletion packages/store/src/server/mysql/runtime/Facade.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as O from "rcompat/object";
import { make_sort } from "../../sql/exports.js";
import make_sort from "@primate/store/sql/make-sort";
import typemap from "./typemap.js";

const filter_null = object => O.filter(object, ([, value]) => value !== null);
Expand Down
Loading

0 comments on commit f15d96b

Please sign in to comment.