@mohasinac/contracts 0.1.0
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/dist/index.cjs +109 -0
- package/dist/index.d.cts +832 -0
- package/dist/index.d.ts +832 -0
- package/dist/index.js +79 -0
- package/dist/index.mjs +21 -0
- package/dist/types/auth.d.ts +53 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/config.d.ts +54 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/email.d.ts +31 -0
- package/dist/types/email.d.ts.map +1 -0
- package/dist/types/feature.d.ts +54 -0
- package/dist/types/feature.d.ts.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/infra.d.ts +44 -0
- package/dist/types/infra.d.ts.map +1 -0
- package/dist/types/payment.d.ts +40 -0
- package/dist/types/payment.d.ts.map +1 -0
- package/dist/types/registry.d.ts +51 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/repository.d.ts +60 -0
- package/dist/types/repository.d.ts.map +1 -0
- package/dist/types/search.d.ts +46 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/shipping.d.ts +65 -0
- package/dist/types/shipping.d.ts.map +1 -0
- package/dist/types/storage.d.ts +28 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/style.d.ts +24 -0
- package/dist/types/style.d.ts.map +1 -0
- package/package.json +31 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
|
|
21
|
+
// src/registry.ts
|
|
22
|
+
var _registry = null;
|
|
23
|
+
function registerProviders(registry) {
|
|
24
|
+
_registry = registry;
|
|
25
|
+
}
|
|
26
|
+
function getProviders() {
|
|
27
|
+
if (!_registry) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
"[contracts] Call registerProviders() before getProviders(). Ensure providers.config.ts is imported at app startup."
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return _registry;
|
|
33
|
+
}
|
|
34
|
+
function _resetProviders() {
|
|
35
|
+
_registry = null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// src/table.ts
|
|
39
|
+
var DEFAULT_PAGINATION_CONFIG = {
|
|
40
|
+
perPage: 20,
|
|
41
|
+
maxPerPage: 100,
|
|
42
|
+
showPageSizeSelector: false,
|
|
43
|
+
pageSizeOptions: [10, 20, 50, 100],
|
|
44
|
+
showFirstLast: true,
|
|
45
|
+
showPrevNext: true,
|
|
46
|
+
maxVisible: 7,
|
|
47
|
+
size: "md"
|
|
48
|
+
};
|
|
49
|
+
var DEFAULT_STICKY_CONFIG = {
|
|
50
|
+
enabled: false,
|
|
51
|
+
topOffset: "top-0",
|
|
52
|
+
maxHeight: "600px",
|
|
53
|
+
zIndex: 10
|
|
54
|
+
};
|
|
55
|
+
var DEFAULT_TABLE_CONFIG = {
|
|
56
|
+
pageSize: DEFAULT_PAGINATION_CONFIG.perPage,
|
|
57
|
+
sticky: DEFAULT_STICKY_CONFIG,
|
|
58
|
+
striped: false,
|
|
59
|
+
selectable: false,
|
|
60
|
+
showViewToggle: false,
|
|
61
|
+
defaultViewMode: "table",
|
|
62
|
+
pagination: DEFAULT_PAGINATION_CONFIG
|
|
63
|
+
};
|
|
64
|
+
function mergeTableConfig(override) {
|
|
65
|
+
if (!override) return DEFAULT_TABLE_CONFIG;
|
|
66
|
+
return __spreadProps(__spreadValues(__spreadValues({}, DEFAULT_TABLE_CONFIG), override), {
|
|
67
|
+
sticky: __spreadValues(__spreadValues({}, DEFAULT_STICKY_CONFIG), override.sticky),
|
|
68
|
+
pagination: __spreadValues(__spreadValues({}, DEFAULT_PAGINATION_CONFIG), override.pagination)
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
DEFAULT_PAGINATION_CONFIG,
|
|
73
|
+
DEFAULT_STICKY_CONFIG,
|
|
74
|
+
DEFAULT_TABLE_CONFIG,
|
|
75
|
+
_resetProviders,
|
|
76
|
+
getProviders,
|
|
77
|
+
mergeTableConfig,
|
|
78
|
+
registerProviders
|
|
79
|
+
};
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// packages/contracts/src/registry.ts
|
|
2
|
+
var _registry = null;
|
|
3
|
+
function registerProviders(registry) {
|
|
4
|
+
_registry = registry;
|
|
5
|
+
}
|
|
6
|
+
function getProviders() {
|
|
7
|
+
if (!_registry) {
|
|
8
|
+
throw new Error(
|
|
9
|
+
"[contracts] Call registerProviders() before getProviders(). Ensure providers.config.ts is imported at app startup."
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
return _registry;
|
|
13
|
+
}
|
|
14
|
+
function _resetProviders() {
|
|
15
|
+
_registry = null;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
_resetProviders,
|
|
19
|
+
getProviders,
|
|
20
|
+
registerProviders
|
|
21
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface AuthPayload {
|
|
2
|
+
uid: string;
|
|
3
|
+
email: string | null;
|
|
4
|
+
/** Application-level role string, e.g. "admin" | "seller" | "user" */
|
|
5
|
+
role: string;
|
|
6
|
+
emailVerified: boolean;
|
|
7
|
+
/** Any extra custom claims stored on the token */
|
|
8
|
+
claims?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface AuthUser {
|
|
11
|
+
uid: string;
|
|
12
|
+
email: string | null;
|
|
13
|
+
displayName: string | null;
|
|
14
|
+
photoURL: string | null;
|
|
15
|
+
role: string;
|
|
16
|
+
emailVerified: boolean;
|
|
17
|
+
disabled: boolean;
|
|
18
|
+
createdAt: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CreateUserInput {
|
|
21
|
+
email: string;
|
|
22
|
+
password?: string;
|
|
23
|
+
displayName?: string;
|
|
24
|
+
photoURL?: string;
|
|
25
|
+
role?: string;
|
|
26
|
+
emailVerified?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Server-side authentication operations.
|
|
30
|
+
* Implemented by @mohasinac/auth-firebase, @mohasinac/auth-nextauth, @mohasinac/auth-clerk.
|
|
31
|
+
*/
|
|
32
|
+
export interface IAuthProvider {
|
|
33
|
+
verifyToken(token: string): Promise<AuthPayload>;
|
|
34
|
+
createCustomToken(uid: string, claims?: Record<string, unknown>): Promise<string>;
|
|
35
|
+
getUser(uid: string): Promise<AuthUser | null>;
|
|
36
|
+
createUser(data: CreateUserInput): Promise<AuthUser>;
|
|
37
|
+
updateUser(uid: string, data: Partial<CreateUserInput>): Promise<AuthUser>;
|
|
38
|
+
deleteUser(uid: string): Promise<void>;
|
|
39
|
+
revokeTokens(uid: string): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Session cookie management (HTTP-only, server-side).
|
|
43
|
+
* Implemented alongside IAuthProvider by the same auth package.
|
|
44
|
+
*/
|
|
45
|
+
export interface ISessionProvider {
|
|
46
|
+
/** Creates a session cookie value from a verified auth payload. */
|
|
47
|
+
createSession(payload: AuthPayload): Promise<string>;
|
|
48
|
+
/** Verifies a session cookie and returns the auth payload. */
|
|
49
|
+
verifySession(cookie: string): Promise<AuthPayload>;
|
|
50
|
+
/** Invalidates a session cookie. */
|
|
51
|
+
destroySession(cookie: string): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAID;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,iBAAiB,CACf,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3E,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,8DAA8D;IAC9D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,oCAAoC;IACpC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand configuration injected into layout/nav shell components.
|
|
3
|
+
* Passed as the `config` prop to NavbarLayout, FooterLayout, etc.
|
|
4
|
+
*/
|
|
5
|
+
export interface SiteConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
tagline?: string;
|
|
8
|
+
description: string;
|
|
9
|
+
/** Canonical base URL, e.g. "https://letitrip.in" */
|
|
10
|
+
url: string;
|
|
11
|
+
logoUrl: string;
|
|
12
|
+
logoAlt?: string;
|
|
13
|
+
email: {
|
|
14
|
+
/** Address used as the "from" field in transactional emails */
|
|
15
|
+
fromAddress: string;
|
|
16
|
+
supportAddress: string;
|
|
17
|
+
};
|
|
18
|
+
phone?: string;
|
|
19
|
+
address?: string;
|
|
20
|
+
social?: {
|
|
21
|
+
twitter?: string;
|
|
22
|
+
instagram?: string;
|
|
23
|
+
facebook?: string;
|
|
24
|
+
youtube?: string;
|
|
25
|
+
linkedin?: string;
|
|
26
|
+
whatsapp?: string;
|
|
27
|
+
};
|
|
28
|
+
/** ISO 4217 currency code used site-wide, e.g. "INR" */
|
|
29
|
+
currency?: string;
|
|
30
|
+
/** BCP 47 locale tag for default locale, e.g. "en" */
|
|
31
|
+
defaultLocale?: string;
|
|
32
|
+
/** Supported locales */
|
|
33
|
+
locales?: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A single nav item passed to NavbarLayout / Sidebar / BottomNavbar.
|
|
37
|
+
*/
|
|
38
|
+
export interface NavItem {
|
|
39
|
+
/** Display label (translation key or literal string) */
|
|
40
|
+
label: string;
|
|
41
|
+
/** Route href */
|
|
42
|
+
href: string;
|
|
43
|
+
/** Icon name / component key */
|
|
44
|
+
icon?: string;
|
|
45
|
+
/** Nested items for dropdown / accordion menus */
|
|
46
|
+
children?: NavItem[];
|
|
47
|
+
/** If true, item is only shown to admin users */
|
|
48
|
+
adminOnly?: boolean;
|
|
49
|
+
/** If true, item is only shown when the user is authenticated */
|
|
50
|
+
authOnly?: boolean;
|
|
51
|
+
/** Open link in a new tab */
|
|
52
|
+
external?: boolean;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QACL,+DAA+D;QAC/D,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAID;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface EmailAttachment {
|
|
2
|
+
filename: string;
|
|
3
|
+
content: Buffer | string;
|
|
4
|
+
contentType?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface EmailOptions {
|
|
7
|
+
to: string | string[];
|
|
8
|
+
subject: string;
|
|
9
|
+
html: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
/** Defaults to SiteConfig.email.fromAddress if omitted. */
|
|
12
|
+
from?: string;
|
|
13
|
+
replyTo?: string;
|
|
14
|
+
attachments?: EmailAttachment[];
|
|
15
|
+
headers?: Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
export interface EmailResult {
|
|
18
|
+
id: string;
|
|
19
|
+
accepted: string[];
|
|
20
|
+
rejected: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Transactional email sending contract.
|
|
24
|
+
* Implemented by @mohasinac/email-resend, @mohasinac/email-nodemailer,
|
|
25
|
+
* @mohasinac/email-sendgrid, @mohasinac/email-postmark.
|
|
26
|
+
*/
|
|
27
|
+
export interface IEmailProvider {
|
|
28
|
+
send(options: EmailOptions): Promise<EmailResult>;
|
|
29
|
+
sendBatch(options: EmailOptions[]): Promise<EmailResult[]>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=email.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/email.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC5D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Describes a page route stub that the CLI generates when `add <feature>` is run.
|
|
3
|
+
*/
|
|
4
|
+
export interface RouteStub {
|
|
5
|
+
/** Next.js route segment, e.g. "[locale]/events" */
|
|
6
|
+
segment: string;
|
|
7
|
+
exports: {
|
|
8
|
+
/** Default export name from the feature package */
|
|
9
|
+
default: string;
|
|
10
|
+
/** generateMetadata export name, if applicable */
|
|
11
|
+
generateMetadata?: string;
|
|
12
|
+
};
|
|
13
|
+
/** If true, the CLI wraps the stub in admin-only protection comments */
|
|
14
|
+
adminOnly?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Describes an API route stub that the CLI generates.
|
|
18
|
+
*/
|
|
19
|
+
export interface ApiRouteStub {
|
|
20
|
+
/** Next.js route segment, e.g. "api/events/[id]" */
|
|
21
|
+
segment: string;
|
|
22
|
+
methods: Array<"GET" | "POST" | "PATCH" | "PUT" | "DELETE">;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The contract between a feature package and @mohasinac/cli.
|
|
26
|
+
* Every feat-* package exports a `manifest` object satisfying this interface.
|
|
27
|
+
*/
|
|
28
|
+
export interface FeatureManifest {
|
|
29
|
+
/** Unique feature identifier, matches FeaturesConfig key */
|
|
30
|
+
name: string;
|
|
31
|
+
/** next-intl namespace key for this feature's messages */
|
|
32
|
+
i18nNamespace: string;
|
|
33
|
+
/** Environment variable keys required by this feature (documentation only) */
|
|
34
|
+
envKeys: string[];
|
|
35
|
+
/** Page route stubs generated by CLI on install */
|
|
36
|
+
routes: RouteStub[];
|
|
37
|
+
/** API route stubs generated by CLI on install */
|
|
38
|
+
apiRoutes: ApiRouteStub[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Shape of features.config.ts in consumer projects.
|
|
42
|
+
* Keys are feature names; values are booleans (enabled/disabled).
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* export default {
|
|
47
|
+
* auth: true,
|
|
48
|
+
* events: true,
|
|
49
|
+
* auctions: false,
|
|
50
|
+
* } satisfies FeaturesConfig;
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export type FeaturesConfig = Record<string, boolean>;
|
|
54
|
+
//# sourceMappingURL=feature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../src/feature.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,mDAAmD;QACnD,OAAO,EAAE,MAAM,CAAC;QAChB,kDAAkD;QAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAID;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type { WhereOp, SieveQuery, PagedResult, IReadRepository, IWriteRepository, IRepository, IRealtimeRepository, IDbProvider, } from "./repository.js";
|
|
2
|
+
export type { AuthPayload, AuthUser, CreateUserInput, IAuthProvider, ISessionProvider, } from "./auth.js";
|
|
3
|
+
export type { EmailAttachment, EmailOptions, EmailResult, IEmailProvider, } from "./email.js";
|
|
4
|
+
export type { UploadOptions, StorageFile, IStorageProvider, } from "./storage.js";
|
|
5
|
+
export type { PaymentOrder, PaymentCapture, Refund, IPaymentProvider, } from "./payment.js";
|
|
6
|
+
export type { ShippingAddress, CreateShipmentInput, Shipment, TrackingEvent, TrackingInfo, ServiceabilityResult, IShippingProvider, } from "./shipping.js";
|
|
7
|
+
export type { SearchOptions, SearchHit, SearchResult, SuggestOptions, ISearchProvider, } from "./search.js";
|
|
8
|
+
export type { ICacheProvider, QueueJob, IQueueProvider, EventHandler, IEventBus, } from "./infra.js";
|
|
9
|
+
export type { IStyleAdapter } from "./style.js";
|
|
10
|
+
export type { ProviderRegistry } from "./registry.js";
|
|
11
|
+
export { registerProviders, getProviders, _resetProviders, } from "./registry.js";
|
|
12
|
+
export type { RouteStub, ApiRouteStub, FeatureManifest, FeaturesConfig, } from "./feature.js";
|
|
13
|
+
export type { SiteConfig, NavItem } from "./config.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,EACb,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,MAAM,EACN,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key-value cache adapter contract.
|
|
3
|
+
* Implemented by @mohasinac/core (in-memory), Redis, Upstash.
|
|
4
|
+
*/
|
|
5
|
+
export interface ICacheProvider {
|
|
6
|
+
get<T>(key: string): Promise<T | null>;
|
|
7
|
+
set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
|
|
8
|
+
delete(key: string): Promise<void>;
|
|
9
|
+
clear(prefix?: string): Promise<void>;
|
|
10
|
+
has(key: string): Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
export interface QueueJob<T = unknown> {
|
|
13
|
+
id: string;
|
|
14
|
+
type: string;
|
|
15
|
+
payload: T;
|
|
16
|
+
attempts: number;
|
|
17
|
+
maxAttempts: number;
|
|
18
|
+
scheduledAt: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Background job queue adapter contract.
|
|
22
|
+
* Implemented by @mohasinac/core (in-memory), BullMQ, Upstash QStash.
|
|
23
|
+
*/
|
|
24
|
+
export interface IQueueProvider {
|
|
25
|
+
enqueue<T>(type: string, payload: T, options?: {
|
|
26
|
+
delayMs?: number;
|
|
27
|
+
maxAttempts?: number;
|
|
28
|
+
}): Promise<QueueJob<T>>;
|
|
29
|
+
process<T>(type: string, handler: (job: QueueJob<T>) => Promise<void>): void;
|
|
30
|
+
cancel(jobId: string): Promise<void>;
|
|
31
|
+
getJob<T>(jobId: string): Promise<QueueJob<T> | null>;
|
|
32
|
+
}
|
|
33
|
+
export type EventHandler<T = unknown> = (payload: T) => void | Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* In-process event bus contract.
|
|
36
|
+
* Implemented by @mohasinac/core (EventEmitter-based).
|
|
37
|
+
*/
|
|
38
|
+
export interface IEventBus {
|
|
39
|
+
on<T>(event: string, handler: EventHandler<T>): void;
|
|
40
|
+
off<T>(event: string, handler: EventHandler<T>): void;
|
|
41
|
+
emit<T>(event: string, payload: T): void;
|
|
42
|
+
once<T>(event: string, handler: EventHandler<T>): void;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=infra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infra.d.ts","sourceRoot":"","sources":["../../src/infra.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7E,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACrD,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtD,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACxD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface PaymentOrder {
|
|
2
|
+
id: string;
|
|
3
|
+
amount: number;
|
|
4
|
+
currency: string;
|
|
5
|
+
status: "created" | "attempted" | "paid" | "failed";
|
|
6
|
+
receipt?: string;
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PaymentCapture {
|
|
11
|
+
id: string;
|
|
12
|
+
orderId: string;
|
|
13
|
+
amount: number;
|
|
14
|
+
currency: string;
|
|
15
|
+
status: "captured" | "failed";
|
|
16
|
+
capturedAt: string;
|
|
17
|
+
}
|
|
18
|
+
export interface Refund {
|
|
19
|
+
id: string;
|
|
20
|
+
paymentId: string;
|
|
21
|
+
amount: number;
|
|
22
|
+
currency: string;
|
|
23
|
+
status: "pending" | "processed" | "failed";
|
|
24
|
+
reason?: string;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Payment gateway adapter contract.
|
|
29
|
+
* Implemented by @mohasinac/payment-razorpay, @mohasinac/payment-stripe,
|
|
30
|
+
* @mohasinac/payment-braintree.
|
|
31
|
+
*/
|
|
32
|
+
export interface IPaymentProvider {
|
|
33
|
+
createOrder(amount: number, currency: string, metadata?: Record<string, unknown>): Promise<PaymentOrder>;
|
|
34
|
+
/** Returns true if the webhook signature is valid. */
|
|
35
|
+
verifyWebhook(payload: string, signature: string): boolean;
|
|
36
|
+
capturePayment(orderId: string): Promise<PaymentCapture>;
|
|
37
|
+
refund(paymentId: string, amount?: number): Promise<Refund>;
|
|
38
|
+
getOrder(orderId: string): Promise<PaymentOrder>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=payment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../../src/payment.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzB,sDAAsD;IACtD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { IAuthProvider, ISessionProvider } from "./auth.js";
|
|
2
|
+
import type { IEmailProvider } from "./email.js";
|
|
3
|
+
import type { IStorageProvider } from "./storage.js";
|
|
4
|
+
import type { IPaymentProvider } from "./payment.js";
|
|
5
|
+
import type { IShippingProvider } from "./shipping.js";
|
|
6
|
+
import type { ISearchProvider } from "./search.js";
|
|
7
|
+
import type { ICacheProvider, IQueueProvider, IEventBus } from "./infra.js";
|
|
8
|
+
import type { IStyleAdapter } from "./style.js";
|
|
9
|
+
import type { IDbProvider } from "./repository.js";
|
|
10
|
+
/**
|
|
11
|
+
* The single DI container. Populated once at app startup via registerProviders().
|
|
12
|
+
* Feature packages access concrete implementations via getProviders() — they
|
|
13
|
+
* never import a concrete provider directly (Dependency Inversion Principle).
|
|
14
|
+
*/
|
|
15
|
+
export interface ProviderRegistry {
|
|
16
|
+
auth: IAuthProvider;
|
|
17
|
+
session: ISessionProvider;
|
|
18
|
+
email: IEmailProvider;
|
|
19
|
+
storage: IStorageProvider;
|
|
20
|
+
style: IStyleAdapter;
|
|
21
|
+
/** Optional — database provider; enables true 2-line API route stubs in feat-* packages */
|
|
22
|
+
db?: IDbProvider;
|
|
23
|
+
/** Optional — only required for projects with payment flows */
|
|
24
|
+
payment?: IPaymentProvider;
|
|
25
|
+
/** Optional — only required for projects with order shipping */
|
|
26
|
+
shipping?: IShippingProvider;
|
|
27
|
+
/** Optional — only required for projects with full-text search */
|
|
28
|
+
search?: ISearchProvider;
|
|
29
|
+
/** Optional — falls back to in-memory cache if not provided */
|
|
30
|
+
cache?: ICacheProvider;
|
|
31
|
+
/** Optional — falls back to in-memory queue if not provided */
|
|
32
|
+
queue?: IQueueProvider;
|
|
33
|
+
/** Optional — falls back to EventEmitter if not provided */
|
|
34
|
+
eventBus?: IEventBus;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Call once at app startup (e.g. in providers.config.ts).
|
|
38
|
+
* Subsequent calls replace the registry — useful in tests.
|
|
39
|
+
*/
|
|
40
|
+
export declare function registerProviders(registry: ProviderRegistry): void;
|
|
41
|
+
/**
|
|
42
|
+
* Returns the registry. Throws if registerProviders() has not been called.
|
|
43
|
+
* Feature packages call this to resolve concrete implementations.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getProviders(): ProviderRegistry;
|
|
46
|
+
/**
|
|
47
|
+
* Resets the registry — only for use in test environments.
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
export declare function _resetProviders(): void;
|
|
51
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,2FAA2F;IAC3F,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,kEAAkE;IAClE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAElE;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,CAQ/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/** Field comparison operators supported by Sieve-style query strings. */
|
|
2
|
+
export type WhereOp = "==" | "!=" | "<" | "<=" | ">" | ">=" | "array-contains" | "in" | "not-in" | "array-contains-any";
|
|
3
|
+
/**
|
|
4
|
+
* Provider-agnostic query descriptor.
|
|
5
|
+
* `filters` uses Sieve syntax: "field==value,field2>value2"
|
|
6
|
+
* DB adapters translate this into native query predicates.
|
|
7
|
+
*/
|
|
8
|
+
export interface SieveQuery {
|
|
9
|
+
/** Sieve filter string, e.g. "status==published,price>100" */
|
|
10
|
+
filters?: string;
|
|
11
|
+
/** Field name to sort by */
|
|
12
|
+
sort?: string;
|
|
13
|
+
/** Sort direction (default: "asc") */
|
|
14
|
+
order?: "asc" | "desc";
|
|
15
|
+
/** 1-based page number (default: 1) */
|
|
16
|
+
page?: number;
|
|
17
|
+
/** Items per page (default: 20) */
|
|
18
|
+
perPage?: number;
|
|
19
|
+
}
|
|
20
|
+
/** Paginated result envelope returned by IReadRepository.findAll() */
|
|
21
|
+
export interface PagedResult<T> {
|
|
22
|
+
data: T[];
|
|
23
|
+
total: number;
|
|
24
|
+
page: number;
|
|
25
|
+
perPage: number;
|
|
26
|
+
totalPages: number;
|
|
27
|
+
}
|
|
28
|
+
export interface IReadRepository<T> {
|
|
29
|
+
findById(id: string): Promise<T | null>;
|
|
30
|
+
findAll(query?: SieveQuery): Promise<PagedResult<T>>;
|
|
31
|
+
findWhere(field: keyof T, op: WhereOp, value: unknown): Promise<T[]>;
|
|
32
|
+
}
|
|
33
|
+
export interface IWriteRepository<T> {
|
|
34
|
+
create(data: Omit<T, "id" | "createdAt" | "updatedAt">): Promise<T>;
|
|
35
|
+
update(id: string, data: Partial<T>): Promise<T>;
|
|
36
|
+
delete(id: string): Promise<void>;
|
|
37
|
+
batchCreate(items: Array<Omit<T, "id" | "createdAt" | "updatedAt">>): Promise<T[]>;
|
|
38
|
+
batchDelete(ids: string[]): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
/** Full CRUD repository — combines read + write. */
|
|
41
|
+
export interface IRepository<T> extends IReadRepository<T>, IWriteRepository<T> {
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Repository with real-time subscription support (e.g. Firestore RTDB).
|
|
45
|
+
* Returns an unsubscribe function from both subscribe methods.
|
|
46
|
+
*/
|
|
47
|
+
export interface IRealtimeRepository<T> extends IRepository<T> {
|
|
48
|
+
subscribe(id: string, cb: (data: T | null) => void): () => void;
|
|
49
|
+
subscribeWhere(field: keyof T, value: unknown, cb: (items: T[]) => void): () => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Database provider — creates IRepository<T> instances on demand.
|
|
53
|
+
* Registered once in providers.config.ts; feature packages call
|
|
54
|
+
* `getProviders().db.getRepository<T>(collection)` so they never
|
|
55
|
+
* import a concrete adapter (FirebaseRepository, PrismaRepository, …).
|
|
56
|
+
*/
|
|
57
|
+
export interface IDbProvider {
|
|
58
|
+
getRepository<T>(collection: string): IRepository<T>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/repository.ts"],"names":[],"mappings":"AAGA,yEAAyE;AACzE,MAAM,MAAM,OAAO,GACf,IAAI,GACJ,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,gBAAgB,GAChB,IAAI,GACJ,QAAQ,GACR,oBAAoB,CAAC;AAEzB;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACtE;AAGD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,WAAW,CACT,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GACtD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,oDAAoD;AACpD,MAAM,WAAW,WAAW,CAAC,CAAC,CAC5B,SAAQ,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;CAAG;AAEpD;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAC5D,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,cAAc,CACZ,KAAK,EAAE,MAAM,CAAC,EACd,KAAK,EAAE,OAAO,EACd,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,GACvB,MAAM,IAAI,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface SearchOptions {
|
|
2
|
+
page?: number;
|
|
3
|
+
perPage?: number;
|
|
4
|
+
filters?: string;
|
|
5
|
+
facets?: string[];
|
|
6
|
+
sortBy?: string;
|
|
7
|
+
/** Attributes to include in the result (default: all) */
|
|
8
|
+
attributesToRetrieve?: string[];
|
|
9
|
+
/** Attributes to highlight in results */
|
|
10
|
+
attributesToHighlight?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface SearchHit<T> {
|
|
13
|
+
id: string;
|
|
14
|
+
data: T;
|
|
15
|
+
score?: number;
|
|
16
|
+
highlights?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
export interface SearchResult<T> {
|
|
19
|
+
hits: SearchHit<T>[];
|
|
20
|
+
total: number;
|
|
21
|
+
page: number;
|
|
22
|
+
perPage: number;
|
|
23
|
+
totalPages: number;
|
|
24
|
+
processingTimeMs?: number;
|
|
25
|
+
facets?: Record<string, Record<string, number>>;
|
|
26
|
+
}
|
|
27
|
+
export interface SuggestOptions {
|
|
28
|
+
limit?: number;
|
|
29
|
+
filters?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Full-text search adapter contract.
|
|
33
|
+
* Implemented by @mohasinac/search-algolia, @mohasinac/search-typesense,
|
|
34
|
+
* @mohasinac/search-meilisearch.
|
|
35
|
+
*/
|
|
36
|
+
export interface ISearchProvider<T = Record<string, unknown>> {
|
|
37
|
+
index(id: string, data: T): Promise<void>;
|
|
38
|
+
indexBatch(items: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
data: T;
|
|
41
|
+
}>): Promise<void>;
|
|
42
|
+
remove(id: string): Promise<void>;
|
|
43
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult<T>>;
|
|
44
|
+
suggest(query: string, options?: SuggestOptions): Promise<string[]>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,yCAAyC;IACzC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;GAIG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACrE"}
|