Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 1 addition & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1 @@
node_modules/
/types/
/firestore/
/firebase/
/next/
/web/
/helper.d.ts
/*.js
/*.ts
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The *.js file is the result of the build. So it's right to be included in the .gitignore list. So I think all the changes to this commit are inappropriate.
I used the method of building in the root folder for the purpose of using alias when distributing to npm, but I will modify it to distribute by folder using tools like chakra-ui later.

node_modules/
2 changes: 2 additions & 0 deletions firebase/helper.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export declare function to<T = Record<string, unknown>>(object: Record<string, any>): T;
export declare function from<T = Record<string, unknown>>(object: Record<string, any>): T;
31 changes: 31 additions & 0 deletions firebase/helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"use strict";
exports.__esModule = true;
exports.from = exports.to = void 0;
function to(object) {
var newObject = {};
for (var key in object) {
var value = object[key];
if (key === "expires") {
newObject.expires = value.getTime();
}
else {
newObject[key] = value;
}
}
return newObject;
}
exports.to = to;
function from(object) {
var newObject = {};
for (var key in object) {
var value = object[key];
if (key === "expires") {
newObject.expires = new Date(value);
}
else {
newObject[key] = value;
}
}
return newObject;
}
exports.from = from;
4 changes: 4 additions & 0 deletions firebase/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Database } from "firebase-admin/database";
import { Adapter } from "next-auth/adapters";
import { FirebaseAdapterProps } from "../types";
export default function FirebaseAdapter(db: Database, options?: FirebaseAdapterProps): Adapter;
370 changes: 370 additions & 0 deletions firebase/index.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions firestore/helper.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { DocumentData, Query, QueryDocumentSnapshot } from "firebase-admin/firestore";
export declare function findOne(q: Query<DocumentData>): Promise<QueryDocumentSnapshot<DocumentData> | null>;
export declare function findMany(q: Query<DocumentData>): Promise<QueryDocumentSnapshot<DocumentData>[]>;
export declare function from<T = Record<string, unknown>>(object: Record<string, any>): T;
export declare function asyncMap<T>(promiseFns: (() => Promise<T>)[], max: number): Promise<unknown>;
112 changes: 112 additions & 0 deletions firestore/helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
exports.__esModule = true;
exports.asyncMap = exports.from = exports.findMany = exports.findOne = void 0;
function findOne(q) {
return __awaiter(this, void 0, void 0, function () {
var querySnap, result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, q.get()];
case 1:
querySnap = _a.sent();
result = null;
querySnap.forEach(function (doc) { return result = doc; });
return [2 /*return*/, result];
}
});
});
}
exports.findOne = findOne;
function findMany(q) {
return __awaiter(this, void 0, void 0, function () {
var querySnap, docs;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, q.get()];
case 1:
querySnap = _a.sent();
docs = [];
querySnap.forEach(function (doc) { return docs.push(doc); });
return [2 /*return*/, docs];
}
});
});
}
exports.findMany = findMany;
function from(object) {
var newObject = {};
for (var key in object) {
var value = object[key];
if (key === "expires") {
newObject.expires = value.toDate();
}
else {
newObject[key] = value;
}
}
return newObject;
}
exports.from = from;
function asyncMap(promiseFns, max) {
var result = [];
var count = 0;
var cursor = 0;
return new Promise(function (res) {
function run() {
var _loop_1 = function () {
count++;
var index = cursor++;
promiseFns[index]()
.then(function (value) {
result[index] = value;
}, function (rej) { return console.log(rej); })["catch"](function (err) { return console.error(err); })["finally"](function () {
run();
count--;
if (!count)
res(result);
});
};
while (count < max && cursor < promiseFns.length) {
_loop_1();
}
}
run();
});
}
exports.asyncMap = asyncMap;
4 changes: 4 additions & 0 deletions firestore/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Firestore } from "firebase-admin/firestore";
import { Adapter } from "next-auth/adapters";
import { FirebaseAdapterProps } from "../types";
export default function FirestoreAdapter(db: Firestore, options?: FirebaseAdapterProps): Adapter;
Loading