@zenstackhq/swr 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/generator.js +76 -53
- package/generator.js.map +1 -1
- package/package.json +5 -5
- package/runtime/index.d.ts +48 -46
- package/runtime/index.js +131 -85
- package/runtime/index.js.map +1 -1
package/generator.js
CHANGED
|
@@ -29,6 +29,7 @@ function generate(model, options, dmmf) {
|
|
|
29
29
|
if (options.useSuperJson !== undefined) {
|
|
30
30
|
warnings.push('The option "useSuperJson" is deprecated. The generated hooks always use superjson for serialization.');
|
|
31
31
|
}
|
|
32
|
+
const legacyMutations = options.legacyMutations !== false;
|
|
32
33
|
const models = (0, sdk_1.getDataModels)(model);
|
|
33
34
|
yield (0, sdk_1.generateModelMeta)(project, models, {
|
|
34
35
|
output: path_1.default.join(outDir, '__model_meta.ts'),
|
|
@@ -43,61 +44,61 @@ function generate(model, options, dmmf) {
|
|
|
43
44
|
warnings.push(`Unable to find mapping for model ${dataModel.name}`);
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
|
-
generateModelHooks(project, outDir, dataModel, mapping);
|
|
47
|
+
generateModelHooks(project, outDir, dataModel, mapping, legacyMutations);
|
|
47
48
|
});
|
|
48
49
|
yield (0, sdk_1.saveProject)(project);
|
|
49
50
|
return warnings;
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
53
|
exports.generate = generate;
|
|
53
|
-
function generateModelHooks(project, outDir, model, mapping) {
|
|
54
|
+
function generateModelHooks(project, outDir, model, mapping, legacyMutations) {
|
|
54
55
|
const fileName = (0, change_case_1.paramCase)(model.name);
|
|
55
56
|
const sf = project.createSourceFile(path_1.default.join(outDir, `${fileName}.ts`), undefined, { overwrite: true });
|
|
56
57
|
sf.addStatements('/* eslint-disable */');
|
|
57
58
|
const prismaImport = (0, sdk_1.getPrismaClientImportSpec)(model.$container, outDir);
|
|
58
59
|
sf.addImportDeclaration({
|
|
59
|
-
namedImports: ['Prisma'
|
|
60
|
+
namedImports: ['Prisma'],
|
|
60
61
|
isTypeOnly: true,
|
|
61
62
|
moduleSpecifier: prismaImport,
|
|
62
63
|
});
|
|
63
64
|
sf.addStatements([
|
|
64
|
-
`import {
|
|
65
|
+
`import { type GetNextArgs, type QueryOptions, type InfiniteQueryOptions, type MutationOptions, type PickEnumerable, useHooksContext } from '@zenstackhq/swr/runtime';`,
|
|
65
66
|
`import metadata from './__model_meta';`,
|
|
66
67
|
`import * as request from '@zenstackhq/swr/runtime';`,
|
|
67
68
|
]);
|
|
68
69
|
const modelNameCap = (0, upper_case_first_1.upperCaseFirst)(model.name);
|
|
69
70
|
const prismaVersion = (0, sdk_1.getPrismaVersion)();
|
|
70
|
-
const useMutation =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
const useMutation = legacyMutations
|
|
72
|
+
? sf.addFunction({
|
|
73
|
+
name: `useMutate${model.name}`,
|
|
74
|
+
isExported: true,
|
|
75
|
+
statements: [
|
|
76
|
+
'const { endpoint, fetch } = useHooksContext();',
|
|
77
|
+
`const invalidate = request.useInvalidation('${model.name}', metadata);`,
|
|
78
|
+
],
|
|
79
|
+
})
|
|
80
|
+
: undefined;
|
|
78
81
|
const mutationFuncs = [];
|
|
79
82
|
// create is somehow named "createOne" in the DMMF
|
|
80
83
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
84
|
if (mapping.create || mapping.createOne) {
|
|
82
85
|
const argsType = `Prisma.${model.name}CreateArgs`;
|
|
83
|
-
|
|
84
|
-
const returnType = `CheckSelect<T, ${model.name}, Prisma.${model.name}GetPayload<T>>`;
|
|
85
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'post', 'create', argsType, inputType, returnType, true));
|
|
86
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'POST', 'create', argsType, false));
|
|
86
87
|
}
|
|
87
88
|
// createMany
|
|
88
89
|
if (mapping.createMany) {
|
|
89
90
|
const argsType = `Prisma.${model.name}CreateManyArgs`;
|
|
90
|
-
|
|
91
|
-
const returnType = `Prisma.BatchPayload`;
|
|
92
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'post', 'createMany', argsType, inputType, returnType, false));
|
|
91
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'POST', 'createMany', argsType, true));
|
|
93
92
|
}
|
|
94
93
|
// findMany
|
|
95
94
|
if (mapping.findMany) {
|
|
96
95
|
const argsType = `Prisma.${model.name}FindManyArgs`;
|
|
97
96
|
const inputType = `Prisma.SelectSubset<T, ${argsType}>`;
|
|
98
|
-
const
|
|
97
|
+
const returnElement = `Prisma.${model.name}GetPayload<T>`;
|
|
98
|
+
const returnType = `Array<${returnElement}>`;
|
|
99
|
+
const optimisticReturn = `Array<${makeOptimistic(returnElement)}>`;
|
|
99
100
|
// regular findMany
|
|
100
|
-
generateQueryHook(sf, model, 'findMany', argsType, inputType,
|
|
101
|
+
generateQueryHook(sf, model, 'findMany', argsType, inputType, optimisticReturn, undefined, false);
|
|
101
102
|
// infinite findMany
|
|
102
103
|
generateQueryHook(sf, model, 'findMany', argsType, inputType, returnType, undefined, true);
|
|
103
104
|
}
|
|
@@ -105,56 +106,46 @@ function generateModelHooks(project, outDir, model, mapping) {
|
|
|
105
106
|
if (mapping.findUnique) {
|
|
106
107
|
const argsType = `Prisma.${model.name}FindUniqueArgs`;
|
|
107
108
|
const inputType = `Prisma.SelectSubset<T, ${argsType}>`;
|
|
108
|
-
const returnType = `Prisma.${model.name}GetPayload<T
|
|
109
|
-
generateQueryHook(sf, model, 'findUnique', argsType, inputType, returnType);
|
|
109
|
+
const returnType = makeOptimistic(`Prisma.${model.name}GetPayload<T>`);
|
|
110
|
+
generateQueryHook(sf, model, 'findUnique', argsType, inputType, returnType, undefined, false);
|
|
110
111
|
}
|
|
111
112
|
// findFirst
|
|
112
113
|
if (mapping.findFirst) {
|
|
113
114
|
const argsType = `Prisma.${model.name}FindFirstArgs`;
|
|
114
115
|
const inputType = `Prisma.SelectSubset<T, ${argsType}>`;
|
|
115
|
-
const returnType = `Prisma.${model.name}GetPayload<T
|
|
116
|
-
generateQueryHook(sf, model, 'findFirst', argsType, inputType, returnType);
|
|
116
|
+
const returnType = makeOptimistic(`Prisma.${model.name}GetPayload<T>`);
|
|
117
|
+
generateQueryHook(sf, model, 'findFirst', argsType, inputType, returnType, undefined, false);
|
|
117
118
|
}
|
|
118
119
|
// update
|
|
119
120
|
// update is somehow named "updateOne" in the DMMF
|
|
120
121
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
122
|
if (mapping.update || mapping.updateOne) {
|
|
122
123
|
const argsType = `Prisma.${model.name}UpdateArgs`;
|
|
123
|
-
|
|
124
|
-
const returnType = `Prisma.${model.name}GetPayload<T>`;
|
|
125
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'put', 'update', argsType, inputType, returnType, true));
|
|
124
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'PUT', 'update', argsType, false));
|
|
126
125
|
}
|
|
127
126
|
// updateMany
|
|
128
127
|
if (mapping.updateMany) {
|
|
129
128
|
const argsType = `Prisma.${model.name}UpdateManyArgs`;
|
|
130
|
-
|
|
131
|
-
const returnType = `Prisma.BatchPayload`;
|
|
132
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'put', 'updateMany', argsType, inputType, returnType, false));
|
|
129
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'PUT', 'updateMany', argsType, true));
|
|
133
130
|
}
|
|
134
131
|
// upsert
|
|
135
132
|
// upsert is somehow named "upsertOne" in the DMMF
|
|
136
133
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
134
|
if (mapping.upsert || mapping.upsertOne) {
|
|
138
135
|
const argsType = `Prisma.${model.name}UpsertArgs`;
|
|
139
|
-
|
|
140
|
-
const returnType = `Prisma.${model.name}GetPayload<T>`;
|
|
141
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'post', 'upsert', argsType, inputType, returnType, true));
|
|
136
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'POST', 'upsert', argsType, false));
|
|
142
137
|
}
|
|
143
138
|
// del
|
|
144
139
|
// delete is somehow named "deleteOne" in the DMMF
|
|
145
140
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
141
|
if (mapping.delete || mapping.deleteOne) {
|
|
147
142
|
const argsType = `Prisma.${model.name}DeleteArgs`;
|
|
148
|
-
|
|
149
|
-
const returnType = `Prisma.${model.name}GetPayload<T>`;
|
|
150
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'delete', 'delete', argsType, inputType, returnType, true));
|
|
143
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'DELETE', 'delete', argsType, false));
|
|
151
144
|
}
|
|
152
145
|
// deleteMany
|
|
153
146
|
if (mapping.deleteMany) {
|
|
154
147
|
const argsType = `Prisma.${model.name}DeleteManyArgs`;
|
|
155
|
-
|
|
156
|
-
const returnType = `Prisma.BatchPayload`;
|
|
157
|
-
mutationFuncs.push(generateMutation(useMutation, model, 'delete', 'deleteMany', argsType, inputType, returnType, false));
|
|
148
|
+
mutationFuncs.push(generateMutation(sf, useMutation, model, 'DELETE', 'deleteMany', argsType, true));
|
|
158
149
|
}
|
|
159
150
|
// aggregate
|
|
160
151
|
if (mapping.aggregate) {
|
|
@@ -243,7 +234,10 @@ function generateModelHooks(project, outDir, model, mapping) {
|
|
|
243
234
|
const returnType = `T extends { select: any; } ? T['select'] extends true ? number : Prisma.GetScalarType<T['select'], Prisma.${modelNameCap}CountAggregateOutputType> : number`;
|
|
244
235
|
generateQueryHook(sf, model, 'count', argsType, inputType, returnType);
|
|
245
236
|
}
|
|
246
|
-
useMutation.addStatements(`return { ${mutationFuncs.join(', ')} };`);
|
|
237
|
+
useMutation === null || useMutation === void 0 ? void 0 : useMutation.addStatements(`return { ${mutationFuncs.join(', ')} };`);
|
|
238
|
+
}
|
|
239
|
+
function makeOptimistic(returnType) {
|
|
240
|
+
return `${returnType} & { $optimistic?: boolean }`;
|
|
247
241
|
}
|
|
248
242
|
function generateIndex(project, outDir, models) {
|
|
249
243
|
const sf = project.createSourceFile(path_1.default.join(outDir, 'index.ts'), undefined, { overwrite: true });
|
|
@@ -270,7 +264,7 @@ function generateQueryHook(sf, model, operation, argsType, inputType, returnType
|
|
|
270
264
|
}
|
|
271
265
|
parameters.push({
|
|
272
266
|
name: 'options?',
|
|
273
|
-
type: infinite ? `
|
|
267
|
+
type: infinite ? `InfiniteQueryOptions<${returnType}>` : `QueryOptions<${returnType}>`,
|
|
274
268
|
});
|
|
275
269
|
sf.addFunction({
|
|
276
270
|
name: `use${infinite ? 'Infinite' : ''}${(0, upper_case_first_1.upperCaseFirst)(operation)}${model.name}`,
|
|
@@ -280,30 +274,59 @@ function generateQueryHook(sf, model, operation, argsType, inputType, returnType
|
|
|
280
274
|
})
|
|
281
275
|
.addBody()
|
|
282
276
|
.addStatements([
|
|
283
|
-
'const { endpoint, fetch } = useHooksContext();',
|
|
284
277
|
!infinite
|
|
285
|
-
? `return request.
|
|
286
|
-
: `return request.
|
|
278
|
+
? `return request.useModelQuery('${model.name}', '${operation}', args, options);`
|
|
279
|
+
: `return request.useInfiniteModelQuery('${model.name}', '${operation}', getNextArgs, options);`,
|
|
287
280
|
]);
|
|
288
281
|
}
|
|
289
|
-
function generateMutation(
|
|
282
|
+
function generateMutation(sf, useMutateModelFunc, model, method, operation, argsType, batchResult) {
|
|
283
|
+
// non-batch mutations are subject to read-back check
|
|
284
|
+
const checkReadBack = !batchResult;
|
|
285
|
+
const genericReturnType = batchResult ? 'Prisma.BatchPayload' : `Prisma.${model.name}GetPayload<T> | undefined`;
|
|
286
|
+
const returnType = batchResult ? 'Prisma.BatchPayload' : `Prisma.${model.name}GetPayload<${argsType}> | undefined`;
|
|
287
|
+
const genericInputType = `Prisma.SelectSubset<T, ${argsType}>`;
|
|
290
288
|
const modelRouteName = (0, lower_case_first_1.lowerCaseFirst)(model.name);
|
|
291
289
|
const funcName = `${operation}${model.name}`;
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
290
|
+
if (useMutateModelFunc) {
|
|
291
|
+
// generate async mutation function (legacy)
|
|
292
|
+
const mutationFunc = useMutateModelFunc.addFunction({
|
|
293
|
+
name: funcName,
|
|
294
|
+
isAsync: true,
|
|
295
|
+
typeParameters: [`T extends ${argsType}`],
|
|
296
|
+
parameters: [
|
|
297
|
+
{
|
|
298
|
+
name: 'args',
|
|
299
|
+
type: genericInputType,
|
|
300
|
+
},
|
|
301
|
+
],
|
|
302
|
+
});
|
|
303
|
+
mutationFunc.addJsDoc(`@deprecated Use \`use${(0, upper_case_first_1.upperCaseFirst)(operation)}${model.name}\` hook instead.`);
|
|
304
|
+
mutationFunc
|
|
305
|
+
.addBody()
|
|
306
|
+
.addStatements([
|
|
307
|
+
`return await request.mutationRequest<${returnType}, ${checkReadBack}>('${method}', \`\${endpoint}/${modelRouteName}/${operation}\`, args, invalidate, fetch, ${checkReadBack});`,
|
|
308
|
+
]);
|
|
309
|
+
}
|
|
310
|
+
// generate mutation hook
|
|
311
|
+
sf.addFunction({
|
|
312
|
+
name: `use${(0, upper_case_first_1.upperCaseFirst)(operation)}${model.name}`,
|
|
313
|
+
isExported: true,
|
|
297
314
|
parameters: [
|
|
298
315
|
{
|
|
299
|
-
name: '
|
|
300
|
-
type:
|
|
316
|
+
name: 'options?',
|
|
317
|
+
type: `MutationOptions<${returnType}, unknown, ${argsType}>`,
|
|
301
318
|
},
|
|
302
319
|
],
|
|
303
320
|
})
|
|
304
321
|
.addBody()
|
|
305
322
|
.addStatements([
|
|
306
|
-
`
|
|
323
|
+
`const mutation = request.useModelMutation('${model.name}', '${method}', '${operation}', metadata, options, ${checkReadBack});`,
|
|
324
|
+
`return {
|
|
325
|
+
...mutation,
|
|
326
|
+
trigger<T extends ${argsType}>(args: ${genericInputType}) {
|
|
327
|
+
return mutation.trigger(args, options as any) as Promise<${genericReturnType}>;
|
|
328
|
+
}
|
|
329
|
+
};`,
|
|
307
330
|
]);
|
|
308
331
|
return funcName;
|
|
309
332
|
}
|
package/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,yCAUyB;AAEzB,6CAAwC;AACxC,uDAAkD;AAClD,gDAAwB;AACxB,oDAA4B;AAE5B,uDAAkD;AAClD,wBAAyB;AAEzB,SAAsB,QAAQ,CAAC,KAAY,EAAE,OAAsB,EAAE,IAAmB;;QACpF,IAAI,MAAM,GAAG,IAAA,mBAAa,EAAS,OAAO,EAAE,QAAQ,EAAE,OAAI,CAAC,CAAC;QAC5D,MAAM,GAAG,IAAA,iBAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAA,mBAAa,GAAE,CAAC;QAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YACpC,QAAQ,CAAC,IAAI,CACT,sGAAsG,CACzG,CAAC;SACL;QAED,MAAM,MAAM,GAAG,IAAA,mBAAa,EAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,IAAA,uBAAiB,EAAC,OAAO,EAAE,MAAM,EAAE;YACrC,MAAM,EAAE,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;YAC5C,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,KAAK;SAC5B,CAAC,CAAC;QAEH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;YACxF,IAAI,CAAC,OAAO,EAAE;gBACV,QAAQ,CAAC,IAAI,CAAC,oCAAoC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpE,OAAO;aACV;YACD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/swr",
|
|
3
3
|
"displayName": "ZenStack plugin for generating SWR hooks",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"description": "ZenStack plugin for generating SWR hooks",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"repository": {
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"semver": "^7.3.8",
|
|
25
25
|
"ts-morph": "^16.0.0",
|
|
26
26
|
"upper-case-first": "^2.0.2",
|
|
27
|
-
"@zenstackhq/runtime": "1.
|
|
28
|
-
"@zenstackhq/sdk": "1.
|
|
27
|
+
"@zenstackhq/runtime": "1.4.0",
|
|
28
|
+
"@zenstackhq/sdk": "1.4.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@tanstack/react-query": "^4.28.0",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"nock": "^13.3.6",
|
|
41
41
|
"react": "18.2.0",
|
|
42
42
|
"rimraf": "^3.0.2",
|
|
43
|
-
"swr": "^2.
|
|
43
|
+
"swr": "^2.2.4",
|
|
44
44
|
"ts-jest": "^29.0.5",
|
|
45
45
|
"typescript": "^4.9.4",
|
|
46
|
-
"@zenstackhq/testtools": "1.
|
|
46
|
+
"@zenstackhq/testtools": "1.4.0"
|
|
47
47
|
},
|
|
48
48
|
"scripts": {
|
|
49
49
|
"clean": "rimraf dist",
|
package/runtime/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { type ModelMeta } from '@zenstackhq/runtime/cross';
|
|
3
|
-
import type { Fetcher,
|
|
4
|
-
import {
|
|
3
|
+
import type { Fetcher, SWRConfiguration, SWRResponse } from 'swr';
|
|
4
|
+
import { ScopedMutator } from 'swr/_internal';
|
|
5
|
+
import { type SWRInfiniteConfiguration, type SWRInfiniteFetcher, type SWRInfiniteResponse } from 'swr/infinite';
|
|
6
|
+
import { type SWRMutationConfiguration } from 'swr/mutation';
|
|
5
7
|
export * from './prisma-types';
|
|
6
8
|
/**
|
|
7
9
|
* Function signature for `fetch`.
|
|
@@ -47,50 +49,62 @@ export declare function useHooksContext(): {
|
|
|
47
49
|
endpoint: string;
|
|
48
50
|
};
|
|
49
51
|
/**
|
|
50
|
-
*
|
|
52
|
+
* Regular query options.
|
|
51
53
|
*/
|
|
52
|
-
export type
|
|
54
|
+
export type QueryOptions<Result, Error = unknown> = {
|
|
53
55
|
/**
|
|
54
56
|
* Disable data fetching
|
|
55
57
|
*/
|
|
56
58
|
disabled?: boolean;
|
|
57
59
|
/**
|
|
60
|
+
* @deprecated Use `fallbackData` instead
|
|
61
|
+
*
|
|
58
62
|
* Equivalent to @see SWRConfiguration.fallbackData
|
|
59
63
|
*/
|
|
60
64
|
initialData?: Result;
|
|
61
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Whether to enable automatic optimistic update. Defaults to `true`.
|
|
67
|
+
*/
|
|
68
|
+
optimisticUpdate?: boolean;
|
|
69
|
+
} & Omit<SWRConfiguration<Result, Error, Fetcher<Result>>, 'fetcher'>;
|
|
62
70
|
/**
|
|
63
|
-
*
|
|
71
|
+
* Infinite query options.
|
|
64
72
|
*/
|
|
65
|
-
export type
|
|
73
|
+
export type InfiniteQueryOptions<Result, Error = unknown> = {
|
|
66
74
|
/**
|
|
67
75
|
* Disable data fetching
|
|
68
76
|
*/
|
|
69
77
|
disabled?: boolean;
|
|
70
78
|
/**
|
|
79
|
+
* @deprecated Use `fallbackData` instead
|
|
80
|
+
*
|
|
71
81
|
* Equivalent to @see SWRInfiniteConfiguration.fallbackData
|
|
72
82
|
*/
|
|
73
83
|
initialData?: Result[];
|
|
74
|
-
} & SWRInfiniteConfiguration<Result, Error, SWRInfiniteFetcher<Result
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
} & Omit<SWRInfiniteConfiguration<Result, Error, SWRInfiniteFetcher<Result>>, 'fetcher'>;
|
|
85
|
+
/**
|
|
86
|
+
* Mutation options.
|
|
87
|
+
*/
|
|
88
|
+
export type MutationOptions<Result, Error, Args> = {
|
|
89
|
+
/**
|
|
90
|
+
* Whether to automatically optimistic-update queries potentially impacted. Defaults to `false`.
|
|
91
|
+
*/
|
|
92
|
+
optimisticUpdate?: boolean;
|
|
93
|
+
} & Omit<SWRMutationConfiguration<Result, Error, string, Args>, 'fetcher'>;
|
|
84
94
|
/**
|
|
85
|
-
*
|
|
95
|
+
* Computes query key for the given model, operation, query args, and options.
|
|
96
|
+
*/
|
|
97
|
+
export declare function getQueryKey(model: string, operation: string, args?: unknown, infinite?: boolean, optimisticUpdate?: boolean): string;
|
|
98
|
+
/**
|
|
99
|
+
* Makes a model query with SWR.
|
|
86
100
|
*
|
|
87
|
-
* @param
|
|
101
|
+
* @param model Model name
|
|
102
|
+
* @param operation Prisma operation (e.g, `findMany`)
|
|
88
103
|
* @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter
|
|
89
104
|
* @param options Query options
|
|
90
|
-
* @param fetch Custom fetch function
|
|
91
105
|
* @returns SWR response
|
|
92
106
|
*/
|
|
93
|
-
export declare function
|
|
107
|
+
export declare function useModelQuery<Result, Error = unknown>(model: string, operation: string, args?: unknown, options?: QueryOptions<Result, Error>): SWRResponse<Result, Error>;
|
|
94
108
|
/**
|
|
95
109
|
* Function for computing the query args for fetching a page during an infinite query.
|
|
96
110
|
*/
|
|
@@ -98,37 +112,25 @@ export type GetNextArgs<Args, Result> = (pageIndex: number, previousPageData: Re
|
|
|
98
112
|
/**
|
|
99
113
|
* Makes an infinite GET request with SWR.
|
|
100
114
|
*
|
|
101
|
-
* @param
|
|
102
|
-
* @param
|
|
115
|
+
* @param model Model name
|
|
116
|
+
* @param operation Prisma operation (e.g, `findMany`)
|
|
117
|
+
* @param getNextArgs Function for computing the query args for a page
|
|
103
118
|
* @param options Query options
|
|
104
|
-
* @param fetch Custom fetch function
|
|
105
119
|
* @returns SWR infinite query response
|
|
106
120
|
*/
|
|
107
|
-
export declare function
|
|
121
|
+
export declare function useInfiniteModelQuery<Args, Result, Error = unknown>(model: string, operation: string, getNextArgs: GetNextArgs<Args, any>, options?: InfiniteQueryOptions<Result, Error>): SWRInfiniteResponse<Result, Error>;
|
|
122
|
+
export declare function useModelMutation<Args, Result, CheckReadBack extends boolean = boolean>(model: string, method: 'POST' | 'PUT' | 'DELETE', operation: string, modelMeta: ModelMeta, options?: MutationOptions<CheckReadBack extends true ? Result | undefined : Result, unknown, Args>, checkReadBack?: CheckReadBack): import("swr/mutation").SWRMutationResponse<CheckReadBack extends true ? Result | undefined : Result, unknown, string, Args>;
|
|
108
123
|
/**
|
|
109
|
-
* Makes a
|
|
124
|
+
* Makes a mutation request.
|
|
110
125
|
*
|
|
111
|
-
* @param url The request URL
|
|
112
|
-
* @param data The request data
|
|
113
|
-
* @param
|
|
126
|
+
* @param url The request URL
|
|
127
|
+
* @param data The request data
|
|
128
|
+
* @param invalidate Function for invalidating a query
|
|
114
129
|
*/
|
|
115
|
-
export declare function
|
|
130
|
+
export declare function mutationRequest<Result, C extends boolean = boolean>(method: 'POST' | 'PUT' | 'DELETE', url: string, data: unknown, invalidate?: Invalidator, fetch?: FetchFn, checkReadBack?: C): Promise<C extends true ? Result | undefined : Result>;
|
|
131
|
+
type Invalidator = (operation: string, args?: unknown) => ReturnType<ScopedMutator>;
|
|
132
|
+
export declare function useInvalidation(model: string, modelMeta: ModelMeta): Invalidator;
|
|
116
133
|
/**
|
|
117
|
-
* Makes
|
|
118
|
-
*
|
|
119
|
-
* @param url The request URL.
|
|
120
|
-
* @param data The request data.
|
|
121
|
-
* @param mutate Mutator for invalidating cache.
|
|
122
|
-
*/
|
|
123
|
-
export declare function put<Result, C extends boolean = boolean>(url: string, data: unknown, mutate: Mutator, fetch?: FetchFn, checkReadBack?: C): Promise<C extends true ? Result | undefined : Result>;
|
|
124
|
-
/**
|
|
125
|
-
* Makes a DELETE request.
|
|
126
|
-
*
|
|
127
|
-
* @param url The request URL.
|
|
128
|
-
* @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter
|
|
129
|
-
* @param mutate Mutator for invalidating cache.
|
|
134
|
+
* Makes fetch request for queries and mutations.
|
|
130
135
|
*/
|
|
131
|
-
export declare function del<Result, C extends boolean = boolean>(url: string, args: unknown, mutate: Mutator, fetch?: FetchFn, checkReadBack?: C): Promise<C extends true ? Result | undefined : Result>;
|
|
132
|
-
type Mutator = (operation: string, data?: unknown | Promise<unknown> | MutatorCallback, opts?: boolean | MutatorOptions) => Promise<unknown[]>;
|
|
133
|
-
export declare function useMutate(model: string, modelMeta: ModelMeta, logging?: boolean): Mutator;
|
|
134
136
|
export declare function fetcher<R, C extends boolean>(url: string, options?: RequestInit, fetch?: FetchFn, checkReadBack?: C): Promise<C extends true ? R | undefined : R>;
|
package/runtime/index.js
CHANGED
|
@@ -49,7 +49,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
49
49
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
50
50
|
};
|
|
51
51
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
-
exports.fetcher = exports.
|
|
52
|
+
exports.fetcher = exports.useInvalidation = exports.mutationRequest = exports.useModelMutation = exports.useInfiniteModelQuery = exports.useModelQuery = exports.getQueryKey = exports.useHooksContext = exports.Provider = exports.RequestHandlerContext = void 0;
|
|
53
53
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
54
54
|
const browser_1 = require("@zenstackhq/runtime/browser");
|
|
55
55
|
const cross_1 = require("@zenstackhq/runtime/cross");
|
|
@@ -57,7 +57,8 @@ const crossFetch = __importStar(require("cross-fetch"));
|
|
|
57
57
|
const lower_case_first_1 = require("lower-case-first");
|
|
58
58
|
const react_1 = require("react");
|
|
59
59
|
const swr_1 = __importStar(require("swr"));
|
|
60
|
-
const infinite_1 =
|
|
60
|
+
const infinite_1 = __importStar(require("swr/infinite"));
|
|
61
|
+
const mutation_1 = __importDefault(require("swr/mutation"));
|
|
61
62
|
__exportStar(require("./prisma-types"), exports);
|
|
62
63
|
const DEFAULT_QUERY_ENDPOINT = '/api/model';
|
|
63
64
|
/**
|
|
@@ -79,137 +80,134 @@ function useHooksContext() {
|
|
|
79
80
|
return Object.assign({ endpoint: endpoint !== null && endpoint !== void 0 ? endpoint : DEFAULT_QUERY_ENDPOINT }, rest);
|
|
80
81
|
}
|
|
81
82
|
exports.useHooksContext = useHooksContext;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
const QUERY_KEY_PREFIX = 'zenstack:query';
|
|
84
|
+
const MUTATION_KEY_PREFIX = 'zenstack:mutation';
|
|
85
|
+
/**
|
|
86
|
+
* Computes query key for the given model, operation, query args, and options.
|
|
87
|
+
*/
|
|
88
|
+
function getQueryKey(model, operation, args, infinite, optimisticUpdate) {
|
|
89
|
+
return JSON.stringify({
|
|
90
|
+
prefix: QUERY_KEY_PREFIX,
|
|
91
|
+
model,
|
|
92
|
+
operation,
|
|
93
|
+
args,
|
|
94
|
+
infinite: infinite === true,
|
|
95
|
+
optimisticUpdate: optimisticUpdate !== false,
|
|
96
|
+
});
|
|
85
97
|
}
|
|
86
98
|
exports.getQueryKey = getQueryKey;
|
|
99
|
+
function getMutationKey(model, operation) {
|
|
100
|
+
// use a random key since we don't have 1:1 mapping between mutation and query
|
|
101
|
+
// https://github.com/vercel/swr/discussions/2461#discussioncomment-5281784
|
|
102
|
+
return JSON.stringify({ prefix: MUTATION_KEY_PREFIX, model, operation, r: Date.now() });
|
|
103
|
+
}
|
|
87
104
|
function parseQueryKey(key) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
105
|
+
let keyValue = key;
|
|
106
|
+
if (typeof key === 'string') {
|
|
107
|
+
try {
|
|
108
|
+
keyValue = JSON.parse(key);
|
|
109
|
+
}
|
|
110
|
+
catch (_a) {
|
|
94
111
|
return undefined;
|
|
95
112
|
}
|
|
96
|
-
return parsed;
|
|
97
|
-
}
|
|
98
|
-
catch (_a) {
|
|
99
|
-
return undefined;
|
|
100
113
|
}
|
|
114
|
+
return (keyValue === null || keyValue === void 0 ? void 0 : keyValue.prefix) === QUERY_KEY_PREFIX ? keyValue : undefined;
|
|
101
115
|
}
|
|
102
|
-
exports.parseQueryKey = parseQueryKey;
|
|
103
116
|
/**
|
|
104
|
-
* Makes a
|
|
117
|
+
* Makes a model query with SWR.
|
|
105
118
|
*
|
|
106
|
-
* @param
|
|
119
|
+
* @param model Model name
|
|
120
|
+
* @param operation Prisma operation (e.g, `findMany`)
|
|
107
121
|
* @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter
|
|
108
122
|
* @param options Query options
|
|
109
|
-
* @param fetch Custom fetch function
|
|
110
123
|
* @returns SWR response
|
|
111
124
|
*/
|
|
112
|
-
|
|
113
|
-
function useGet(model, operation, endpoint, args, options, fetch) {
|
|
125
|
+
function useModelQuery(model, operation, args, options) {
|
|
114
126
|
var _a;
|
|
115
|
-
const
|
|
127
|
+
const { endpoint, fetch } = useHooksContext();
|
|
128
|
+
const key = (options === null || options === void 0 ? void 0 : options.disabled)
|
|
129
|
+
? null
|
|
130
|
+
: getQueryKey(model, operation, args, false, (options === null || options === void 0 ? void 0 : options.optimisticUpdate) !== false);
|
|
116
131
|
const url = makeUrl(`${endpoint}/${(0, lower_case_first_1.lowerCaseFirst)(model)}/${operation}`, args);
|
|
117
132
|
return (0, swr_1.default)(key, () => fetcher(url, undefined, fetch, false), Object.assign(Object.assign({}, options), { fallbackData: (_a = options === null || options === void 0 ? void 0 : options.initialData) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.fallbackData }));
|
|
118
133
|
}
|
|
119
|
-
exports.
|
|
134
|
+
exports.useModelQuery = useModelQuery;
|
|
120
135
|
/**
|
|
121
136
|
* Makes an infinite GET request with SWR.
|
|
122
137
|
*
|
|
123
|
-
* @param
|
|
124
|
-
* @param
|
|
138
|
+
* @param model Model name
|
|
139
|
+
* @param operation Prisma operation (e.g, `findMany`)
|
|
140
|
+
* @param getNextArgs Function for computing the query args for a page
|
|
125
141
|
* @param options Query options
|
|
126
|
-
* @param fetch Custom fetch function
|
|
127
142
|
* @returns SWR infinite query response
|
|
128
143
|
*/
|
|
129
|
-
|
|
130
|
-
function useInfiniteGet(model, operation, endpoint, getNextArgs, options, fetch) {
|
|
144
|
+
function useInfiniteModelQuery(model, operation, getNextArgs, options) {
|
|
131
145
|
var _a;
|
|
146
|
+
const { endpoint, fetch } = useHooksContext();
|
|
132
147
|
const getKey = (pageIndex, previousPageData) => {
|
|
133
148
|
if (options === null || options === void 0 ? void 0 : options.disabled) {
|
|
134
149
|
return null;
|
|
135
150
|
}
|
|
136
151
|
const nextArgs = getNextArgs(pageIndex, previousPageData);
|
|
137
152
|
return nextArgs !== null // null means reached the end
|
|
138
|
-
? getQueryKey(model, operation, nextArgs)
|
|
153
|
+
? getQueryKey(model, operation, nextArgs, true, false)
|
|
139
154
|
: null;
|
|
140
155
|
};
|
|
141
156
|
return (0, infinite_1.default)(getKey, (key) => {
|
|
142
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
143
157
|
const parsedKey = parseQueryKey(key);
|
|
144
|
-
|
|
145
|
-
|
|
158
|
+
if (parsedKey) {
|
|
159
|
+
const { model, operation, args } = parsedKey;
|
|
160
|
+
const url = makeUrl(`${endpoint}/${(0, lower_case_first_1.lowerCaseFirst)(model)}/${operation}`, args);
|
|
161
|
+
return fetcher(url, undefined, fetch, false);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
throw new Error('Invalid query key: ' + key);
|
|
165
|
+
}
|
|
146
166
|
}, Object.assign(Object.assign({}, options), { fallbackData: (_a = options === null || options === void 0 ? void 0 : options.initialData) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.fallbackData }));
|
|
147
167
|
}
|
|
148
|
-
exports.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
headers: {
|
|
161
|
-
'content-type': 'application/json',
|
|
162
|
-
},
|
|
163
|
-
body: marshal(data),
|
|
164
|
-
}, fetch, checkReadBack);
|
|
165
|
-
mutate(getOperationFromUrl(url), data);
|
|
166
|
-
return r;
|
|
167
|
-
});
|
|
168
|
+
exports.useInfiniteModelQuery = useInfiniteModelQuery;
|
|
169
|
+
function useModelMutation(model, method, operation, modelMeta, options, checkReadBack) {
|
|
170
|
+
const { endpoint, fetch, logging } = useHooksContext();
|
|
171
|
+
const invalidate = (options === null || options === void 0 ? void 0 : options.revalidate) !== false ? useInvalidation(model, modelMeta) : undefined;
|
|
172
|
+
const { cache, mutate } = (0, swr_1.useSWRConfig)();
|
|
173
|
+
return (0, mutation_1.default)(getMutationKey(model, operation), (_key, { arg }) => {
|
|
174
|
+
if (options === null || options === void 0 ? void 0 : options.optimisticUpdate) {
|
|
175
|
+
optimisticUpdate(model, operation, arg, modelMeta, cache, mutate, logging);
|
|
176
|
+
}
|
|
177
|
+
const url = `${endpoint}/${(0, lower_case_first_1.lowerCaseFirst)(model)}/${operation}`;
|
|
178
|
+
return mutationRequest(method, url, arg, invalidate, fetch, checkReadBack);
|
|
179
|
+
}, options);
|
|
168
180
|
}
|
|
169
|
-
exports.
|
|
181
|
+
exports.useModelMutation = useModelMutation;
|
|
170
182
|
/**
|
|
171
|
-
* Makes a
|
|
183
|
+
* Makes a mutation request.
|
|
172
184
|
*
|
|
173
|
-
* @param url The request URL
|
|
174
|
-
* @param data The request data
|
|
175
|
-
* @param
|
|
185
|
+
* @param url The request URL
|
|
186
|
+
* @param data The request data
|
|
187
|
+
* @param invalidate Function for invalidating a query
|
|
176
188
|
*/
|
|
177
|
-
function
|
|
189
|
+
function mutationRequest(method, url, data, invalidate, fetch, checkReadBack) {
|
|
178
190
|
return __awaiter(this, void 0, void 0, function* () {
|
|
179
|
-
const
|
|
180
|
-
|
|
191
|
+
const reqUrl = method === 'DELETE' ? makeUrl(url, data) : url;
|
|
192
|
+
const r = yield fetcher(reqUrl, {
|
|
193
|
+
method,
|
|
181
194
|
headers: {
|
|
182
195
|
'content-type': 'application/json',
|
|
183
196
|
},
|
|
184
|
-
body: marshal(data),
|
|
185
|
-
}, fetch, checkReadBack);
|
|
186
|
-
mutate(getOperationFromUrl(url), data);
|
|
187
|
-
return r;
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
exports.put = put;
|
|
191
|
-
/**
|
|
192
|
-
* Makes a DELETE request.
|
|
193
|
-
*
|
|
194
|
-
* @param url The request URL.
|
|
195
|
-
* @param args The request args object, which will be superjson-stringified and appended as "?q=" parameter
|
|
196
|
-
* @param mutate Mutator for invalidating cache.
|
|
197
|
-
*/
|
|
198
|
-
function del(url, args, mutate, fetch, checkReadBack) {
|
|
199
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
-
const reqUrl = makeUrl(url, args);
|
|
201
|
-
const r = yield fetcher(reqUrl, {
|
|
202
|
-
method: 'DELETE',
|
|
197
|
+
body: data ? marshal(data) : undefined,
|
|
203
198
|
}, fetch, checkReadBack);
|
|
204
|
-
|
|
199
|
+
if (invalidate) {
|
|
200
|
+
yield invalidate(getOperationFromUrl(url), data);
|
|
201
|
+
}
|
|
205
202
|
return r;
|
|
206
203
|
});
|
|
207
204
|
}
|
|
208
|
-
exports.
|
|
209
|
-
function
|
|
205
|
+
exports.mutationRequest = mutationRequest;
|
|
206
|
+
function useInvalidation(model, modelMeta) {
|
|
210
207
|
// https://swr.vercel.app/docs/advanced/cache#mutate-multiple-keys-from-regex
|
|
208
|
+
const { logging } = useHooksContext();
|
|
211
209
|
const { cache, mutate } = (0, swr_1.useSWRConfig)();
|
|
212
|
-
return (operation, args
|
|
210
|
+
return (operation, args) => __awaiter(this, void 0, void 0, function* () {
|
|
213
211
|
if (!(cache instanceof Map)) {
|
|
214
212
|
throw new Error('mutate requires the cache provider to be a Map instance');
|
|
215
213
|
}
|
|
@@ -227,11 +225,19 @@ function useMutate(model, modelMeta, logging) {
|
|
|
227
225
|
console.log(`Invalidating query ${key} due to mutation "${model}.${operation}"`);
|
|
228
226
|
});
|
|
229
227
|
}
|
|
230
|
-
const mutations = keys.map((key) =>
|
|
228
|
+
const mutations = keys.map((key) => {
|
|
229
|
+
const parsedKey = parseQueryKey(key);
|
|
230
|
+
// FIX: special handling for infinite query keys, but still not working
|
|
231
|
+
// https://github.com/vercel/swr/discussions/2843
|
|
232
|
+
return mutate((parsedKey === null || parsedKey === void 0 ? void 0 : parsedKey.infinite) ? (0, infinite_1.unstable_serialize)(() => key) : key);
|
|
233
|
+
});
|
|
231
234
|
return Promise.all(mutations);
|
|
232
235
|
});
|
|
233
236
|
}
|
|
234
|
-
exports.
|
|
237
|
+
exports.useInvalidation = useInvalidation;
|
|
238
|
+
/**
|
|
239
|
+
* Makes fetch request for queries and mutations.
|
|
240
|
+
*/
|
|
235
241
|
function fetcher(url, options, fetch, checkReadBack) {
|
|
236
242
|
var _a, _b, _c;
|
|
237
243
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -303,4 +309,44 @@ function getOperationFromUrl(url) {
|
|
|
303
309
|
return r;
|
|
304
310
|
}
|
|
305
311
|
}
|
|
312
|
+
function optimisticUpdate(mutationModel, mutationOp, mutationArgs, modelMeta, cache, mutator, logging = false) {
|
|
313
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
314
|
+
const optimisticPromises = [];
|
|
315
|
+
for (const key of cache.keys()) {
|
|
316
|
+
const parsedKey = parseQueryKey(key);
|
|
317
|
+
if (!parsedKey) {
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
if (!parsedKey.optimisticUpdate) {
|
|
321
|
+
if (logging) {
|
|
322
|
+
console.log(`Skipping optimistic update for ${key} due to opt-out`);
|
|
323
|
+
}
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
const cacheValue = cache.get(key);
|
|
327
|
+
if (!cacheValue) {
|
|
328
|
+
continue;
|
|
329
|
+
}
|
|
330
|
+
if (cacheValue.error) {
|
|
331
|
+
if (logging) {
|
|
332
|
+
console.warn(`Skipping optimistic update for ${key} due to error:`, cacheValue.error);
|
|
333
|
+
}
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const mutatedData = yield (0, cross_1.applyMutation)(parsedKey.model, parsedKey.operation, cacheValue.data, mutationModel, mutationOp, mutationArgs, modelMeta, logging);
|
|
337
|
+
if (mutatedData !== undefined) {
|
|
338
|
+
// mutation applicable to this query, update cache
|
|
339
|
+
if (logging) {
|
|
340
|
+
console.log(`Optimistically updating query ${JSON.stringify(key)} due to mutation "${mutationModel}.${mutationOp}"`);
|
|
341
|
+
}
|
|
342
|
+
optimisticPromises.push(mutator(key, mutatedData, {
|
|
343
|
+
// don't trigger revalidation here since we will do it
|
|
344
|
+
// when the remote mutation succeeds
|
|
345
|
+
revalidate: false,
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return Promise.all(optimisticPromises);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
306
352
|
//# sourceMappingURL=index.js.map
|
package/runtime/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAuD;AACvD,yDAAqE;AACrE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|