@common-stack/rollup-vite-utils 6.0.6-alpha.38 → 6.0.6-alpha.45
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/lib/default-config.json.cjs +2 -2
- package/lib/default-config.json.js +2 -2
- package/lib/index.cjs +1 -1
- package/lib/index.js +1 -1
- package/lib/interfaces/types.cjs +6 -0
- package/lib/interfaces/types.cjs.map +1 -0
- package/lib/interfaces/types.d.ts +37 -24
- package/lib/interfaces/types.js +6 -0
- package/lib/interfaces/types.js.map +1 -0
- package/lib/utils/withErrorHandleUtil.cjs +3 -7
- package/lib/utils/withErrorHandleUtil.cjs.map +1 -1
- package/lib/utils/withErrorHandleUtil.js +3 -7
- package/lib/utils/withErrorHandleUtil.js.map +1 -1
- package/lib/vite-wrappers/generators/clientLoaderGenerator.cjs +131 -0
- package/lib/vite-wrappers/generators/clientLoaderGenerator.cjs.map +1 -0
- package/lib/vite-wrappers/generators/clientLoaderGenerator.d.ts +17 -0
- package/lib/vite-wrappers/generators/clientLoaderGenerator.js +131 -0
- package/lib/vite-wrappers/generators/clientLoaderGenerator.js.map +1 -0
- package/lib/vite-wrappers/generators/generateHasConfiguration.cjs +23 -0
- package/lib/vite-wrappers/generators/generateHasConfiguration.cjs.map +1 -0
- package/lib/vite-wrappers/generators/generateHasConfiguration.d.ts +19 -0
- package/lib/vite-wrappers/generators/generateHasConfiguration.js +23 -0
- package/lib/vite-wrappers/generators/generateHasConfiguration.js.map +1 -0
- package/lib/vite-wrappers/generators/generateHasPermission.cjs +29 -0
- package/lib/vite-wrappers/generators/generateHasPermission.cjs.map +1 -0
- package/lib/vite-wrappers/generators/generateHasPermission.d.ts +9 -0
- package/lib/vite-wrappers/generators/generateHasPermission.js +29 -0
- package/lib/vite-wrappers/generators/generateHasPermission.js.map +1 -0
- package/lib/vite-wrappers/generators/generateHasPermission.test.d.ts +1 -0
- package/lib/vite-wrappers/{loaderGenerator.cjs → generators/loaderGenerator.cjs} +27 -129
- package/lib/vite-wrappers/generators/loaderGenerator.cjs.map +1 -0
- package/lib/vite-wrappers/{loaderGenerator.d.ts → generators/loaderGenerator.d.ts} +3 -19
- package/lib/vite-wrappers/{loaderGenerator.js → generators/loaderGenerator.js} +26 -128
- package/lib/vite-wrappers/generators/loaderGenerator.js.map +1 -0
- package/lib/vite-wrappers/generators/loaderGenerator.test.d.ts +1 -0
- package/lib/vite-wrappers/json-wrappers.cjs +5 -6
- package/lib/vite-wrappers/json-wrappers.cjs.map +1 -1
- package/lib/vite-wrappers/json-wrappers.js +5 -6
- package/lib/vite-wrappers/json-wrappers.js.map +1 -1
- package/lib/vite-wrappers/wrapperComponent.cjs +17 -48
- package/lib/vite-wrappers/wrapperComponent.cjs.map +1 -1
- package/lib/vite-wrappers/wrapperComponent.js +17 -48
- package/lib/vite-wrappers/wrapperComponent.js.map +1 -1
- package/package.json +2 -2
- package/lib/vite-wrappers/loaderGenerator.cjs.map +0 -1
- package/lib/vite-wrappers/loaderGenerator.js.map +0 -1
- /package/lib/vite-wrappers/{loaderGenerator.test.d.ts → generators/clientLoaderGenerator.test.d.ts} +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';/**
|
|
2
|
+
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
3
|
+
*
|
|
4
|
+
* @param options - The options containing the authority and extraPermissions to check.
|
|
5
|
+
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
6
|
+
* @returns The permission-check logic string.
|
|
7
|
+
*/
|
|
8
|
+
function generateHasPermission(options, isClient = false) {
|
|
9
|
+
const hasLoader = isClient ? options.hasClientLoader : options.hasLoader;
|
|
10
|
+
let generates = '';
|
|
11
|
+
if (options.authority?.length > 0 || options.extraPermissions?.length > 0) {
|
|
12
|
+
generates = `
|
|
13
|
+
if (permissions !== null) {
|
|
14
|
+
const permissionKeys = ${JSON.stringify(options.authority)} || [];
|
|
15
|
+
let extraPermissions = ${JSON.stringify(options.extraPermissions)} || [];
|
|
16
|
+
extraPermissions = permissionKeys.concat(extraPermissions);
|
|
17
|
+
permissions = {
|
|
18
|
+
resolveConfiguration: pick(permissions?.resolveConfiguration, extraPermissions)
|
|
19
|
+
};
|
|
20
|
+
`;
|
|
21
|
+
if (hasLoader) {
|
|
22
|
+
generates += `
|
|
23
|
+
hasPermissions = permissionKeys.some(key => ['Allow'].includes(get(permissions.resolveConfiguration, key)));
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
generates += `}`;
|
|
27
|
+
}
|
|
28
|
+
return generates;
|
|
29
|
+
}exports.generateHasPermission=generateHasPermission;//# sourceMappingURL=generateHasPermission.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateHasPermission.cjs","sources":["../../../src/vite-wrappers/generators/generateHasPermission.ts"],"sourcesContent":[null],"names":[],"mappings":"aAEA;;;;;;AAMG;SACa,qBAAqB,CAAC,OAAiB,EAAE,WAAoB,KAAK,EAAA;AAC9E,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IACzE,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,IAAA,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,MAAM,GAAG,CAAC,EAAE;AACvE,QAAA,SAAS,GAAG,CAAA;;AAEiB,mCAAA,EAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,mCAAA,EAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;;;;;SAKpE,CAAC;QACF,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,IAAI,CAAA;;aAEZ,CAAC;SACL;QACD,SAAS,IAAI,GAAG,CAAC;KACpB;AACD,IAAA,OAAO,SAAS,CAAC;AACrB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IOptions } from '../../interfaces/types';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
4
|
+
*
|
|
5
|
+
* @param options - The options containing the authority and extraPermissions to check.
|
|
6
|
+
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
7
|
+
* @returns The permission-check logic string.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateHasPermission(options: IOptions, isClient?: boolean): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
3
|
+
*
|
|
4
|
+
* @param options - The options containing the authority and extraPermissions to check.
|
|
5
|
+
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
6
|
+
* @returns The permission-check logic string.
|
|
7
|
+
*/
|
|
8
|
+
function generateHasPermission(options, isClient = false) {
|
|
9
|
+
const hasLoader = isClient ? options.hasClientLoader : options.hasLoader;
|
|
10
|
+
let generates = '';
|
|
11
|
+
if (options.authority?.length > 0 || options.extraPermissions?.length > 0) {
|
|
12
|
+
generates = `
|
|
13
|
+
if (permissions !== null) {
|
|
14
|
+
const permissionKeys = ${JSON.stringify(options.authority)} || [];
|
|
15
|
+
let extraPermissions = ${JSON.stringify(options.extraPermissions)} || [];
|
|
16
|
+
extraPermissions = permissionKeys.concat(extraPermissions);
|
|
17
|
+
permissions = {
|
|
18
|
+
resolveConfiguration: pick(permissions?.resolveConfiguration, extraPermissions)
|
|
19
|
+
};
|
|
20
|
+
`;
|
|
21
|
+
if (hasLoader) {
|
|
22
|
+
generates += `
|
|
23
|
+
hasPermissions = permissionKeys.some(key => ['Allow'].includes(get(permissions.resolveConfiguration, key)));
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
generates += `}`;
|
|
27
|
+
}
|
|
28
|
+
return generates;
|
|
29
|
+
}export{generateHasPermission};//# sourceMappingURL=generateHasPermission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateHasPermission.js","sources":["../../../src/vite-wrappers/generators/generateHasPermission.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;AAMG;SACa,qBAAqB,CAAC,OAAiB,EAAE,WAAoB,KAAK,EAAA;AAC9E,IAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IACzE,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,IAAA,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,MAAM,GAAG,CAAC,EAAE;AACvE,QAAA,SAAS,GAAG,CAAA;;AAEiB,mCAAA,EAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,mCAAA,EAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;;;;;SAKpE,CAAC;QACF,IAAI,SAAS,EAAE;AACX,YAAA,SAAS,IAAI,CAAA;;aAEZ,CAAC;SACL;QACD,SAAS,IAAI,GAAG,CAAC;KACpB;AACD,IAAA,OAAO,SAAS,CAAC;AACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var lodashEs=require('lodash-es');// Utility to generate a key for the query, converting its format for use in client-side and server-side loaders
|
|
1
|
+
'use strict';var lodashEs=require('lodash-es'),generateHasPermission=require('./generateHasPermission.cjs'),generateHasConfiguration=require('./generateHasConfiguration.cjs');// Utility to generate a key for the query, converting its format for use in client-side and server-side loaders
|
|
2
2
|
const generateDeferKey = (key) => lodashEs.camelCase(key.replace('Get', '')).replace('Document', 'Query');
|
|
3
3
|
/**
|
|
4
4
|
* Generates the server-side loader function for handling GraphQL queries.
|
|
@@ -12,11 +12,11 @@ const generateServerLoader = ({ queries }) => {
|
|
|
12
12
|
return '';
|
|
13
13
|
}
|
|
14
14
|
return `
|
|
15
|
-
export const defaultServerLoader = async ({ context, params }) => {
|
|
15
|
+
export const defaultServerLoader = async ({ context, params, _dataContext = {} }) => {
|
|
16
16
|
const { apolloClient: client } = context;
|
|
17
17
|
const queries = ${Object.entries(queries).reduce((acc, [key, value], index) => {
|
|
18
18
|
const formattedValue = value.includes('queryParamsGenerator_')
|
|
19
|
-
? `queryGeneratorFunc(params).${value.split('queryParamsGenerator_')[1]}`
|
|
19
|
+
? `queryGeneratorFunc({...params, _dataContext}).${value.split('queryParamsGenerator_')[1]}`
|
|
20
20
|
: value;
|
|
21
21
|
return `${acc}${key}:${formattedValue}${index + 1 === Object.keys(queries).length ? '}' : ','}`;
|
|
22
22
|
}, '{')};
|
|
@@ -72,11 +72,16 @@ ${deferredAssignments}
|
|
|
72
72
|
function generateReturnStatement(options, hasMiddleware) {
|
|
73
73
|
const { loaderReturnInfo, isResourceRoute, queries, hasLoader } = options;
|
|
74
74
|
const hasQueries = Object.keys(queries ?? {}).length > 0;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
let responseKey = '';
|
|
76
|
+
if (isResourceRoute) {
|
|
77
|
+
responseKey = 'json';
|
|
78
|
+
}
|
|
79
|
+
else if (loaderReturnInfo?.keys?.length > 0 || hasQueries) {
|
|
80
|
+
responseKey = 'defer';
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
responseKey = loaderReturnInfo?.returnType || '';
|
|
84
|
+
}
|
|
80
85
|
const defaultLoaderData = hasQueries ? 'defaultLoaderData' : '{}';
|
|
81
86
|
const middlewareData = hasMiddleware ? '{ permissions, dataContext: rest, configurations }' : '{}';
|
|
82
87
|
const respondOptions = loaderReturnInfo?.hasOptions ? 'respondOptions' : '';
|
|
@@ -104,48 +109,20 @@ function generateMiddlewarePushes(options) {
|
|
|
104
109
|
?.map((_, index) => `middlewareStack.push({ name: "middleware${index + 1}", func: middleware${index + 1} });`)
|
|
105
110
|
.join('\n');
|
|
106
111
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
109
|
-
*
|
|
110
|
-
* @param options - The options containing the authority and extraPermissions to check.
|
|
111
|
-
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
112
|
-
* @returns The permission-check logic string.
|
|
113
|
-
*/
|
|
114
|
-
function generateHasPermission(options, isClient = false) {
|
|
115
|
-
const hasLoader = isClient ? options.hasClientLoader : options.hasLoader;
|
|
116
|
-
let generates = '';
|
|
117
|
-
if (options.authority?.length > 0 || options.extraPermissions?.length > 0) {
|
|
118
|
-
generates = `
|
|
119
|
-
if (permissions !== null) {
|
|
120
|
-
const permissionKeys = ${JSON.stringify(options.authority)} || [];
|
|
121
|
-
let extraPermissions = ${JSON.stringify(options.extraPermissions)} || [];
|
|
122
|
-
extraPermissions = permissionKeys.concat(extraPermissions);
|
|
123
|
-
permissions = {
|
|
124
|
-
resolveConfiguration: pick(permissions?.resolveConfiguration, extraPermissions)
|
|
125
|
-
};
|
|
126
|
-
`;
|
|
127
|
-
if (hasLoader) {
|
|
128
|
-
generates += `
|
|
129
|
-
hasPermissions = permissionKeys.some(key => ['Allow'].includes(get(permissions.resolveConfiguration, key)));
|
|
130
|
-
`;
|
|
131
|
-
}
|
|
132
|
-
generates += `}`;
|
|
133
|
-
}
|
|
134
|
-
return generates;
|
|
135
|
-
}
|
|
136
112
|
/**
|
|
137
113
|
* Generates the export functions for loaders and actions based on the provided options.
|
|
138
114
|
* Handles middleware and permission checks if present.
|
|
139
115
|
*
|
|
140
|
-
* @param sourceExport - The source export string to append additional exports.
|
|
141
116
|
* @param options - The configuration options including middleware, queries, etc.
|
|
142
117
|
* @param hasMiddleware - A flag indicating if middleware exists.
|
|
143
118
|
* @param hasQueries - A flag indicating if GraphQL queries are present.
|
|
144
119
|
* @returns The updated export string.
|
|
145
120
|
*/
|
|
146
|
-
function generateLoaderExports(
|
|
121
|
+
function generateLoaderExports(options, hasMiddleware = false, hasQueries = false) {
|
|
122
|
+
let loaderExport = '';
|
|
123
|
+
// Generate server-side loader if queries are present
|
|
147
124
|
if (hasQueries) {
|
|
148
|
-
|
|
125
|
+
loaderExport += generateServerLoader(options);
|
|
149
126
|
}
|
|
150
127
|
const getMiddlewareOptions = () => {
|
|
151
128
|
if (options.requireAuth) {
|
|
@@ -155,7 +132,7 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
155
132
|
return '{}';
|
|
156
133
|
};
|
|
157
134
|
const { resourceUri, configurations } = options;
|
|
158
|
-
|
|
135
|
+
loaderExport += `
|
|
159
136
|
export async function loader(params) {
|
|
160
137
|
${hasMiddleware ? 'const middlewareStack = [];' : ''}
|
|
161
138
|
const middlewareOptions = ${getMiddlewareOptions()}
|
|
@@ -164,8 +141,8 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
164
141
|
${options.authority?.length > 0 || options.extraPermissions?.length > 0
|
|
165
142
|
? 'middlewareStack.push({ name: "lifecycle", func: lifecycleMiddleware });\n'
|
|
166
143
|
: ''}
|
|
167
|
-
${options.authority?.length > 0 ? 'middlewareStack.push({ name: "permission", func: permissionMiddleware });\n' : ''}
|
|
168
|
-
${options.
|
|
144
|
+
${options.authority?.length > 0 || options.extraPermissions?.length > 0 ? 'middlewareStack.push({ name: "permission", func: permissionMiddleware });\n' : ''}
|
|
145
|
+
${options.configurations.length > 0 ? 'middlewareStack.push({ name: "configurations", func: configurationMiddleware });\n' : ''}
|
|
169
146
|
const paramsFromOptions = ${options.resourceUri
|
|
170
147
|
? `{ resourceUri: '${resourceUri}', configurations: ${JSON.stringify(configurations ?? [])} }\n`
|
|
171
148
|
: '{}'};
|
|
@@ -178,9 +155,12 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
178
155
|
: ''}
|
|
179
156
|
let hasPermissions = true;
|
|
180
157
|
let loaderErrors = [];
|
|
181
|
-
${generateHasPermission(options)}
|
|
158
|
+
${generateHasPermission.generateHasPermission(options)}
|
|
159
|
+
${generateHasConfiguration.generateConfigurationLogic(options)}
|
|
160
|
+
const paramsWithMiddlewareData = ${hasMiddleware ? `{ ...params, _dataContext: middlewareData }` : '{ ...params }'};
|
|
161
|
+
|
|
182
162
|
const defaultLoaderResult = ${hasQueries
|
|
183
|
-
? `hasPermissions ? await withErrorHandler(defaultServerLoader,
|
|
163
|
+
? `hasPermissions ? await withErrorHandler(defaultServerLoader, paramsWithMiddlewareData) : { data: {}, errors: [] };\n
|
|
184
164
|
loaderErrors = defaultLoaderResult.errors`
|
|
185
165
|
: '{ data: {}, errors: [] }'};
|
|
186
166
|
const defaultLoaderData = defaultLoaderResult.data;
|
|
@@ -196,91 +176,9 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
196
176
|
? `let loaderData = hasPermissions && await withErrorHandler(loaderFunc, params) || { data: [], errors: [] };\n
|
|
197
177
|
loaderErrors = loaderData?.errors;\n`
|
|
198
178
|
: ''}
|
|
199
|
-
|
|
200
179
|
|
|
201
180
|
${generateLoaderReturnLogic(options)}
|
|
202
181
|
${generateReturnStatement(options, hasMiddleware)}
|
|
203
182
|
}`;
|
|
204
|
-
return
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Generates the client-side loader logic for fetching data on the client-side, including caching mechanisms.
|
|
208
|
-
*
|
|
209
|
-
* @param queries - The GraphQL queries to fetch on the client-side.
|
|
210
|
-
* @returns The generated client loader function string.
|
|
211
|
-
*/
|
|
212
|
-
const generateClientLoader = ({ queries }) => {
|
|
213
|
-
if (Object.keys(queries ?? {}).length === 0) {
|
|
214
|
-
return '';
|
|
215
|
-
}
|
|
216
|
-
return `
|
|
217
|
-
const defaultClientLoader = async ({params, serverLoader})=>{
|
|
218
|
-
const client = window.__CLIENT_SERVICE__?.apolloClient;
|
|
219
|
-
const container = window.__CLIENT_SERVICE__?.container
|
|
220
|
-
|
|
221
|
-
try {
|
|
222
|
-
const getKey = (documentName:string)=> camelCase(documentName).replace('Document','')
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const queries = ${Object.entries(queries).reduce((acc, [key, value], index) => {
|
|
226
|
-
const formattedValue = value.includes('queryParamsGenerator_')
|
|
227
|
-
? `queryGeneratorFunc(params).${value.split('queryParamsGenerator_')[1]}`
|
|
228
|
-
: value;
|
|
229
|
-
return `${acc}${key}:${formattedValue}${index + 1 === Object.keys(queries).length ? '}' : ','}`;
|
|
230
|
-
}, '{')};
|
|
231
|
-
|
|
232
|
-
const queryKeys: string[] = [${Object.keys(queries)
|
|
233
|
-
.map((key) => lodashEs.camelCase(key.replace('Get', '')).replace('Document', 'Query'))
|
|
234
|
-
.map((key) => `'${key}'`)}]
|
|
235
|
-
let shouldCallServerLoader = false;
|
|
236
|
-
let response = {};
|
|
237
|
-
let cachedData, cacheKey;
|
|
238
|
-
${Object.keys(queries)
|
|
239
|
-
.map((queryDoc, index) => `
|
|
240
|
-
cachedData = client.cache.readQuery({
|
|
241
|
-
query: ${queryDoc},
|
|
242
|
-
variables: queries['${queryDoc}'],
|
|
243
|
-
});
|
|
244
|
-
cacheKey = getKey('${queryDoc}');
|
|
245
|
-
if(!cachedData){
|
|
246
|
-
shouldCallServerLoader = true;
|
|
247
|
-
}
|
|
248
|
-
if(cachedData && cachedData[cacheKey]){
|
|
249
|
-
response[queryKeys[${index}]] = Promise.resolve(cachedData[cacheKey]);
|
|
250
|
-
}
|
|
251
|
-
`)
|
|
252
|
-
.join('')}
|
|
253
|
-
if(!shouldCallServerLoader) return response;
|
|
254
|
-
const serverData = await serverLoader();
|
|
255
|
-
|
|
256
|
-
if(serverData?.errors?.length){
|
|
257
|
-
const store = container.get(ClientTypes.ReduxStore)
|
|
258
|
-
|
|
259
|
-
serverData?.errors?.map((error)=>{
|
|
260
|
-
store.dispatch(error)
|
|
261
|
-
})
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
let queryKey;
|
|
265
|
-
${Object.keys(queries)
|
|
266
|
-
.map((queryDoc, index) => `
|
|
267
|
-
queryKey = queryKeys[${index}];
|
|
268
|
-
if(!serverData[queryKey].then){
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
serverData[queryKey].then(({ data }) => {
|
|
272
|
-
client.cache.writeQuery({
|
|
273
|
-
query: ${queryDoc},
|
|
274
|
-
variables: queries['${queryDoc}'],
|
|
275
|
-
data,
|
|
276
|
-
})
|
|
277
|
-
})
|
|
278
|
-
`)
|
|
279
|
-
.join('')}
|
|
280
|
-
return serverData;
|
|
281
|
-
|
|
282
|
-
}catch(err){
|
|
283
|
-
console.error('Error in defaultClientLoader',err);
|
|
284
|
-
}
|
|
285
|
-
}`;
|
|
286
|
-
};exports.generateClientLoader=generateClientLoader;exports.generateHasPermission=generateHasPermission;exports.generateLoaderExports=generateLoaderExports;exports.generateReturnStatement=generateReturnStatement;exports.generateServerLoader=generateServerLoader;//# sourceMappingURL=loaderGenerator.cjs.map
|
|
183
|
+
return loaderExport;
|
|
184
|
+
}exports.generateLoaderExports=generateLoaderExports;exports.generateReturnStatement=generateReturnStatement;exports.generateServerLoader=generateServerLoader;//# sourceMappingURL=loaderGenerator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaderGenerator.cjs","sources":["../../../src/vite-wrappers/generators/loaderGenerator.ts"],"sourcesContent":[null],"names":["camelCase","generateHasPermission","generateConfigurationLogic"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IOptions } from '
|
|
1
|
+
import { IOptions } from '../../interfaces/types';
|
|
2
2
|
/**
|
|
3
3
|
* Internal function to update the options with default loader configurations.
|
|
4
4
|
* Adds a loaderReturnInfo object to the options, which will be used to handle deferred data loading.
|
|
@@ -6,7 +6,7 @@ import { IOptions } from '../interfaces/types';
|
|
|
6
6
|
* @param options - The options object which will be modified to include loader-related configurations.
|
|
7
7
|
* @returns The updated options object.
|
|
8
8
|
*/
|
|
9
|
-
export declare function internalOptions(options:
|
|
9
|
+
export declare function internalOptions(options: IOptions): IOptions;
|
|
10
10
|
/**
|
|
11
11
|
* Generates the server-side loader function for handling GraphQL queries.
|
|
12
12
|
* It creates the default server loader for fetching data based on provided queries in the options.
|
|
@@ -32,29 +32,13 @@ export declare const generateServerLoader: ({ queries }: Pick<IOptions, "queries
|
|
|
32
32
|
* @returns The return statement string for the loader function.
|
|
33
33
|
*/
|
|
34
34
|
export declare function generateReturnStatement(options: IOptions, hasMiddleware: boolean): string;
|
|
35
|
-
/**
|
|
36
|
-
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
37
|
-
*
|
|
38
|
-
* @param options - The options containing the authority and extraPermissions to check.
|
|
39
|
-
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
40
|
-
* @returns The permission-check logic string.
|
|
41
|
-
*/
|
|
42
|
-
export declare function generateHasPermission(options: IOptions, isClient?: boolean): string;
|
|
43
35
|
/**
|
|
44
36
|
* Generates the export functions for loaders and actions based on the provided options.
|
|
45
37
|
* Handles middleware and permission checks if present.
|
|
46
38
|
*
|
|
47
|
-
* @param sourceExport - The source export string to append additional exports.
|
|
48
39
|
* @param options - The configuration options including middleware, queries, etc.
|
|
49
40
|
* @param hasMiddleware - A flag indicating if middleware exists.
|
|
50
41
|
* @param hasQueries - A flag indicating if GraphQL queries are present.
|
|
51
42
|
* @returns The updated export string.
|
|
52
43
|
*/
|
|
53
|
-
export declare function generateLoaderExports(
|
|
54
|
-
/**
|
|
55
|
-
* Generates the client-side loader logic for fetching data on the client-side, including caching mechanisms.
|
|
56
|
-
*
|
|
57
|
-
* @param queries - The GraphQL queries to fetch on the client-side.
|
|
58
|
-
* @returns The generated client loader function string.
|
|
59
|
-
*/
|
|
60
|
-
export declare const generateClientLoader: ({ queries }: Pick<IOptions, "queries">) => string;
|
|
44
|
+
export declare function generateLoaderExports(options: IOptions, hasMiddleware?: boolean, hasQueries?: boolean): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {camelCase}from'lodash-es';// Utility to generate a key for the query, converting its format for use in client-side and server-side loaders
|
|
1
|
+
import {camelCase}from'lodash-es';import {generateHasPermission}from'./generateHasPermission.js';import {generateConfigurationLogic}from'./generateHasConfiguration.js';// Utility to generate a key for the query, converting its format for use in client-side and server-side loaders
|
|
2
2
|
const generateDeferKey = (key) => camelCase(key.replace('Get', '')).replace('Document', 'Query');
|
|
3
3
|
/**
|
|
4
4
|
* Generates the server-side loader function for handling GraphQL queries.
|
|
@@ -12,11 +12,11 @@ const generateServerLoader = ({ queries }) => {
|
|
|
12
12
|
return '';
|
|
13
13
|
}
|
|
14
14
|
return `
|
|
15
|
-
export const defaultServerLoader = async ({ context, params }) => {
|
|
15
|
+
export const defaultServerLoader = async ({ context, params, _dataContext = {} }) => {
|
|
16
16
|
const { apolloClient: client } = context;
|
|
17
17
|
const queries = ${Object.entries(queries).reduce((acc, [key, value], index) => {
|
|
18
18
|
const formattedValue = value.includes('queryParamsGenerator_')
|
|
19
|
-
? `queryGeneratorFunc(params).${value.split('queryParamsGenerator_')[1]}`
|
|
19
|
+
? `queryGeneratorFunc({...params, _dataContext}).${value.split('queryParamsGenerator_')[1]}`
|
|
20
20
|
: value;
|
|
21
21
|
return `${acc}${key}:${formattedValue}${index + 1 === Object.keys(queries).length ? '}' : ','}`;
|
|
22
22
|
}, '{')};
|
|
@@ -72,11 +72,16 @@ ${deferredAssignments}
|
|
|
72
72
|
function generateReturnStatement(options, hasMiddleware) {
|
|
73
73
|
const { loaderReturnInfo, isResourceRoute, queries, hasLoader } = options;
|
|
74
74
|
const hasQueries = Object.keys(queries ?? {}).length > 0;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
let responseKey = '';
|
|
76
|
+
if (isResourceRoute) {
|
|
77
|
+
responseKey = 'json';
|
|
78
|
+
}
|
|
79
|
+
else if (loaderReturnInfo?.keys?.length > 0 || hasQueries) {
|
|
80
|
+
responseKey = 'defer';
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
responseKey = loaderReturnInfo?.returnType || '';
|
|
84
|
+
}
|
|
80
85
|
const defaultLoaderData = hasQueries ? 'defaultLoaderData' : '{}';
|
|
81
86
|
const middlewareData = hasMiddleware ? '{ permissions, dataContext: rest, configurations }' : '{}';
|
|
82
87
|
const respondOptions = loaderReturnInfo?.hasOptions ? 'respondOptions' : '';
|
|
@@ -104,48 +109,20 @@ function generateMiddlewarePushes(options) {
|
|
|
104
109
|
?.map((_, index) => `middlewareStack.push({ name: "middleware${index + 1}", func: middleware${index + 1} });`)
|
|
105
110
|
.join('\n');
|
|
106
111
|
}
|
|
107
|
-
/**
|
|
108
|
-
* Generates the permission-check logic for loaders, filtering permissions based on authority keys.
|
|
109
|
-
*
|
|
110
|
-
* @param options - The options containing the authority and extraPermissions to check.
|
|
111
|
-
* @param isClient - A flag to specify if it's for client-side loading (default: false).
|
|
112
|
-
* @returns The permission-check logic string.
|
|
113
|
-
*/
|
|
114
|
-
function generateHasPermission(options, isClient = false) {
|
|
115
|
-
const hasLoader = isClient ? options.hasClientLoader : options.hasLoader;
|
|
116
|
-
let generates = '';
|
|
117
|
-
if (options.authority?.length > 0 || options.extraPermissions?.length > 0) {
|
|
118
|
-
generates = `
|
|
119
|
-
if (permissions !== null) {
|
|
120
|
-
const permissionKeys = ${JSON.stringify(options.authority)} || [];
|
|
121
|
-
let extraPermissions = ${JSON.stringify(options.extraPermissions)} || [];
|
|
122
|
-
extraPermissions = permissionKeys.concat(extraPermissions);
|
|
123
|
-
permissions = {
|
|
124
|
-
resolveConfiguration: pick(permissions?.resolveConfiguration, extraPermissions)
|
|
125
|
-
};
|
|
126
|
-
`;
|
|
127
|
-
if (hasLoader) {
|
|
128
|
-
generates += `
|
|
129
|
-
hasPermissions = permissionKeys.some(key => ['Allow'].includes(get(permissions.resolveConfiguration, key)));
|
|
130
|
-
`;
|
|
131
|
-
}
|
|
132
|
-
generates += `}`;
|
|
133
|
-
}
|
|
134
|
-
return generates;
|
|
135
|
-
}
|
|
136
112
|
/**
|
|
137
113
|
* Generates the export functions for loaders and actions based on the provided options.
|
|
138
114
|
* Handles middleware and permission checks if present.
|
|
139
115
|
*
|
|
140
|
-
* @param sourceExport - The source export string to append additional exports.
|
|
141
116
|
* @param options - The configuration options including middleware, queries, etc.
|
|
142
117
|
* @param hasMiddleware - A flag indicating if middleware exists.
|
|
143
118
|
* @param hasQueries - A flag indicating if GraphQL queries are present.
|
|
144
119
|
* @returns The updated export string.
|
|
145
120
|
*/
|
|
146
|
-
function generateLoaderExports(
|
|
121
|
+
function generateLoaderExports(options, hasMiddleware = false, hasQueries = false) {
|
|
122
|
+
let loaderExport = '';
|
|
123
|
+
// Generate server-side loader if queries are present
|
|
147
124
|
if (hasQueries) {
|
|
148
|
-
|
|
125
|
+
loaderExport += generateServerLoader(options);
|
|
149
126
|
}
|
|
150
127
|
const getMiddlewareOptions = () => {
|
|
151
128
|
if (options.requireAuth) {
|
|
@@ -155,7 +132,7 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
155
132
|
return '{}';
|
|
156
133
|
};
|
|
157
134
|
const { resourceUri, configurations } = options;
|
|
158
|
-
|
|
135
|
+
loaderExport += `
|
|
159
136
|
export async function loader(params) {
|
|
160
137
|
${hasMiddleware ? 'const middlewareStack = [];' : ''}
|
|
161
138
|
const middlewareOptions = ${getMiddlewareOptions()}
|
|
@@ -164,8 +141,8 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
164
141
|
${options.authority?.length > 0 || options.extraPermissions?.length > 0
|
|
165
142
|
? 'middlewareStack.push({ name: "lifecycle", func: lifecycleMiddleware });\n'
|
|
166
143
|
: ''}
|
|
167
|
-
${options.authority?.length > 0 ? 'middlewareStack.push({ name: "permission", func: permissionMiddleware });\n' : ''}
|
|
168
|
-
${options.
|
|
144
|
+
${options.authority?.length > 0 || options.extraPermissions?.length > 0 ? 'middlewareStack.push({ name: "permission", func: permissionMiddleware });\n' : ''}
|
|
145
|
+
${options.configurations.length > 0 ? 'middlewareStack.push({ name: "configurations", func: configurationMiddleware });\n' : ''}
|
|
169
146
|
const paramsFromOptions = ${options.resourceUri
|
|
170
147
|
? `{ resourceUri: '${resourceUri}', configurations: ${JSON.stringify(configurations ?? [])} }\n`
|
|
171
148
|
: '{}'};
|
|
@@ -179,8 +156,11 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
179
156
|
let hasPermissions = true;
|
|
180
157
|
let loaderErrors = [];
|
|
181
158
|
${generateHasPermission(options)}
|
|
159
|
+
${generateConfigurationLogic(options)}
|
|
160
|
+
const paramsWithMiddlewareData = ${hasMiddleware ? `{ ...params, _dataContext: middlewareData }` : '{ ...params }'};
|
|
161
|
+
|
|
182
162
|
const defaultLoaderResult = ${hasQueries
|
|
183
|
-
? `hasPermissions ? await withErrorHandler(defaultServerLoader,
|
|
163
|
+
? `hasPermissions ? await withErrorHandler(defaultServerLoader, paramsWithMiddlewareData) : { data: {}, errors: [] };\n
|
|
184
164
|
loaderErrors = defaultLoaderResult.errors`
|
|
185
165
|
: '{ data: {}, errors: [] }'};
|
|
186
166
|
const defaultLoaderData = defaultLoaderResult.data;
|
|
@@ -196,91 +176,9 @@ function generateLoaderExports(sourceExport = '', options, hasMiddleware = false
|
|
|
196
176
|
? `let loaderData = hasPermissions && await withErrorHandler(loaderFunc, params) || { data: [], errors: [] };\n
|
|
197
177
|
loaderErrors = loaderData?.errors;\n`
|
|
198
178
|
: ''}
|
|
199
|
-
|
|
200
179
|
|
|
201
180
|
${generateLoaderReturnLogic(options)}
|
|
202
181
|
${generateReturnStatement(options, hasMiddleware)}
|
|
203
182
|
}`;
|
|
204
|
-
return
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Generates the client-side loader logic for fetching data on the client-side, including caching mechanisms.
|
|
208
|
-
*
|
|
209
|
-
* @param queries - The GraphQL queries to fetch on the client-side.
|
|
210
|
-
* @returns The generated client loader function string.
|
|
211
|
-
*/
|
|
212
|
-
const generateClientLoader = ({ queries }) => {
|
|
213
|
-
if (Object.keys(queries ?? {}).length === 0) {
|
|
214
|
-
return '';
|
|
215
|
-
}
|
|
216
|
-
return `
|
|
217
|
-
const defaultClientLoader = async ({params, serverLoader})=>{
|
|
218
|
-
const client = window.__CLIENT_SERVICE__?.apolloClient;
|
|
219
|
-
const container = window.__CLIENT_SERVICE__?.container
|
|
220
|
-
|
|
221
|
-
try {
|
|
222
|
-
const getKey = (documentName:string)=> camelCase(documentName).replace('Document','')
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const queries = ${Object.entries(queries).reduce((acc, [key, value], index) => {
|
|
226
|
-
const formattedValue = value.includes('queryParamsGenerator_')
|
|
227
|
-
? `queryGeneratorFunc(params).${value.split('queryParamsGenerator_')[1]}`
|
|
228
|
-
: value;
|
|
229
|
-
return `${acc}${key}:${formattedValue}${index + 1 === Object.keys(queries).length ? '}' : ','}`;
|
|
230
|
-
}, '{')};
|
|
231
|
-
|
|
232
|
-
const queryKeys: string[] = [${Object.keys(queries)
|
|
233
|
-
.map((key) => camelCase(key.replace('Get', '')).replace('Document', 'Query'))
|
|
234
|
-
.map((key) => `'${key}'`)}]
|
|
235
|
-
let shouldCallServerLoader = false;
|
|
236
|
-
let response = {};
|
|
237
|
-
let cachedData, cacheKey;
|
|
238
|
-
${Object.keys(queries)
|
|
239
|
-
.map((queryDoc, index) => `
|
|
240
|
-
cachedData = client.cache.readQuery({
|
|
241
|
-
query: ${queryDoc},
|
|
242
|
-
variables: queries['${queryDoc}'],
|
|
243
|
-
});
|
|
244
|
-
cacheKey = getKey('${queryDoc}');
|
|
245
|
-
if(!cachedData){
|
|
246
|
-
shouldCallServerLoader = true;
|
|
247
|
-
}
|
|
248
|
-
if(cachedData && cachedData[cacheKey]){
|
|
249
|
-
response[queryKeys[${index}]] = Promise.resolve(cachedData[cacheKey]);
|
|
250
|
-
}
|
|
251
|
-
`)
|
|
252
|
-
.join('')}
|
|
253
|
-
if(!shouldCallServerLoader) return response;
|
|
254
|
-
const serverData = await serverLoader();
|
|
255
|
-
|
|
256
|
-
if(serverData?.errors?.length){
|
|
257
|
-
const store = container.get(ClientTypes.ReduxStore)
|
|
258
|
-
|
|
259
|
-
serverData?.errors?.map((error)=>{
|
|
260
|
-
store.dispatch(error)
|
|
261
|
-
})
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
let queryKey;
|
|
265
|
-
${Object.keys(queries)
|
|
266
|
-
.map((queryDoc, index) => `
|
|
267
|
-
queryKey = queryKeys[${index}];
|
|
268
|
-
if(!serverData[queryKey].then){
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
serverData[queryKey].then(({ data }) => {
|
|
272
|
-
client.cache.writeQuery({
|
|
273
|
-
query: ${queryDoc},
|
|
274
|
-
variables: queries['${queryDoc}'],
|
|
275
|
-
data,
|
|
276
|
-
})
|
|
277
|
-
})
|
|
278
|
-
`)
|
|
279
|
-
.join('')}
|
|
280
|
-
return serverData;
|
|
281
|
-
|
|
282
|
-
}catch(err){
|
|
283
|
-
console.error('Error in defaultClientLoader',err);
|
|
284
|
-
}
|
|
285
|
-
}`;
|
|
286
|
-
};export{generateClientLoader,generateHasPermission,generateLoaderExports,generateReturnStatement,generateServerLoader};//# sourceMappingURL=loaderGenerator.js.map
|
|
183
|
+
return loaderExport;
|
|
184
|
+
}export{generateLoaderExports,generateReturnStatement,generateServerLoader};//# sourceMappingURL=loaderGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loaderGenerator.js","sources":["../../../src/vite-wrappers/generators/loaderGenerator.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
'use strict';var getRoutes_js=require('@common-stack/client-react/lib/route/get-routes.js'),fs=require('fs'),globAll=require('glob-all'),lodashEs=require('lodash-es'),node_crypto=require('node:crypto'),wrapperComponent=require('./wrapperComponent.cjs'),dialogWrapper=require('./dialog-wrapper.cjs'),iconSwitch=require('./icon-switch.cjs');/* eslint-disable
|
|
1
|
+
'use strict';var getRoutes_js=require('@common-stack/client-react/lib/route/get-routes.js'),fs=require('fs'),globAll=require('glob-all'),lodashEs=require('lodash-es'),node_crypto=require('node:crypto'),wrapperComponent=require('./wrapperComponent.cjs'),dialogWrapper=require('./dialog-wrapper.cjs'),iconSwitch=require('./icon-switch.cjs');/* eslint-disable jest/require-hook */
|
|
2
|
+
/* eslint-disable array-callback-return */
|
|
2
3
|
/**
|
|
3
4
|
* Generates a hash from the source string.
|
|
4
5
|
* Used to create unique route suffixes.
|
|
@@ -105,7 +106,7 @@ const addIconFile = (icon) => (!iconFiles.includes(icon) ? iconFiles.push(icon)
|
|
|
105
106
|
* @param paths - The paths configuration for various modules and components.
|
|
106
107
|
*/
|
|
107
108
|
function defineRoute(routeFn, jsonRoute, { metaJson, settings, paths }) {
|
|
108
|
-
const { routes = null, relativePath: path, componentPath, clientOnly, dialogPath, isResourceRoute, auth = 'optional', hasServerCode = false, hasLoader = false, hasAction = false, hasClientLoader = false, hasClientAction = false, hasComponent = false, hasErrorBoundary = false, hasLinks = false, hasMeta = false, hasHydrateFallback = false, hasShouldRevalidate = false, queryParamsGenerator = false, hasHandle = false, hasHeaders = false, wrapperPaths = [], middlewares = [], authority = [], extraPermissions = [], extraIcons = [], extraLink = [], extraProps = {}, loaderReturnInfo = {}, queries = {}, clientMiddlewares = [], configurations = [], resourceUri, icon, ...rest } = jsonRoute;
|
|
109
|
+
const { routes = null, relativePath: path, componentPath, clientOnly, dialogPath, isResourceRoute, auth = 'optional', hasServerCode = false, hasLoader = false, hasAction = false, hasClientLoader = false, hasClientAction = false, hasComponent = false, hasErrorBoundary = false, hasLinks = false, hasMeta = false, hasHydrateFallback = false, hasShouldRevalidate = false, queryParamsGenerator = false, hasHandle = false, hasHeaders = false, wrapperPaths = [], middlewares = [], authority = [], authorityConfig = {}, extraPermissions = [], extraIcons = [], extraLink = [], extraProps = {}, loaderReturnInfo = {}, queries = {}, clientMiddlewares = [], configurations = [], resourceUri, icon, ...rest } = jsonRoute;
|
|
109
110
|
// Handle icons
|
|
110
111
|
if (icon) {
|
|
111
112
|
if (typeof icon === 'object') {
|
|
@@ -144,10 +145,7 @@ function defineRoute(routeFn, jsonRoute, { metaJson, settings, paths }) {
|
|
|
144
145
|
wrapperPaths.push('$clientOnlyWrapper'); // Add a placeholder for client-only wrapper
|
|
145
146
|
}
|
|
146
147
|
if (authority.length > 0) {
|
|
147
|
-
wrapperPaths.push('$
|
|
148
|
-
}
|
|
149
|
-
if (configurations.length > 0 && resourceUri) {
|
|
150
|
-
wrapperPaths.push('$configurationWrapper'); // Add a placeholder for configuration wrapper
|
|
148
|
+
wrapperPaths.push('$configPermissionWrapper'); // Add a placeholder for permission wrapper
|
|
151
149
|
}
|
|
152
150
|
const requireAuth = !!auth;
|
|
153
151
|
const options = {
|
|
@@ -172,6 +170,7 @@ function defineRoute(routeFn, jsonRoute, { metaJson, settings, paths }) {
|
|
|
172
170
|
suffix: getHash(rest.path || '/'),
|
|
173
171
|
middlewares,
|
|
174
172
|
authority,
|
|
173
|
+
authorityConfig,
|
|
175
174
|
extraLink,
|
|
176
175
|
extraPermissions,
|
|
177
176
|
extraProps: settings.disableExtraProps !== true ? extraProps : {},
|