@adonisjs/session 7.0.0-13 → 7.0.0-15

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 (52) hide show
  1. package/build/chunk-2X5L327N.js +28 -0
  2. package/build/chunk-2X5L327N.js.map +1 -0
  3. package/build/chunk-HIQQAMXD.js +133 -0
  4. package/build/chunk-HIQQAMXD.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/{stubs/config.stub → config/session.stub} +3 -1
  14. package/build/cookie-H7KRZB4T.js +56 -0
  15. package/build/cookie-H7KRZB4T.js.map +1 -0
  16. package/build/factories/main.js +50 -9
  17. package/build/factories/main.js.map +1 -0
  18. package/build/file-YO7C2QWO.js +112 -0
  19. package/build/file-YO7C2QWO.js.map +1 -0
  20. package/build/index.d.ts +0 -1
  21. package/build/index.js +16 -12
  22. package/build/index.js.map +1 -0
  23. package/build/providers/session_provider.js +51 -59
  24. package/build/providers/session_provider.js.map +1 -0
  25. package/build/redis-KDWIBKUQ.js +58 -0
  26. package/build/redis-KDWIBKUQ.js.map +1 -0
  27. package/build/src/client.js +9 -85
  28. package/build/src/client.js.map +1 -0
  29. package/build/src/plugins/edge.js +101 -91
  30. package/build/src/plugins/edge.js.map +1 -0
  31. package/build/src/plugins/japa/api_client.js +99 -140
  32. package/build/src/plugins/japa/api_client.js.map +1 -0
  33. package/build/src/plugins/japa/browser_client.js +82 -109
  34. package/build/src/plugins/japa/browser_client.js.map +1 -0
  35. package/build/src/session.d.ts +14 -5
  36. package/build/src/session_middleware.js +10 -58
  37. package/build/src/session_middleware.js.map +1 -0
  38. package/build/src/values_store.d.ts +7 -7
  39. package/package.json +60 -43
  40. package/build/configure.js +0 -45
  41. package/build/factories/session_middleware_factory.js +0 -48
  42. package/build/src/debug.js +0 -10
  43. package/build/src/define_config.js +0 -105
  44. package/build/src/errors.js +0 -17
  45. package/build/src/session.js +0 -387
  46. package/build/src/stores/cookie.js +0 -60
  47. package/build/src/stores/file.js +0 -133
  48. package/build/src/stores/memory.js +0 -33
  49. package/build/src/stores/redis.js +0 -66
  50. package/build/src/types.js +0 -9
  51. package/build/src/values_store.js +0 -159
  52. package/build/stubs/main.js +0 -10
@@ -1,141 +1,100 @@
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 lodash from '@poppinss/utils/lodash';
10
- import { configProvider } from '@adonisjs/core';
11
- import { RuntimeException } from '@poppinss/utils';
12
- import { ApiClient, ApiRequest, ApiResponse } from '@japa/api-client';
13
- import { SessionClient } from '../../client.js';
14
- /**
15
- * Hooks AdonisJS Session with the Japa API client
16
- * plugin
17
- */
18
- export const sessionApiClient = (app) => {
19
- const pluginFn = async function () {
20
- const sessionConfigProvider = app.config.get('session', {});
21
- /**
22
- * Resolve config from the provider
23
- */
24
- const config = await configProvider.resolve(app, sessionConfigProvider);
25
- if (!config) {
26
- throw new RuntimeException('Invalid "config/session.ts" file. Make sure you are using the "defineConfig" method');
27
- }
28
- /**
29
- * Stick an singleton session client to APIRequest. The session
30
- * client is used to keep a track of session data we have
31
- * to send during the request.
32
- */
33
- ApiRequest.getter('sessionClient', function () {
34
- return new SessionClient(config.stores.memory());
35
- }, true);
36
- /**
37
- * Define session data
38
- */
39
- ApiRequest.macro('withSession', function (data) {
40
- this.sessionClient.merge(data);
41
- return this;
42
- });
43
- /**
44
- * Define flash messages
45
- */
46
- ApiRequest.macro('withFlashMessages', function (data) {
47
- this.sessionClient.flash(data);
48
- return this;
49
- });
50
- /**
51
- * Get session data
52
- */
53
- ApiResponse.macro('session', function (key) {
54
- return key ? lodash.get(this.sessionBag.values, key) : this.sessionBag.values;
55
- });
56
- /**
57
- * Get flash messages
58
- */
59
- ApiResponse.macro('flashMessages', function () {
60
- return this.sessionBag.flashMessages;
61
- });
62
- ApiResponse.macro('flashMessage', function (key) {
63
- return lodash.get(this.sessionBag.flashMessages, key);
64
- });
65
- /**
66
- * Response session assertions
67
- */
68
- ApiResponse.macro('assertSession', function (key, value) {
69
- this.assert.property(this.session(), key);
70
- if (value !== undefined) {
71
- this.assert.deepEqual(this.session(key), value);
72
- }
73
- });
74
- ApiResponse.macro('assertSessionMissing', function (key) {
75
- this.assert.notProperty(this.session(), key);
76
- });
77
- ApiResponse.macro('assertFlashMessage', function (key, value) {
78
- this.assert.property(this.flashMessages(), key);
79
- if (value !== undefined) {
80
- this.assert.deepEqual(this.flashMessage(key), value);
81
- }
82
- });
83
- ApiResponse.macro('assertFlashMissing', function (key) {
84
- this.assert.notProperty(this.flashMessages(), key);
85
- });
86
- ApiResponse.macro('assertHasValidationError', function (field) {
87
- this.assert.property(this.flashMessage('errors'), field);
88
- });
89
- ApiResponse.macro('assertDoesNotHaveValidationError', function (field) {
90
- this.assert.notProperty(this.flashMessage('errors'), field);
91
- });
92
- ApiResponse.macro('assertValidationError', function (field, message) {
93
- this.assert.include(this.flashMessage('errors')?.[field] || [], message);
94
- });
95
- ApiResponse.macro('assertValidationErrors', function (field, messages) {
96
- this.assert.deepEqual(this.flashMessage('errors')?.[field] || [], messages);
97
- });
98
- /**
99
- * We define the hook using the "request.setup" method because we
100
- * want to allow other Japa hooks to mutate the session store
101
- * without running into race conditions
102
- */
103
- ApiClient.onRequest((request) => {
104
- request.setup(async () => {
105
- /**
106
- * Set cookie
107
- */
108
- request.withCookie(config.cookieName, request.sessionClient.sessionId);
109
- /**
110
- * Persist data
111
- */
112
- await request.sessionClient.commit();
113
- /**
114
- * Cleanup if request fails
115
- */
116
- return async (error) => {
117
- if (error) {
118
- await request.sessionClient.destroy();
119
- }
120
- };
121
- });
122
- request.teardown(async (response) => {
123
- const sessionId = response.cookie(config.cookieName);
124
- /**
125
- * Reading session data from the response cookie
126
- */
127
- response.sessionBag = sessionId
128
- ? await response.request.sessionClient.load(sessionId.value)
129
- : {
130
- values: {},
131
- flashMessages: {},
132
- };
133
- /**
134
- * Cleanup state
135
- */
136
- await request.sessionClient.destroy(sessionId?.value);
137
- });
138
- });
139
- };
140
- return pluginFn;
1
+ import {
2
+ SessionClient
3
+ } from "../../../chunk-S6P3TBEK.js";
4
+ import "../../../chunk-TE5JP3SX.js";
5
+ import "../../../chunk-WBAYBMJJ.js";
6
+
7
+ // src/plugins/japa/api_client.ts
8
+ import lodash from "@poppinss/utils/lodash";
9
+ import { configProvider } from "@adonisjs/core";
10
+ import { RuntimeException } from "@poppinss/utils";
11
+ import { ApiClient, ApiRequest, ApiResponse } from "@japa/api-client";
12
+ var sessionApiClient = (app) => {
13
+ const pluginFn = async function() {
14
+ const sessionConfigProvider = app.config.get("session", {});
15
+ const config = await configProvider.resolve(app, sessionConfigProvider);
16
+ if (!config) {
17
+ throw new RuntimeException(
18
+ 'Invalid "config/session.ts" file. Make sure you are using the "defineConfig" method'
19
+ );
20
+ }
21
+ ApiRequest.getter(
22
+ "sessionClient",
23
+ function() {
24
+ return new SessionClient(config.stores.memory());
25
+ },
26
+ true
27
+ );
28
+ ApiRequest.macro("withSession", function(data) {
29
+ this.sessionClient.merge(data);
30
+ return this;
31
+ });
32
+ ApiRequest.macro("withFlashMessages", function(data) {
33
+ this.sessionClient.flash(data);
34
+ return this;
35
+ });
36
+ ApiResponse.macro("session", function(key) {
37
+ return key ? lodash.get(this.sessionBag.values, key) : this.sessionBag.values;
38
+ });
39
+ ApiResponse.macro("flashMessages", function() {
40
+ return this.sessionBag.flashMessages;
41
+ });
42
+ ApiResponse.macro("flashMessage", function(key) {
43
+ return lodash.get(this.sessionBag.flashMessages, key);
44
+ });
45
+ ApiResponse.macro("assertSession", function(key, value) {
46
+ this.assert.property(this.session(), key);
47
+ if (value !== void 0) {
48
+ this.assert.deepEqual(this.session(key), value);
49
+ }
50
+ });
51
+ ApiResponse.macro("assertSessionMissing", function(key) {
52
+ this.assert.notProperty(this.session(), key);
53
+ });
54
+ ApiResponse.macro("assertFlashMessage", function(key, value) {
55
+ this.assert.property(this.flashMessages(), key);
56
+ if (value !== void 0) {
57
+ this.assert.deepEqual(this.flashMessage(key), value);
58
+ }
59
+ });
60
+ ApiResponse.macro("assertFlashMissing", function(key) {
61
+ this.assert.notProperty(this.flashMessages(), key);
62
+ });
63
+ ApiResponse.macro("assertHasValidationError", function(field) {
64
+ this.assert.property(this.flashMessage("errors"), field);
65
+ });
66
+ ApiResponse.macro("assertDoesNotHaveValidationError", function(field) {
67
+ this.assert.notProperty(this.flashMessage("errors"), field);
68
+ });
69
+ ApiResponse.macro("assertValidationError", function(field, message) {
70
+ this.assert.include(this.flashMessage("errors")?.[field] || [], message);
71
+ });
72
+ ApiResponse.macro("assertValidationErrors", function(field, messages) {
73
+ this.assert.deepEqual(this.flashMessage("errors")?.[field] || [], messages);
74
+ });
75
+ ApiClient.onRequest((request) => {
76
+ request.setup(async () => {
77
+ request.withCookie(config.cookieName, request.sessionClient.sessionId);
78
+ await request.sessionClient.commit();
79
+ return async (error) => {
80
+ if (error) {
81
+ await request.sessionClient.destroy();
82
+ }
83
+ };
84
+ });
85
+ request.teardown(async (response) => {
86
+ const sessionId = response.cookie(config.cookieName);
87
+ response.sessionBag = sessionId ? await response.request.sessionClient.load(sessionId.value) : {
88
+ values: {},
89
+ flashMessages: {}
90
+ };
91
+ await request.sessionClient.destroy(sessionId?.value);
92
+ });
93
+ });
94
+ };
95
+ return pluginFn;
141
96
  };
97
+ export {
98
+ sessionApiClient
99
+ };
100
+ //# sourceMappingURL=api_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugins/japa/api_client.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 lodash from '@poppinss/utils/lodash'\nimport { configProvider } from '@adonisjs/core'\nimport { RuntimeException } from '@poppinss/utils'\nimport type { PluginFn } from '@japa/runner/types'\nimport type { ApplicationService } from '@adonisjs/core/types'\nimport { ApiClient, ApiRequest, ApiResponse } from '@japa/api-client'\n\nimport { SessionClient } from '../../client.js'\nimport type { SessionData } from '../../types.js'\n\ndeclare module '@japa/api-client' {\n export interface ApiRequest {\n sessionClient: SessionClient\n\n /**\n * Make HTTP request along with the provided session data\n */\n withSession(values: SessionData): this\n\n /**\n * Make HTTP request along with the provided session flash\n * messages.\n */\n withFlashMessages(values: SessionData): this\n }\n\n export interface ApiResponse {\n sessionBag: {\n values: SessionData\n flashMessages: SessionData\n }\n\n /**\n * Get session data from the HTTP response\n */\n session(key?: string): any\n\n /**\n * Get flash messages from the HTTP response\n */\n flashMessages(): SessionData\n\n /**\n * Get flash messages for a specific key from the HTTP response\n */\n flashMessage(key: string): SessionData\n\n /**\n * Assert session key-value pair exists\n */\n assertSession(key: string, value?: any): void\n\n /**\n * Assert key is missing in session store\n */\n assertSessionMissing(key: string): void\n\n /**\n * Assert flash message key-value pair exists\n */\n assertFlashMessage(key: string, value?: any): void\n\n /**\n * Assert key is missing flash messages store\n */\n assertFlashMissing(key: string): void\n\n /**\n * Assert flash messages has validation errors for\n * the given field\n */\n assertHasValidationError(field: string): void\n\n /**\n * Assert flash messages does not have validation errors\n * for the given field\n */\n assertDoesNotHaveValidationError(field: string): void\n\n /**\n * Assert error message for a given field\n */\n assertValidationError(field: string, message: string): void\n\n /**\n * Assert all error messages for a given field\n */\n assertValidationErrors(field: string, messages: string[]): void\n }\n}\n\n/**\n * Hooks AdonisJS Session with the Japa API client\n * plugin\n */\nexport const sessionApiClient = (app: ApplicationService) => {\n const pluginFn: PluginFn = async function () {\n const sessionConfigProvider = app.config.get('session', {})\n\n /**\n * Resolve config from the provider\n */\n const config = await configProvider.resolve<any>(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 /**\n * Stick an singleton session client to APIRequest. The session\n * client is used to keep a track of session data we have\n * to send during the request.\n */\n ApiRequest.getter(\n 'sessionClient',\n function () {\n return new SessionClient(config.stores.memory())\n },\n true\n )\n\n /**\n * Define session data\n */\n ApiRequest.macro('withSession', function (this: ApiRequest, data) {\n this.sessionClient.merge(data)\n return this\n })\n\n /**\n * Define flash messages\n */\n ApiRequest.macro('withFlashMessages', function (this: ApiRequest, data) {\n this.sessionClient.flash(data)\n return this\n })\n\n /**\n * Get session data\n */\n ApiResponse.macro('session', function (this: ApiResponse, key) {\n return key ? lodash.get(this.sessionBag.values, key) : this.sessionBag.values\n })\n\n /**\n * Get flash messages\n */\n ApiResponse.macro('flashMessages', function (this: ApiResponse) {\n return this.sessionBag.flashMessages\n })\n ApiResponse.macro('flashMessage', function (this: ApiResponse, key) {\n return lodash.get(this.sessionBag.flashMessages, key)\n })\n\n /**\n * Response session assertions\n */\n ApiResponse.macro('assertSession', function (this: ApiResponse, key, value) {\n this.assert!.property(this.session(), key)\n if (value !== undefined) {\n this.assert!.deepEqual(this.session(key), value)\n }\n })\n ApiResponse.macro('assertSessionMissing', function (this: ApiResponse, key) {\n this.assert!.notProperty(this.session(), key)\n })\n ApiResponse.macro('assertFlashMessage', function (this: ApiResponse, key, value) {\n this.assert!.property(this.flashMessages(), key)\n if (value !== undefined) {\n this.assert!.deepEqual(this.flashMessage(key), value)\n }\n })\n ApiResponse.macro('assertFlashMissing', function (this: ApiResponse, key) {\n this.assert!.notProperty(this.flashMessages(), key)\n })\n ApiResponse.macro('assertHasValidationError', function (this: ApiResponse, field) {\n this.assert!.property(this.flashMessage('errors'), field)\n })\n ApiResponse.macro('assertDoesNotHaveValidationError', function (this: ApiResponse, field) {\n this.assert!.notProperty(this.flashMessage('errors'), field)\n })\n ApiResponse.macro('assertValidationError', function (this: ApiResponse, field, message) {\n this.assert!.include(this.flashMessage('errors')?.[field] || [], message)\n })\n ApiResponse.macro('assertValidationErrors', function (this: ApiResponse, field, messages) {\n this.assert!.deepEqual(this.flashMessage('errors')?.[field] || [], messages)\n })\n\n /**\n * We define the hook using the \"request.setup\" method because we\n * want to allow other Japa hooks to mutate the session store\n * without running into race conditions\n */\n ApiClient.onRequest((request) => {\n request.setup(async () => {\n /**\n * Set cookie\n */\n request.withCookie(config.cookieName, request.sessionClient.sessionId)\n\n /**\n * Persist data\n */\n await request.sessionClient.commit()\n\n /**\n * Cleanup if request fails\n */\n return async (error: any) => {\n if (error) {\n await request.sessionClient.destroy()\n }\n }\n })\n\n request.teardown(async (response) => {\n const sessionId = response.cookie(config.cookieName)\n\n /**\n * Reading session data from the response cookie\n */\n response.sessionBag = sessionId\n ? await response.request.sessionClient.load(sessionId.value)\n : {\n values: {},\n flashMessages: {},\n }\n\n /**\n * Cleanup state\n */\n await request.sessionClient.destroy(sessionId?.value)\n })\n })\n }\n\n return pluginFn\n}\n"],"mappings":"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","names":[]}
@@ -1,115 +1,88 @@
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 { configProvider } from '@adonisjs/core';
10
- import { RuntimeException } from '@poppinss/utils';
11
- import { decoratorsCollection } from '@japa/browser-client';
12
- import { SessionClient } from '../../client.js';
13
- /**
14
- * Transforming AdonisJS same site option to playwright
15
- * same site option.
16
- */
1
+ import {
2
+ SessionClient
3
+ } from "../../../chunk-S6P3TBEK.js";
4
+ import "../../../chunk-TE5JP3SX.js";
5
+ import "../../../chunk-WBAYBMJJ.js";
6
+
7
+ // src/plugins/japa/browser_client.ts
8
+ import { configProvider } from "@adonisjs/core";
9
+ import { RuntimeException } from "@poppinss/utils";
10
+ import { decoratorsCollection } from "@japa/browser-client";
17
11
  function transformSameSiteOption(sameSite) {
18
- if (!sameSite) {
19
- return;
20
- }
21
- if (sameSite === true || sameSite === 'strict') {
22
- return 'Strict';
23
- }
24
- if (sameSite === 'lax') {
25
- return 'Lax';
26
- }
27
- if (sameSite === 'none') {
28
- return 'None';
29
- }
12
+ if (!sameSite) {
13
+ return;
14
+ }
15
+ if (sameSite === true || sameSite === "strict") {
16
+ return "Strict";
17
+ }
18
+ if (sameSite === "lax") {
19
+ return "Lax";
20
+ }
21
+ if (sameSite === "none") {
22
+ return "None";
23
+ }
30
24
  }
31
- /**
32
- * Transforming AdonisJS session config to playwright cookie options.
33
- */
34
25
  function getSessionCookieOptions(config, cookieOptions) {
35
- const options = { ...config.cookie, ...cookieOptions };
36
- return {
37
- ...options,
38
- expires: undefined,
39
- sameSite: transformSameSiteOption(options.sameSite),
40
- };
26
+ const options = { ...config.cookie, ...cookieOptions };
27
+ return {
28
+ ...options,
29
+ expires: void 0,
30
+ sameSite: transformSameSiteOption(options.sameSite)
31
+ };
41
32
  }
42
- /**
43
- * Hooks AdonisJS Session with the Japa browser client
44
- * plugin
45
- */
46
- export const sessionBrowserClient = (app) => {
47
- const pluginFn = async function () {
48
- const sessionConfigProvider = app.config.get('session', {});
49
- /**
50
- * Resolve config from the provider
51
- */
52
- const config = await configProvider.resolve(app, sessionConfigProvider);
53
- if (!config) {
54
- throw new RuntimeException('Invalid "config/session.ts" file. Make sure you are using the "defineConfig" method');
55
- }
56
- decoratorsCollection.register({
57
- context(context) {
58
- /**
59
- * Reference to session client per browser context
60
- */
61
- context.sessionClient = new SessionClient(config.stores.memory());
62
- /**
63
- * Initiating session store
64
- */
65
- context.initiateSession = async function (options) {
66
- const sessionId = await context.getCookie(config.cookieName);
67
- if (sessionId) {
68
- context.sessionClient.sessionId = sessionId;
69
- return;
70
- }
71
- await context.setCookie(config.cookieName, context.sessionClient.sessionId, getSessionCookieOptions(config, options));
72
- };
73
- /**
74
- * Returns session data
75
- */
76
- context.getSession = async function () {
77
- await context.initiateSession();
78
- const sessionData = await context.sessionClient.load();
79
- return sessionData.values;
80
- };
81
- /**
82
- * Returns flash messages from the data store
83
- */
84
- context.getFlashMessages = async function () {
85
- await context.initiateSession();
86
- const sessionData = await context.sessionClient.load();
87
- return sessionData.flashMessages;
88
- };
89
- /**
90
- * Set session data
91
- */
92
- context.setSession = async function (values) {
93
- await context.initiateSession();
94
- context.sessionClient.merge(values);
95
- await context.sessionClient.commit();
96
- };
97
- /**
98
- * Set flash messages
99
- */
100
- context.setFlashMessages = async function (values) {
101
- await context.initiateSession();
102
- context.sessionClient.flash(values);
103
- await context.sessionClient.commit();
104
- };
105
- /**
106
- * Destroy session when context is closed
107
- */
108
- context.on('close', async function () {
109
- await context.sessionClient.destroy();
110
- });
111
- },
33
+ var sessionBrowserClient = (app) => {
34
+ const pluginFn = async function() {
35
+ const sessionConfigProvider = app.config.get("session", {});
36
+ const config = await configProvider.resolve(app, sessionConfigProvider);
37
+ if (!config) {
38
+ throw new RuntimeException(
39
+ 'Invalid "config/session.ts" file. Make sure you are using the "defineConfig" method'
40
+ );
41
+ }
42
+ decoratorsCollection.register({
43
+ context(context) {
44
+ context.sessionClient = new SessionClient(config.stores.memory());
45
+ context.initiateSession = async function(options) {
46
+ const sessionId = await context.getCookie(config.cookieName);
47
+ if (sessionId) {
48
+ context.sessionClient.sessionId = sessionId;
49
+ return;
50
+ }
51
+ await context.setCookie(
52
+ config.cookieName,
53
+ context.sessionClient.sessionId,
54
+ getSessionCookieOptions(config, options)
55
+ );
56
+ };
57
+ context.getSession = async function() {
58
+ await context.initiateSession();
59
+ const sessionData = await context.sessionClient.load();
60
+ return sessionData.values;
61
+ };
62
+ context.getFlashMessages = async function() {
63
+ await context.initiateSession();
64
+ const sessionData = await context.sessionClient.load();
65
+ return sessionData.flashMessages;
66
+ };
67
+ context.setSession = async function(values) {
68
+ await context.initiateSession();
69
+ context.sessionClient.merge(values);
70
+ await context.sessionClient.commit();
71
+ };
72
+ context.setFlashMessages = async function(values) {
73
+ await context.initiateSession();
74
+ context.sessionClient.flash(values);
75
+ await context.sessionClient.commit();
76
+ };
77
+ context.on("close", async function() {
78
+ await context.sessionClient.destroy();
112
79
  });
113
- };
114
- return pluginFn;
80
+ }
81
+ });
82
+ };
83
+ return pluginFn;
84
+ };
85
+ export {
86
+ sessionBrowserClient
115
87
  };
88
+ //# sourceMappingURL=browser_client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/plugins/japa/browser_client.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 { PluginFn } from '@japa/runner/types'\nimport { decoratorsCollection } from '@japa/browser-client'\nimport type { ApplicationService } from '@adonisjs/core/types'\nimport type { CookieOptions as AdonisCookieOptions } from '@adonisjs/core/types/http'\n\nimport { SessionClient } from '../../client.js'\nimport type { SessionConfig, SessionData } from '../../types.js'\n\ndeclare module 'playwright' {\n export interface BrowserContext {\n sessionClient: SessionClient\n\n /**\n * Initiate session. The session id cookie will be defined\n * if missing\n */\n initiateSession(options?: Partial<AdonisCookieOptions>): Promise<void>\n\n /**\n * Returns data from the session store\n */\n getSession(): Promise<any>\n\n /**\n * Returns data from the session store\n */\n getFlashMessages(): Promise<any>\n\n /**\n * Set session data\n */\n setSession(values: SessionData): Promise<void>\n\n /**\n * Set flash messages\n */\n setFlashMessages(values: SessionData): Promise<void>\n }\n}\n\n/**\n * Transforming AdonisJS same site option to playwright\n * same site option.\n */\nfunction transformSameSiteOption(sameSite?: AdonisCookieOptions['sameSite']) {\n if (!sameSite) {\n return\n }\n\n if (sameSite === true || sameSite === 'strict') {\n return 'Strict' as const\n }\n\n if (sameSite === 'lax') {\n return 'Lax' as const\n }\n\n if (sameSite === 'none') {\n return 'None' as const\n }\n}\n\n/**\n * Transforming AdonisJS session config to playwright cookie options.\n */\nfunction getSessionCookieOptions(\n config: SessionConfig,\n cookieOptions?: Partial<AdonisCookieOptions>\n) {\n const options = { ...config.cookie, ...cookieOptions }\n return {\n ...options,\n expires: undefined,\n sameSite: transformSameSiteOption(options.sameSite),\n }\n}\n\n/**\n * Hooks AdonisJS Session with the Japa browser client\n * plugin\n */\nexport const sessionBrowserClient = (app: ApplicationService) => {\n const pluginFn: PluginFn = async function () {\n const sessionConfigProvider = app.config.get('session', {})\n\n /**\n * Resolve config from the provider\n */\n const config = await configProvider.resolve<any>(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 decoratorsCollection.register({\n context(context) {\n /**\n * Reference to session client per browser context\n */\n context.sessionClient = new SessionClient(config.stores.memory())\n\n /**\n * Initiating session store\n */\n context.initiateSession = async function (options) {\n const sessionId = await context.getCookie(config.cookieName)\n if (sessionId) {\n context.sessionClient.sessionId = sessionId\n return\n }\n\n await context.setCookie(\n config.cookieName,\n context.sessionClient.sessionId,\n getSessionCookieOptions(config, options)\n )\n }\n\n /**\n * Returns session data\n */\n context.getSession = async function () {\n await context.initiateSession()\n const sessionData = await context.sessionClient.load()\n return sessionData.values\n }\n\n /**\n * Returns flash messages from the data store\n */\n context.getFlashMessages = async function () {\n await context.initiateSession()\n const sessionData = await context.sessionClient.load()\n return sessionData.flashMessages\n }\n\n /**\n * Set session data\n */\n context.setSession = async function (values) {\n await context.initiateSession()\n context.sessionClient.merge(values)\n await context.sessionClient.commit()\n }\n\n /**\n * Set flash messages\n */\n context.setFlashMessages = async function (values) {\n await context.initiateSession()\n context.sessionClient.flash(values)\n await context.sessionClient.commit()\n }\n\n /**\n * Destroy session when context is closed\n */\n context.on('close', async function () {\n await context.sessionClient.destroy()\n })\n },\n })\n }\n\n return pluginFn\n}\n"],"mappings":";;;;;;;AASA,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AAEjC,SAAS,4BAA4B;AA2CrC,SAAS,wBAAwB,UAA4C;AAC3E,MAAI,CAAC,UAAU;AACb;AAAA,EACF;AAEA,MAAI,aAAa,QAAQ,aAAa,UAAU;AAC9C,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,OAAO;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,QAAQ;AACvB,WAAO;AAAA,EACT;AACF;AAKA,SAAS,wBACP,QACA,eACA;AACA,QAAM,UAAU,EAAE,GAAG,OAAO,QAAQ,GAAG,cAAc;AACrD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS;AAAA,IACT,UAAU,wBAAwB,QAAQ,QAAQ;AAAA,EACpD;AACF;AAMO,IAAM,uBAAuB,CAAC,QAA4B;AAC/D,QAAM,WAAqB,iBAAkB;AAC3C,UAAM,wBAAwB,IAAI,OAAO,IAAI,WAAW,CAAC,CAAC;AAK1D,UAAM,SAAS,MAAM,eAAe,QAAa,KAAK,qBAAqB;AAC3E,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,yBAAqB,SAAS;AAAA,MAC5B,QAAQ,SAAS;AAIf,gBAAQ,gBAAgB,IAAI,cAAc,OAAO,OAAO,OAAO,CAAC;AAKhE,gBAAQ,kBAAkB,eAAgB,SAAS;AACjD,gBAAM,YAAY,MAAM,QAAQ,UAAU,OAAO,UAAU;AAC3D,cAAI,WAAW;AACb,oBAAQ,cAAc,YAAY;AAClC;AAAA,UACF;AAEA,gBAAM,QAAQ;AAAA,YACZ,OAAO;AAAA,YACP,QAAQ,cAAc;AAAA,YACtB,wBAAwB,QAAQ,OAAO;AAAA,UACzC;AAAA,QACF;AAKA,gBAAQ,aAAa,iBAAkB;AACrC,gBAAM,QAAQ,gBAAgB;AAC9B,gBAAM,cAAc,MAAM,QAAQ,cAAc,KAAK;AACrD,iBAAO,YAAY;AAAA,QACrB;AAKA,gBAAQ,mBAAmB,iBAAkB;AAC3C,gBAAM,QAAQ,gBAAgB;AAC9B,gBAAM,cAAc,MAAM,QAAQ,cAAc,KAAK;AACrD,iBAAO,YAAY;AAAA,QACrB;AAKA,gBAAQ,aAAa,eAAgB,QAAQ;AAC3C,gBAAM,QAAQ,gBAAgB;AAC9B,kBAAQ,cAAc,MAAM,MAAM;AAClC,gBAAM,QAAQ,cAAc,OAAO;AAAA,QACrC;AAKA,gBAAQ,mBAAmB,eAAgB,QAAQ;AACjD,gBAAM,QAAQ,gBAAgB;AAC9B,kBAAQ,cAAc,MAAM,MAAM;AAClC,gBAAM,QAAQ,cAAc,OAAO;AAAA,QACrC;AAKA,gBAAQ,GAAG,SAAS,iBAAkB;AACpC,gBAAM,QAAQ,cAAc,QAAQ;AAAA,QACtC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
@@ -111,16 +111,25 @@ export declare class Session {
111
111
  * Empty the session store
112
112
  */
113
113
  clear(): void;
114
- /**
115
- * Flash validation error messages. Make sure the error
116
- * is an instance of VineJS ValidationException
117
- */
118
- flashValidationErrors(error: HttpError): void;
119
114
  /**
120
115
  * Add a key-value pair to flash messages
121
116
  */
122
117
  flash(key: string, value: AllowedSessionValues): void;
123
118
  flash(keyValue: SessionData): void;
119
+ /**
120
+ * Flash errors to the errorsBag. You can read these
121
+ * errors via the "@error" tag.
122
+ *
123
+ * Appends new messages to the existing collection.
124
+ */
125
+ flashErrors(errorsCollection: Record<string, string | string[]>): void;
126
+ /**
127
+ * Flash validation error messages. Make sure the error
128
+ * is an instance of VineJS ValidationException.
129
+ *
130
+ * Overrides existing inputErrors
131
+ */
132
+ flashValidationErrors(error: HttpError): void;
124
133
  /**
125
134
  * Flash form input data to the flash messages store
126
135
  */
@@ -1,58 +1,10 @@
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 { ExceptionHandler } from '@adonisjs/core/http';
10
- import { Session } from './session.js';
11
- /**
12
- * Overwriting validation exception renderer
13
- */
14
- const originalErrorHandler = ExceptionHandler.prototype.renderValidationErrorAsHTML;
15
- ExceptionHandler.macro('renderValidationErrorAsHTML', async function (error, ctx) {
16
- if (ctx.session) {
17
- ctx.session.flashValidationErrors(error);
18
- ctx.response.redirect('back', true);
19
- }
20
- else {
21
- return originalErrorHandler(error, ctx);
22
- }
23
- });
24
- /**
25
- * Session middleware is used to initiate the session store
26
- * and commit its values during an HTTP request
27
- */
28
- export default class SessionMiddleware {
29
- #config;
30
- #emitter;
31
- constructor(config, emitter) {
32
- this.#config = config;
33
- this.#emitter = emitter;
34
- }
35
- async handle(ctx, next) {
36
- if (!this.#config.enabled) {
37
- return next();
38
- }
39
- ctx.session = new Session(this.#config, this.#config.stores[this.#config.store], // reference to store factory
40
- this.#emitter, ctx);
41
- /**
42
- * Initiate session store
43
- */
44
- await ctx.session.initiate(false);
45
- /**
46
- * Call next middlewares or route handler
47
- */
48
- const response = await next();
49
- /**
50
- * Commit store mutations
51
- */
52
- await ctx.session.commit();
53
- /**
54
- * Return response
55
- */
56
- return response;
57
- }
58
- }
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
+ export {
8
+ SessionMiddleware as default
9
+ };
10
+ //# sourceMappingURL=session_middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -15,12 +15,12 @@ export declare class ReadOnlyValuesStore {
15
15
  /**
16
16
  * Get value for a given key
17
17
  */
18
- get(key: string, defaultValue?: any): any;
18
+ get(key: string | string[], defaultValue?: any): any;
19
19
  /**
20
20
  * A boolean to know if value exists. Extra guards to check
21
21
  * arrays for it's length as well.
22
22
  */
23
- has(key: string, checkForArraysLength?: boolean): boolean;
23
+ has(key: string | string[], checkForArraysLength?: boolean): boolean;
24
24
  /**
25
25
  * Get all values
26
26
  */
@@ -52,26 +52,26 @@ export declare class ValuesStore extends ReadOnlyValuesStore {
52
52
  /**
53
53
  * Set key/value pair
54
54
  */
55
- set(key: string, value: AllowedSessionValues): void;
55
+ set(key: string | string[], value: AllowedSessionValues): void;
56
56
  /**
57
57
  * Remove key
58
58
  */
59
- unset(key: string): void;
59
+ unset(key: string | string[]): void;
60
60
  /**
61
61
  * Pull value from the store. It is same as calling
62
62
  * store.get and then store.unset
63
63
  */
64
- pull(key: string, defaultValue?: any): any;
64
+ pull(key: string | string[], defaultValue?: any): any;
65
65
  /**
66
66
  * Increment number. The method raises an error when
67
67
  * nderlying value is not a number
68
68
  */
69
- increment(key: string, steps?: number): void;
69
+ increment(key: string | string[], steps?: number): void;
70
70
  /**
71
71
  * Increment number. The method raises an error when
72
72
  * nderlying value is not a number
73
73
  */
74
- decrement(key: string, steps?: number): void;
74
+ decrement(key: string | string[], steps?: number): void;
75
75
  /**
76
76
  * Overwrite existing store data with new values.
77
77
  */