@adonisjs/session 7.0.0-9 → 7.0.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.
Files changed (76) hide show
  1. package/build/chunk-2X5L327N.js +28 -0
  2. package/build/chunk-2X5L327N.js.map +1 -0
  3. package/build/chunk-7YIO32ZH.js +134 -0
  4. package/build/chunk-7YIO32ZH.js.map +1 -0
  5. package/build/chunk-K4OSGJVW.js +402 -0
  6. package/build/chunk-K4OSGJVW.js.map +1 -0
  7. package/build/chunk-S6P3TBEK.js +85 -0
  8. package/build/chunk-S6P3TBEK.js.map +1 -0
  9. package/build/chunk-TE5JP3SX.js +151 -0
  10. package/build/chunk-TE5JP3SX.js.map +1 -0
  11. package/build/chunk-WBAYBMJJ.js +15 -0
  12. package/build/chunk-WBAYBMJJ.js.map +1 -0
  13. package/build/config/session.stub +51 -0
  14. package/build/cookie-H7KRZB4T.js +56 -0
  15. package/build/cookie-H7KRZB4T.js.map +1 -0
  16. package/build/factories/main.d.ts +1 -0
  17. package/build/factories/main.js +50 -0
  18. package/build/factories/main.js.map +1 -0
  19. package/build/factories/session_middleware_factory.d.ts +27 -0
  20. package/build/file-YO7C2QWO.js +112 -0
  21. package/build/file-YO7C2QWO.js.map +1 -0
  22. package/build/index.d.ts +1 -3
  23. package/build/index.js +18 -14
  24. package/build/index.js.map +1 -0
  25. package/build/providers/session_provider.d.ts +22 -5
  26. package/build/providers/session_provider.js +51 -59
  27. package/build/providers/session_provider.js.map +1 -0
  28. package/build/redis-KDWIBKUQ.js +58 -0
  29. package/build/redis-KDWIBKUQ.js.map +1 -0
  30. package/build/src/client.d.ts +24 -19
  31. package/build/src/client.js +9 -81
  32. package/build/src/client.js.map +1 -0
  33. package/build/src/debug.d.ts +1 -1
  34. package/build/src/define_config.d.ts +24 -3
  35. package/build/src/{edge_plugin_adonisjs_session.d.ts → plugins/edge.d.ts} +1 -1
  36. package/build/src/plugins/edge.js +102 -0
  37. package/build/src/plugins/edge.js.map +1 -0
  38. package/build/src/plugins/japa/api_client.d.ts +75 -0
  39. package/build/src/plugins/japa/api_client.js +100 -0
  40. package/build/src/plugins/japa/api_client.js.map +1 -0
  41. package/build/src/plugins/japa/browser_client.d.ts +36 -0
  42. package/build/src/plugins/japa/browser_client.js +88 -0
  43. package/build/src/plugins/japa/browser_client.js.map +1 -0
  44. package/build/src/session.d.ts +21 -12
  45. package/build/src/session_middleware.d.ts +7 -4
  46. package/build/src/session_middleware.js +10 -59
  47. package/build/src/session_middleware.js.map +1 -0
  48. package/build/src/{drivers → stores}/cookie.d.ts +4 -4
  49. package/build/src/{drivers → stores}/file.d.ts +4 -4
  50. package/build/src/{drivers → stores}/memory.d.ts +3 -3
  51. package/build/src/{drivers → stores}/redis.d.ts +5 -5
  52. package/build/src/{types/main.d.ts → types.d.ts} +11 -31
  53. package/build/src/types.js +1 -0
  54. package/build/src/types.js.map +1 -0
  55. package/build/src/{store.d.ts → values_store.d.ts} +10 -10
  56. package/package.json +74 -43
  57. package/build/configure.js +0 -45
  58. package/build/src/debug.js +0 -10
  59. package/build/src/define_config.js +0 -42
  60. package/build/src/drivers/cookie.js +0 -60
  61. package/build/src/drivers/file.js +0 -133
  62. package/build/src/drivers/memory.js +0 -33
  63. package/build/src/drivers/redis.js +0 -70
  64. package/build/src/drivers_collection.d.ts +0 -22
  65. package/build/src/drivers_collection.js +0 -38
  66. package/build/src/edge_plugin_adonisjs_session.js +0 -92
  67. package/build/src/errors.js +0 -17
  68. package/build/src/helpers.d.ts +0 -6
  69. package/build/src/helpers.js +0 -43
  70. package/build/src/session.js +0 -384
  71. package/build/src/store.js +0 -159
  72. package/build/src/types/extended.d.ts +0 -19
  73. package/build/src/types/extended.js +0 -9
  74. package/build/src/types/main.js +0 -9
  75. package/build/stubs/config.stub +0 -49
  76. package/build/stubs/main.js +0 -10
@@ -1,5 +1,23 @@
1
- import type { Edge } from 'edge.js';
2
1
  import type { ApplicationService } from '@adonisjs/core/types';
2
+ import type { Session } from '../src/session.js';
3
+ /**
4
+ * Events emitted by the session class
5
+ */
6
+ declare module '@adonisjs/core/types' {
7
+ interface EventsList {
8
+ 'session:initiated': {
9
+ session: Session;
10
+ };
11
+ 'session:committed': {
12
+ session: Session;
13
+ };
14
+ 'session:migrated': {
15
+ fromSessionId: string;
16
+ toSessionId: string;
17
+ session: Session;
18
+ };
19
+ }
20
+ }
3
21
  /**
4
22
  * Session provider configures the session management inside an
5
23
  * AdonisJS application
@@ -8,16 +26,15 @@ export default class SessionProvider {
8
26
  protected app: ApplicationService;
9
27
  constructor(app: ApplicationService);
10
28
  /**
11
- * Returns edge when it's installed
29
+ * Registers edge plugin when edge is installed
30
+ * in the user application.
12
31
  */
13
- protected getEdge(): Promise<Edge | null>;
32
+ protected registerEdgePlugin(): Promise<void>;
14
33
  /**
15
34
  * Registering muddleware
16
35
  */
17
36
  register(): void;
18
37
  /**
19
- * Registering the active driver when middleware is used
20
- * +
21
38
  * Adding edge tags (if edge is installed)
22
39
  */
23
40
  boot(): Promise<void>;
@@ -1,60 +1,52 @@
1
- /*
2
- * @adonisjs/session
3
- *
4
- * (c) AdonisJS
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- */
9
- import debug from '../src/debug.js';
10
- import { registerSessionDriver } from '../src/helpers.js';
11
- import SessionMiddleware from '../src/session_middleware.js';
12
- /**
13
- * Session provider configures the session management inside an
14
- * AdonisJS application
15
- */
16
- export default class SessionProvider {
17
- app;
18
- constructor(app) {
19
- this.app = app;
1
+ import {
2
+ SessionMiddleware
3
+ } from "../chunk-K4OSGJVW.js";
4
+ import "../chunk-2X5L327N.js";
5
+ import "../chunk-TE5JP3SX.js";
6
+ import "../chunk-WBAYBMJJ.js";
7
+
8
+ // providers/session_provider.ts
9
+ import { configProvider } from "@adonisjs/core";
10
+ import { RuntimeException } from "@poppinss/utils";
11
+ var SessionProvider = class {
12
+ constructor(app) {
13
+ this.app = app;
14
+ }
15
+ /**
16
+ * Registers edge plugin when edge is installed
17
+ * in the user application.
18
+ */
19
+ async registerEdgePlugin() {
20
+ if (this.app.usingEdgeJS) {
21
+ const edge = await import("edge.js");
22
+ const { edgePluginSession } = await import("../src/plugins/edge.js");
23
+ edge.default.use(edgePluginSession);
20
24
  }
21
- /**
22
- * Returns edge when it's installed
23
- */
24
- async getEdge() {
25
- try {
26
- const { default: edge } = await import('edge.js');
27
- debug('Detected edge.js package. Adding session primitives to it');
28
- return edge;
29
- }
30
- catch {
31
- return null;
32
- }
33
- }
34
- /**
35
- * Registering muddleware
36
- */
37
- register() {
38
- this.app.container.singleton(SessionMiddleware, async (resolver) => {
39
- const config = this.app.config.get('session', {});
40
- const emitter = await resolver.make('emitter');
41
- return new SessionMiddleware(config, emitter);
42
- });
43
- }
44
- /**
45
- * Registering the active driver when middleware is used
46
- * +
47
- * Adding edge tags (if edge is installed)
48
- */
49
- async boot() {
50
- this.app.container.resolving(SessionMiddleware, async () => {
51
- const config = this.app.config.get('session');
52
- await registerSessionDriver(this.app, config.driver);
53
- });
54
- const edge = await this.getEdge();
55
- if (edge) {
56
- const { edgePluginAdonisJSSession } = await import('../src/edge_plugin_adonisjs_session.js');
57
- edge.use(edgePluginAdonisJSSession);
58
- }
59
- }
60
- }
25
+ }
26
+ /**
27
+ * Registering muddleware
28
+ */
29
+ register() {
30
+ this.app.container.singleton(SessionMiddleware, async (resolver) => {
31
+ const sessionConfigProvider = this.app.config.get("session", {});
32
+ const config = await configProvider.resolve(this.app, sessionConfigProvider);
33
+ if (!config) {
34
+ throw new RuntimeException(
35
+ 'Invalid "config/session.ts" file. Make sure you are using the "defineConfig" method'
36
+ );
37
+ }
38
+ const emitter = await resolver.make("emitter");
39
+ return new SessionMiddleware(config, emitter);
40
+ });
41
+ }
42
+ /**
43
+ * Adding edge tags (if edge is installed)
44
+ */
45
+ async boot() {
46
+ await this.registerEdgePlugin();
47
+ }
48
+ };
49
+ export {
50
+ SessionProvider as default
51
+ };
52
+ //# sourceMappingURL=session_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../providers/session_provider.ts"],"sourcesContent":["/*\n * @adonisjs/session\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport { configProvider } from '@adonisjs/core'\nimport { RuntimeException } from '@poppinss/utils'\nimport type { ApplicationService } from '@adonisjs/core/types'\n\nimport type { Session } from '../src/session.js'\nimport SessionMiddleware from '../src/session_middleware.js'\n\n/**\n * Events emitted by the session class\n */\ndeclare module '@adonisjs/core/types' {\n interface EventsList {\n 'session:initiated': { session: Session }\n 'session:committed': { session: Session }\n 'session:migrated': { fromSessionId: string; toSessionId: string; session: Session }\n }\n}\n\n/**\n * Session provider configures the session management inside an\n * AdonisJS application\n */\nexport default class SessionProvider {\n constructor(protected app: ApplicationService) {}\n\n /**\n * Registers edge plugin when edge is installed\n * in the user application.\n */\n protected async registerEdgePlugin() {\n if (this.app.usingEdgeJS) {\n const edge = await import('edge.js')\n const { edgePluginSession } = await import('../src/plugins/edge.js')\n edge.default.use(edgePluginSession)\n }\n }\n\n /**\n * Registering muddleware\n */\n register() {\n this.app.container.singleton(SessionMiddleware, async (resolver) => {\n const sessionConfigProvider = this.app.config.get('session', {})\n\n /**\n * Resolve config from the provider\n */\n const config = await configProvider.resolve<any>(this.app, sessionConfigProvider)\n if (!config) {\n throw new RuntimeException(\n 'Invalid \"config/session.ts\" file. Make sure you are using the \"defineConfig\" method'\n )\n }\n\n const emitter = await resolver.make('emitter')\n return new SessionMiddleware(config, emitter)\n })\n }\n\n /**\n * Adding edge tags (if edge is installed)\n */\n async boot() {\n await this.registerEdgePlugin()\n }\n}\n"],"mappings":";;;;;;;;AASA,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAqBjC,IAAqB,kBAArB,MAAqC;AAAA,EACnC,YAAsB,KAAyB;AAAzB;AAAA,EAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhD,MAAgB,qBAAqB;AACnC,QAAI,KAAK,IAAI,aAAa;AACxB,YAAM,OAAO,MAAM,OAAO,SAAS;AACnC,YAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,wBAAwB;AACnE,WAAK,QAAQ,IAAI,iBAAiB;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACT,SAAK,IAAI,UAAU,UAAU,mBAAmB,OAAO,aAAa;AAClE,YAAM,wBAAwB,KAAK,IAAI,OAAO,IAAI,WAAW,CAAC,CAAC;AAK/D,YAAM,SAAS,MAAM,eAAe,QAAa,KAAK,KAAK,qBAAqB;AAChF,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,SAAS,KAAK,SAAS;AAC7C,aAAO,IAAI,kBAAkB,QAAQ,OAAO;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO;AACX,UAAM,KAAK,mBAAmB;AAAA,EAChC;AACF;","names":[]}
@@ -0,0 +1,58 @@
1
+ import {
2
+ debug_default
3
+ } from "./chunk-WBAYBMJJ.js";
4
+
5
+ // src/stores/redis.ts
6
+ import string from "@poppinss/utils/string";
7
+ import { MessageBuilder } from "@adonisjs/core/helpers";
8
+ var RedisStore = class {
9
+ #connection;
10
+ #ttlSeconds;
11
+ constructor(connection, age) {
12
+ this.#connection = connection;
13
+ this.#ttlSeconds = string.seconds.parse(age);
14
+ debug_default("initiating redis store");
15
+ }
16
+ /**
17
+ * Returns file contents. A new file will be created if it's
18
+ * missing.
19
+ */
20
+ async read(sessionId) {
21
+ debug_default("redis store: reading session data %s", sessionId);
22
+ const contents = await this.#connection.get(sessionId);
23
+ if (!contents) {
24
+ return null;
25
+ }
26
+ try {
27
+ return new MessageBuilder().verify(contents, sessionId);
28
+ } catch {
29
+ return null;
30
+ }
31
+ }
32
+ /**
33
+ * Write session values to a file
34
+ */
35
+ async write(sessionId, values) {
36
+ debug_default("redis store: writing session data %s, %O", sessionId, values);
37
+ const message = new MessageBuilder().build(values, void 0, sessionId);
38
+ await this.#connection.setex(sessionId, this.#ttlSeconds, message);
39
+ }
40
+ /**
41
+ * Cleanup session file by removing it
42
+ */
43
+ async destroy(sessionId) {
44
+ debug_default("redis store: destroying session data %s", sessionId);
45
+ await this.#connection.del(sessionId);
46
+ }
47
+ /**
48
+ * Updates the value expiry
49
+ */
50
+ async touch(sessionId) {
51
+ debug_default("redis store: touching session data %s", sessionId);
52
+ await this.#connection.expire(sessionId, this.#ttlSeconds);
53
+ }
54
+ };
55
+ export {
56
+ RedisStore
57
+ };
58
+ //# sourceMappingURL=redis-KDWIBKUQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stores/redis.ts"],"sourcesContent":["/**\n * @adonisjs/session\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport string from '@poppinss/utils/string'\nimport { MessageBuilder } from '@adonisjs/core/helpers'\nimport type { Connection } from '@adonisjs/redis/types'\n\nimport debug from '../debug.js'\nimport type { SessionStoreContract, SessionData } from '../types.js'\n\n/**\n * File store to read/write session to filesystem\n */\nexport class RedisStore implements SessionStoreContract {\n #connection: Connection\n #ttlSeconds: number\n\n constructor(connection: Connection, age: string | number) {\n this.#connection = connection\n this.#ttlSeconds = string.seconds.parse(age)\n debug('initiating redis store')\n }\n\n /**\n * Returns file contents. A new file will be created if it's\n * missing.\n */\n async read(sessionId: string): Promise<SessionData | null> {\n debug('redis store: reading session data %s', sessionId)\n\n const contents = await this.#connection.get(sessionId)\n if (!contents) {\n return null\n }\n\n /**\n * Verify contents with the session id and return them as an object. The verify\n * method can fail when the contents is not JSON>\n */\n try {\n return new MessageBuilder().verify<SessionData>(contents, sessionId)\n } catch {\n return null\n }\n }\n\n /**\n * Write session values to a file\n */\n async write(sessionId: string, values: Object): Promise<void> {\n debug('redis store: writing session data %s, %O', sessionId, values)\n\n const message = new MessageBuilder().build(values, undefined, sessionId)\n await this.#connection.setex(sessionId, this.#ttlSeconds, message)\n }\n\n /**\n * Cleanup session file by removing it\n */\n async destroy(sessionId: string): Promise<void> {\n debug('redis store: destroying session data %s', sessionId)\n await this.#connection.del(sessionId)\n }\n\n /**\n * Updates the value expiry\n */\n async touch(sessionId: string): Promise<void> {\n debug('redis store: touching session data %s', sessionId)\n await this.#connection.expire(sessionId, this.#ttlSeconds)\n }\n}\n"],"mappings":";;;;;AASA,OAAO,YAAY;AACnB,SAAS,sBAAsB;AASxB,IAAM,aAAN,MAAiD;AAAA,EACtD;AAAA,EACA;AAAA,EAEA,YAAY,YAAwB,KAAsB;AACxD,SAAK,cAAc;AACnB,SAAK,cAAc,OAAO,QAAQ,MAAM,GAAG;AAC3C,kBAAM,wBAAwB;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAK,WAAgD;AACzD,kBAAM,wCAAwC,SAAS;AAEvD,UAAM,WAAW,MAAM,KAAK,YAAY,IAAI,SAAS;AACrD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAMA,QAAI;AACF,aAAO,IAAI,eAAe,EAAE,OAAoB,UAAU,SAAS;AAAA,IACrE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,WAAmB,QAA+B;AAC5D,kBAAM,4CAA4C,WAAW,MAAM;AAEnE,UAAM,UAAU,IAAI,eAAe,EAAE,MAAM,QAAQ,QAAW,SAAS;AACvE,UAAM,KAAK,YAAY,MAAM,WAAW,KAAK,aAAa,OAAO;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,WAAkC;AAC9C,kBAAM,2CAA2C,SAAS;AAC1D,UAAM,KAAK,YAAY,IAAI,SAAS;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM,WAAkC;AAC5C,kBAAM,yCAAyC,SAAS;AACxD,UAAM,KAAK,YAAY,OAAO,WAAW,KAAK,WAAW;AAAA,EAC3D;AACF;","names":[]}
@@ -1,5 +1,4 @@
1
- import type { CookieClient } from '@adonisjs/core/http';
2
- import type { SessionConfig, SessionData, SessionDriverContract } from './types/main.js';
1
+ import type { SessionData, SessionStoreContract } from './types.js';
3
2
  /**
4
3
  * Session client exposes the API to set session data as a client
5
4
  */
@@ -9,27 +8,33 @@ export declare class SessionClient {
9
8
  * Session key for setting flash messages
10
9
  */
11
10
  flashKey: string;
12
- constructor(config: SessionConfig, driver: SessionDriverContract, cookieClient: CookieClient);
13
11
  /**
14
- * Load session data from the driver
12
+ * Session to use when no explicit session id is
13
+ * defined
15
14
  */
16
- load(cookies: Record<string, any>, sessionId?: string): Promise<{
17
- sessionId: string;
18
- session: SessionData;
19
- flashMessages: SessionData;
20
- }>;
15
+ sessionId: string;
16
+ constructor(store: SessionStoreContract);
21
17
  /**
22
- * Commits the session data to the session store and returns
23
- * the session id and cookie name for it to be accessible
24
- * by the server
18
+ * Merge session data
25
19
  */
26
- commit(values: SessionData | null, flashMessages: SessionData | null, sessionId?: string): Promise<{
27
- sessionId: string;
28
- signedSessionId: string;
29
- cookieName: string;
30
- }>;
20
+ merge(values: SessionData): this;
31
21
  /**
32
- * Clear the session store
22
+ * Merge flash messages
33
23
  */
34
- forget(sessionId?: string): Promise<void>;
24
+ flash(values: SessionData): this;
25
+ /**
26
+ * Commits data to the session store.
27
+ */
28
+ commit(): Promise<void>;
29
+ /**
30
+ * Destroys the session data with the store
31
+ */
32
+ destroy(sessionId?: string): Promise<void>;
33
+ /**
34
+ * Loads session data from the session store
35
+ */
36
+ load(sessionId?: string): Promise<{
37
+ values: any;
38
+ flashMessages: any;
39
+ }>;
35
40
  }
@@ -1,81 +1,9 @@
1
- /*
2
- * @adonisjs/session
3
- *
4
- * (c) AdonisJS
5
- *
6
- * For the full copyright and license information, please view the LICENSE
7
- * file that was distributed with this source code.
8
- */
9
- import { cuid } from '@adonisjs/core/helpers';
10
- import { Store } from './store.js';
11
- /**
12
- * Session client exposes the API to set session data as a client
13
- */
14
- export class SessionClient {
15
- /**
16
- * Session configuration
17
- */
18
- #config;
19
- /**
20
- * The session driver to use for reading and writing session data
21
- */
22
- #driver;
23
- /**
24
- * Cookie client contract to sign and unsign cookies
25
- */
26
- #cookieClient;
27
- /**
28
- * Session to use when no explicit session id is
29
- * defined
30
- */
31
- #sessionId = cuid();
32
- /**
33
- * Session key for setting flash messages
34
- */
35
- flashKey = '__flash__';
36
- constructor(config, driver, cookieClient) {
37
- this.#config = config;
38
- this.#driver = driver;
39
- this.#cookieClient = cookieClient;
40
- }
41
- /**
42
- * Load session data from the driver
43
- */
44
- async load(cookies, sessionId) {
45
- const sessionIdCookie = cookies[this.#config.cookieName];
46
- const sessId = sessionId || sessionIdCookie ? sessionIdCookie.value : this.#sessionId;
47
- const contents = await this.#driver.read(sessId);
48
- const store = new Store(contents);
49
- const flashMessages = store.pull(this.flashKey, null);
50
- return {
51
- sessionId: sessId,
52
- session: store.all(),
53
- flashMessages,
54
- };
55
- }
56
- /**
57
- * Commits the session data to the session store and returns
58
- * the session id and cookie name for it to be accessible
59
- * by the server
60
- */
61
- async commit(values, flashMessages, sessionId) {
62
- const sessId = sessionId || this.#sessionId;
63
- /**
64
- * Persist session data to the store, alongside flash messages
65
- */
66
- if (values || flashMessages) {
67
- await this.#driver.write(sessId, Object.assign({ [this.flashKey]: flashMessages }, values));
68
- }
69
- return {
70
- sessionId: sessId,
71
- signedSessionId: this.#cookieClient.sign(this.#config.cookieName, sessId),
72
- cookieName: this.#config.cookieName,
73
- };
74
- }
75
- /**
76
- * Clear the session store
77
- */
78
- async forget(sessionId) {
79
- await this.#driver.destroy(sessionId || this.#sessionId);
80
- }
81
- }
1
+ import {
2
+ SessionClient
3
+ } from "../chunk-S6P3TBEK.js";
4
+ import "../chunk-TE5JP3SX.js";
5
+ import "../chunk-WBAYBMJJ.js";
6
+ export {
7
+ SessionClient
8
+ };
9
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,3 +1,3 @@
1
- /// <reference types="@types/node" resolution-mode="require"/>
1
+ /// <reference types="node" resolution-mode="require"/>
2
2
  declare const _default: import("util").DebugLogger;
3
3
  export default _default;
@@ -1,8 +1,29 @@
1
+ import type { ConfigProvider } from '@adonisjs/core/types';
1
2
  import type { CookieOptions } from '@adonisjs/core/types/http';
2
- import type { SessionConfig } from './types/main.js';
3
+ import type { SessionConfig, FileStoreConfig, RedisStoreConfig, SessionStoreFactory } from './types.js';
3
4
  /**
4
- * Helper to normalize session config
5
+ * Resolved config with stores
5
6
  */
6
- export declare function defineConfig(config: Partial<SessionConfig>): SessionConfig & {
7
+ type ResolvedConfig<KnownStores extends Record<string, SessionStoreFactory>> = SessionConfig & {
8
+ store: keyof KnownStores;
9
+ stores: KnownStores;
7
10
  cookie: Partial<CookieOptions>;
8
11
  };
12
+ /**
13
+ * Helper to normalize session config
14
+ */
15
+ export declare function defineConfig<KnownStores extends Record<string, SessionStoreFactory | ConfigProvider<SessionStoreFactory>>>(config: Partial<SessionConfig> & {
16
+ store: keyof KnownStores | 'memory';
17
+ stores: KnownStores;
18
+ }): ConfigProvider<ResolvedConfig<{
19
+ [K in keyof KnownStores]: SessionStoreFactory;
20
+ }>>;
21
+ /**
22
+ * Inbuilt stores to store the session data.
23
+ */
24
+ export declare const stores: {
25
+ file: (config: FileStoreConfig) => ConfigProvider<SessionStoreFactory>;
26
+ redis: (config: RedisStoreConfig) => ConfigProvider<SessionStoreFactory>;
27
+ cookie: () => ConfigProvider<SessionStoreFactory>;
28
+ };
29
+ export {};
@@ -3,4 +3,4 @@ import type { PluginFn } from 'edge.js/types';
3
3
  * The edge plugin for AdonisJS Session adds tags to read
4
4
  * flash messages
5
5
  */
6
- export declare const edgePluginAdonisJSSession: PluginFn<undefined>;
6
+ export declare const edgePluginSession: PluginFn<undefined>;
@@ -0,0 +1,102 @@
1
+ import {
2
+ debug_default
3
+ } from "../../chunk-WBAYBMJJ.js";
4
+
5
+ // src/plugins/edge.ts
6
+ var edgePluginSession = (edge) => {
7
+ debug_default("registering session tags with edge");
8
+ edge.registerTag({
9
+ tagName: "flashMessage",
10
+ seekable: true,
11
+ block: true,
12
+ compile(parser, buffer, token) {
13
+ const expression = parser.utils.transformAst(
14
+ parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),
15
+ token.filename,
16
+ parser
17
+ );
18
+ const key = parser.utils.stringify(expression);
19
+ buffer.writeStatement(
20
+ `if (state.flashMessages.has(${key})) {`,
21
+ token.filename,
22
+ token.loc.start.line
23
+ );
24
+ buffer.writeExpression(
25
+ `let $message = state.flashMessages.get(${key})`,
26
+ token.filename,
27
+ token.loc.start.line
28
+ );
29
+ parser.stack.defineScope();
30
+ parser.stack.defineVariable("$message");
31
+ token.children.forEach((child) => {
32
+ parser.processToken(child, buffer);
33
+ });
34
+ parser.stack.clearScope();
35
+ buffer.writeStatement(`}`, token.filename, token.loc.start.line);
36
+ }
37
+ });
38
+ edge.registerTag({
39
+ tagName: "inputError",
40
+ seekable: true,
41
+ block: true,
42
+ compile(parser, buffer, token) {
43
+ const expression = parser.utils.transformAst(
44
+ parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),
45
+ token.filename,
46
+ parser
47
+ );
48
+ const key = parser.utils.stringify(expression);
49
+ buffer.writeStatement(
50
+ `if (!!state.flashMessages.get('inputErrorsBag', {})[${key}]) {`,
51
+ token.filename,
52
+ token.loc.start.line
53
+ );
54
+ buffer.writeExpression(
55
+ `let $messages = state.flashMessages.get('inputErrorsBag', {})[${key}]`,
56
+ token.filename,
57
+ token.loc.start.line
58
+ );
59
+ parser.stack.defineScope();
60
+ parser.stack.defineVariable("$messages");
61
+ token.children.forEach((child) => {
62
+ parser.processToken(child, buffer);
63
+ });
64
+ parser.stack.clearScope();
65
+ buffer.writeStatement(`}`, token.filename, token.loc.start.line);
66
+ }
67
+ });
68
+ edge.registerTag({
69
+ tagName: "error",
70
+ seekable: true,
71
+ block: true,
72
+ compile(parser, buffer, token) {
73
+ const expression = parser.utils.transformAst(
74
+ parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),
75
+ token.filename,
76
+ parser
77
+ );
78
+ const key = parser.utils.stringify(expression);
79
+ buffer.writeStatement(
80
+ `if (state.flashMessages.has(['errorsBag', ${key}])) {`,
81
+ token.filename,
82
+ token.loc.start.line
83
+ );
84
+ buffer.writeExpression(
85
+ `let $message = state.flashMessages.get(['errorsBag', ${key}])`,
86
+ token.filename,
87
+ token.loc.start.line
88
+ );
89
+ parser.stack.defineScope();
90
+ parser.stack.defineVariable("$message");
91
+ token.children.forEach((child) => {
92
+ parser.processToken(child, buffer);
93
+ });
94
+ parser.stack.clearScope();
95
+ buffer.writeStatement(`}`, token.filename, token.loc.start.line);
96
+ }
97
+ });
98
+ };
99
+ export {
100
+ edgePluginSession
101
+ };
102
+ //# sourceMappingURL=edge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/edge.ts"],"sourcesContent":["/*\n * @adonisjs/session\n *\n * (c) AdonisJS\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nimport type { PluginFn } from 'edge.js/types'\nimport debug from '../debug.js'\n\n/**\n * The edge plugin for AdonisJS Session adds tags to read\n * flash messages\n */\nexport const edgePluginSession: PluginFn<undefined> = (edge) => {\n debug('registering session tags with edge')\n\n edge.registerTag({\n tagName: 'flashMessage',\n seekable: true,\n block: true,\n compile(parser, buffer, token) {\n const expression = parser.utils.transformAst(\n parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n\n const key = parser.utils.stringify(expression)\n\n /**\n * Write an if statement\n */\n buffer.writeStatement(\n `if (state.flashMessages.has(${key})) {`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Define a local variable\n */\n buffer.writeExpression(\n `let $message = state.flashMessages.get(${key})`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Create a local variables scope and tell the parser about\n * the existence of the \"message\" variable\n */\n parser.stack.defineScope()\n parser.stack.defineVariable('$message')\n\n /**\n * Process component children using the parser\n */\n token.children.forEach((child) => {\n parser.processToken(child, buffer)\n })\n\n /**\n * Clear the scope of the local variables before we\n * close the if statement\n */\n parser.stack.clearScope()\n\n /**\n * Close if statement\n */\n buffer.writeStatement(`}`, token.filename, token.loc.start.line)\n },\n })\n\n edge.registerTag({\n tagName: 'inputError',\n seekable: true,\n block: true,\n compile(parser, buffer, token) {\n const expression = parser.utils.transformAst(\n parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n\n const key = parser.utils.stringify(expression)\n\n /**\n * Write an if statement\n */\n buffer.writeStatement(\n `if (!!state.flashMessages.get('inputErrorsBag', {})[${key}]) {`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Define a local variable\n */\n buffer.writeExpression(\n `let $messages = state.flashMessages.get('inputErrorsBag', {})[${key}]`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Create a local variables scope and tell the parser about\n * the existence of the \"messages\" variable\n */\n parser.stack.defineScope()\n parser.stack.defineVariable('$messages')\n\n /**\n * Process component children using the parser\n */\n token.children.forEach((child) => {\n parser.processToken(child, buffer)\n })\n\n /**\n * Clear the scope of the local variables before we\n * close the if statement\n */\n parser.stack.clearScope()\n\n /**\n * Close if statement\n */\n buffer.writeStatement(`}`, token.filename, token.loc.start.line)\n },\n })\n\n edge.registerTag({\n tagName: 'error',\n seekable: true,\n block: true,\n compile(parser, buffer, token) {\n const expression = parser.utils.transformAst(\n parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),\n token.filename,\n parser\n )\n\n const key = parser.utils.stringify(expression)\n\n /**\n * Write an if statement\n */\n buffer.writeStatement(\n `if (state.flashMessages.has(['errorsBag', ${key}])) {`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Define a local variable\n */\n buffer.writeExpression(\n `let $message = state.flashMessages.get(['errorsBag', ${key}])`,\n token.filename,\n token.loc.start.line\n )\n\n /**\n * Create a local variables scope and tell the parser about\n * the existence of the \"messages\" variable\n */\n parser.stack.defineScope()\n parser.stack.defineVariable('$message')\n\n /**\n * Process component children using the parser\n */\n token.children.forEach((child) => {\n parser.processToken(child, buffer)\n })\n\n /**\n * Clear the scope of the local variables before we\n * close the if statement\n */\n parser.stack.clearScope()\n\n /**\n * Close if statement\n */\n buffer.writeStatement(`}`, token.filename, token.loc.start.line)\n },\n })\n}\n"],"mappings":";;;;;AAgBO,IAAM,oBAAyC,CAAC,SAAS;AAC9D,gBAAM,oCAAoC;AAE1C,OAAK,YAAY;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ,QAAQ,QAAQ,OAAO;AAC7B,YAAM,aAAa,OAAO,MAAM;AAAA,QAC9B,OAAO,MAAM,YAAY,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,QAC1E,MAAM;AAAA,QACN;AAAA,MACF;AAEA,YAAM,MAAM,OAAO,MAAM,UAAU,UAAU;AAK7C,aAAO;AAAA,QACL,+BAA+B,GAAG;AAAA,QAClC,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAKA,aAAO;AAAA,QACL,0CAA0C,GAAG;AAAA,QAC7C,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAMA,aAAO,MAAM,YAAY;AACzB,aAAO,MAAM,eAAe,UAAU;AAKtC,YAAM,SAAS,QAAQ,CAAC,UAAU;AAChC,eAAO,aAAa,OAAO,MAAM;AAAA,MACnC,CAAC;AAMD,aAAO,MAAM,WAAW;AAKxB,aAAO,eAAe,KAAK,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAAA,IACjE;AAAA,EACF,CAAC;AAED,OAAK,YAAY;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ,QAAQ,QAAQ,OAAO;AAC7B,YAAM,aAAa,OAAO,MAAM;AAAA,QAC9B,OAAO,MAAM,YAAY,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,QAC1E,MAAM;AAAA,QACN;AAAA,MACF;AAEA,YAAM,MAAM,OAAO,MAAM,UAAU,UAAU;AAK7C,aAAO;AAAA,QACL,uDAAuD,GAAG;AAAA,QAC1D,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAKA,aAAO;AAAA,QACL,iEAAiE,GAAG;AAAA,QACpE,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAMA,aAAO,MAAM,YAAY;AACzB,aAAO,MAAM,eAAe,WAAW;AAKvC,YAAM,SAAS,QAAQ,CAAC,UAAU;AAChC,eAAO,aAAa,OAAO,MAAM;AAAA,MACnC,CAAC;AAMD,aAAO,MAAM,WAAW;AAKxB,aAAO,eAAe,KAAK,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAAA,IACjE;AAAA,EACF,CAAC;AAED,OAAK,YAAY;AAAA,IACf,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ,QAAQ,QAAQ,OAAO;AAC7B,YAAM,aAAa,OAAO,MAAM;AAAA,QAC9B,OAAO,MAAM,YAAY,MAAM,WAAW,OAAO,MAAM,KAAK,MAAM,QAAQ;AAAA,QAC1E,MAAM;AAAA,QACN;AAAA,MACF;AAEA,YAAM,MAAM,OAAO,MAAM,UAAU,UAAU;AAK7C,aAAO;AAAA,QACL,6CAA6C,GAAG;AAAA,QAChD,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAKA,aAAO;AAAA,QACL,wDAAwD,GAAG;AAAA,QAC3D,MAAM;AAAA,QACN,MAAM,IAAI,MAAM;AAAA,MAClB;AAMA,aAAO,MAAM,YAAY;AACzB,aAAO,MAAM,eAAe,UAAU;AAKtC,YAAM,SAAS,QAAQ,CAAC,UAAU;AAChC,eAAO,aAAa,OAAO,MAAM;AAAA,MACnC,CAAC;AAMD,aAAO,MAAM,WAAW;AAKxB,aAAO,eAAe,KAAK,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI;AAAA,IACjE;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,75 @@
1
+ import type { PluginFn } from '@japa/runner/types';
2
+ import type { ApplicationService } from '@adonisjs/core/types';
3
+ import { SessionClient } from '../../client.js';
4
+ import type { SessionData } from '../../types.js';
5
+ declare module '@japa/api-client' {
6
+ interface ApiRequest {
7
+ sessionClient: SessionClient;
8
+ /**
9
+ * Make HTTP request along with the provided session data
10
+ */
11
+ withSession(values: SessionData): this;
12
+ /**
13
+ * Make HTTP request along with the provided session flash
14
+ * messages.
15
+ */
16
+ withFlashMessages(values: SessionData): this;
17
+ }
18
+ interface ApiResponse {
19
+ sessionBag: {
20
+ values: SessionData;
21
+ flashMessages: SessionData;
22
+ };
23
+ /**
24
+ * Get session data from the HTTP response
25
+ */
26
+ session(key?: string): any;
27
+ /**
28
+ * Get flash messages from the HTTP response
29
+ */
30
+ flashMessages(): SessionData;
31
+ /**
32
+ * Get flash messages for a specific key from the HTTP response
33
+ */
34
+ flashMessage(key: string): SessionData;
35
+ /**
36
+ * Assert session key-value pair exists
37
+ */
38
+ assertSession(key: string, value?: any): void;
39
+ /**
40
+ * Assert key is missing in session store
41
+ */
42
+ assertSessionMissing(key: string): void;
43
+ /**
44
+ * Assert flash message key-value pair exists
45
+ */
46
+ assertFlashMessage(key: string, value?: any): void;
47
+ /**
48
+ * Assert key is missing flash messages store
49
+ */
50
+ assertFlashMissing(key: string): void;
51
+ /**
52
+ * Assert flash messages has validation errors for
53
+ * the given field
54
+ */
55
+ assertHasValidationError(field: string): void;
56
+ /**
57
+ * Assert flash messages does not have validation errors
58
+ * for the given field
59
+ */
60
+ assertDoesNotHaveValidationError(field: string): void;
61
+ /**
62
+ * Assert error message for a given field
63
+ */
64
+ assertValidationError(field: string, message: string): void;
65
+ /**
66
+ * Assert all error messages for a given field
67
+ */
68
+ assertValidationErrors(field: string, messages: string[]): void;
69
+ }
70
+ }
71
+ /**
72
+ * Hooks AdonisJS Session with the Japa API client
73
+ * plugin
74
+ */
75
+ export declare const sessionApiClient: (app: ApplicationService) => PluginFn;