@swoff/cli 0.3.2 → 0.3.4
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/README.md +24 -15
- package/dist/__tests__/config-types.test.js +8 -2
- package/dist/__tests__/config-types.test.js.map +1 -1
- package/dist/__tests__/file-generators.test.js +0 -1
- package/dist/__tests__/file-generators.test.js.map +1 -1
- package/dist/__tests__/validator.test.js +41 -1
- package/dist/__tests__/validator.test.js.map +1 -1
- package/dist/lib/commands/add.js +5 -3
- package/dist/lib/commands/add.js.map +1 -1
- package/dist/lib/commands/info.js +5 -1
- package/dist/lib/commands/info.js.map +1 -1
- package/dist/lib/commands/validate.js +5 -1
- package/dist/lib/commands/validate.js.map +1 -1
- package/dist/lib/config/validator.js +20 -0
- package/dist/lib/config/validator.js.map +1 -1
- package/dist/lib/generators/file-generators/auth-fetch.js +156 -0
- package/dist/lib/generators/file-generators/auth-fetch.js.map +1 -0
- package/dist/lib/generators/file-generators/auth-state.js +38 -0
- package/dist/lib/generators/file-generators/auth-state.js.map +1 -0
- package/dist/lib/generators/file-generators/auth-store.js +127 -0
- package/dist/lib/generators/file-generators/auth-store.js.map +1 -0
- package/dist/lib/generators/file-generators/auth-user.js +95 -0
- package/dist/lib/generators/file-generators/auth-user.js.map +1 -0
- package/dist/lib/generators/file-generators/mutation-queue.js +27 -7
- package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
- package/dist/lib/generators/file-generators/sw-injector.js +13 -1
- package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
- package/dist/lib/generators/file-generators/type-definitions.js +4 -1
- package/dist/lib/generators/file-generators/type-definitions.js.map +1 -1
- package/dist/lib/generators/sw-sections/assemble-sw.js +3 -2
- package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
- package/dist/lib/generators/sw-sections/background-sync-handler.js +9 -6
- package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
- package/dist/lib/generators/sw-sections/message-handler.js +12 -2
- package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
- package/dist/lib/generators/swoff-files-generator.js +8 -0
- package/dist/lib/generators/swoff-files-generator.js.map +1 -1
- package/dist/lib/shared/config-types.js +16 -2
- package/dist/lib/shared/config-types.js.map +1 -1
- package/package.json +2 -3
- package/src/lib/templates/sw-template.js +0 -61
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates auth-state.ts/js — auth state detection for the 4-state matrix.
|
|
3
|
+
*/
|
|
4
|
+
import { writeFile } from "./context.js";
|
|
5
|
+
export function generateAuthState(ctx) {
|
|
6
|
+
const ext = ctx.ext;
|
|
7
|
+
const code = `/**
|
|
8
|
+
* Auth State — detect the four auth states for offline/online handling.
|
|
9
|
+
*
|
|
10
|
+
* States:
|
|
11
|
+
* 1. Online + Authenticated → Normal (fresh data, full UI)
|
|
12
|
+
* 2. Online + Unauthenticated → Login prompt
|
|
13
|
+
* 3. Offline + Authenticated → Offline access (cached data)
|
|
14
|
+
* 4. Offline + Unauthenticated → Strict offline (public content only)
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* import { getAuthState } from "./auth-state.${ext}";
|
|
18
|
+
* const { authenticated, user, online } = await getAuthState();
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { getAuth, isAuthValid } from "./auth-store.${ext}";
|
|
22
|
+
import { getCachedUser } from "./auth-user.${ext}";
|
|
23
|
+
|
|
24
|
+
export async function getAuthState() {
|
|
25
|
+
const auth = await getAuth();
|
|
26
|
+
const valid = isAuthValid(auth);
|
|
27
|
+
const user = valid ? await getCachedUser() : null;
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
authenticated: valid,
|
|
31
|
+
user,
|
|
32
|
+
online: navigator.onLine,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
writeFile(ctx, `auth-state.${ext}`, code);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=auth-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-state.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/auth-state.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG;;;;;;;;;;kDAUmC,GAAG;;;;qDAIA,GAAG;6CACX,GAAG;;;;;;;;;;;;;CAa/C,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates auth-store.ts/js — token storage with memory-only for token,
|
|
3
|
+
* IndexedDB for offline user info only (no token persisted).
|
|
4
|
+
*
|
|
5
|
+
* Security: the Bearer token lives in memory only and is cleared on page
|
|
6
|
+
* refresh. Only { user, expiresAt } is persisted to IndexedDB for offline
|
|
7
|
+
* user display. After a page refresh, re-login is required.
|
|
8
|
+
*/
|
|
9
|
+
import { writeFile } from "./context.js";
|
|
10
|
+
export function generateAuthStore(ctx) {
|
|
11
|
+
const ext = ctx.ext;
|
|
12
|
+
const code = `/**
|
|
13
|
+
* Auth Store — Token in memory only; user info in IndexedDB for offline access.
|
|
14
|
+
*
|
|
15
|
+
* Security:
|
|
16
|
+
* The Bearer token lives in JavaScript memory and is cleared on page refresh.
|
|
17
|
+
* Only { user, expiresAt } is persisted to IndexedDB so the app can display
|
|
18
|
+
* user info offline. After a page refresh, re-login is required.
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* import { setAuth, getAuth, clearAuth, isAuthValid } from "./auth-store.${ext}";
|
|
22
|
+
*
|
|
23
|
+
* await setAuth({ token, user, expiresAt });
|
|
24
|
+
* const auth = await getAuth();
|
|
25
|
+
* await clearAuth();
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const DB_NAME = "swoff-auth";
|
|
29
|
+
const STORE_NAME = "auth";
|
|
30
|
+
|
|
31
|
+
let memoryAuth = null;
|
|
32
|
+
|
|
33
|
+
function openAuthDB() {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const request = indexedDB.open(DB_NAME, 1);
|
|
36
|
+
request.onupgradeneeded = (e) => {
|
|
37
|
+
const db = e.target.result;
|
|
38
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
39
|
+
db.createObjectStore(STORE_NAME, { keyPath: "key" });
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
request.onsuccess = (e) => resolve(e.target.result);
|
|
43
|
+
request.onerror = (e) => reject(e.target.error);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async function persistUserData(authData) {
|
|
48
|
+
// Only persist { user, expiresAt } — never the token
|
|
49
|
+
const userData = { user: authData?.user, expiresAt: authData?.expiresAt };
|
|
50
|
+
const db = await openAuthDB();
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const tx = db.transaction(STORE_NAME, "readwrite");
|
|
53
|
+
const store = tx.objectStore(STORE_NAME);
|
|
54
|
+
const request = store.put({ key: "session", value: userData });
|
|
55
|
+
request.onsuccess = () => resolve();
|
|
56
|
+
request.onerror = () => reject(request.error);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async function loadUserData() {
|
|
61
|
+
const db = await openAuthDB();
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
const tx = db.transaction(STORE_NAME, "readonly");
|
|
64
|
+
const store = tx.objectStore(STORE_NAME);
|
|
65
|
+
const request = store.get("session");
|
|
66
|
+
request.onsuccess = () => resolve(request.result?.value || null);
|
|
67
|
+
request.onerror = () => reject(request.error);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function clearPersistedData() {
|
|
72
|
+
const db = await openAuthDB();
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
const tx = db.transaction(STORE_NAME, "readwrite");
|
|
75
|
+
const store = tx.objectStore(STORE_NAME);
|
|
76
|
+
const request = store.delete("session");
|
|
77
|
+
request.onsuccess = () => resolve();
|
|
78
|
+
request.onerror = () => reject(request.error);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Store auth data — token stays in memory only.
|
|
84
|
+
* Only user info and expiry are persisted to IndexedDB.
|
|
85
|
+
* @param {{ token?: string, user?: object, expiresAt?: number }} authData
|
|
86
|
+
*/
|
|
87
|
+
export async function setAuth(authData) {
|
|
88
|
+
memoryAuth = authData;
|
|
89
|
+
await persistUserData(authData);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get stored auth — returns memory copy (with token) or
|
|
94
|
+
* falls back to IndexedDB (user info only, no token after refresh).
|
|
95
|
+
*/
|
|
96
|
+
export async function getAuth() {
|
|
97
|
+
if (memoryAuth) return memoryAuth;
|
|
98
|
+
|
|
99
|
+
const userData = await loadUserData();
|
|
100
|
+
if (userData) {
|
|
101
|
+
// After refresh: user info available, but no token — re-login required
|
|
102
|
+
memoryAuth = userData;
|
|
103
|
+
}
|
|
104
|
+
return memoryAuth;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Clear auth — removes from memory and IndexedDB.
|
|
109
|
+
*/
|
|
110
|
+
export async function clearAuth() {
|
|
111
|
+
memoryAuth = null;
|
|
112
|
+
await clearPersistedData();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Check if auth exists and is not expired.
|
|
117
|
+
* @param {object | null} auth — The auth object from getAuth()
|
|
118
|
+
*/
|
|
119
|
+
export function isAuthValid(auth) {
|
|
120
|
+
if (!auth) return false;
|
|
121
|
+
if (!auth.expiresAt) return true;
|
|
122
|
+
return Date.now() < auth.expiresAt;
|
|
123
|
+
}
|
|
124
|
+
`;
|
|
125
|
+
writeFile(ctx, `auth-store.${ext}`, code);
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/auth-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG;;;;;;;;;8EAS+D,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGhF,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates auth-user.ts/js — fetch, cache, and invalidate current user.
|
|
3
|
+
*/
|
|
4
|
+
import { writeFile } from "./context.js";
|
|
5
|
+
export function generateAuthUser(ctx) {
|
|
6
|
+
const ext = ctx.ext;
|
|
7
|
+
const userEndpoint = ctx.config.features.auth.userEndpoint;
|
|
8
|
+
const code = `/**
|
|
9
|
+
* Current User — fetch, cache, and invalidate the current user for offline access.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* import { fetchCurrentUser, cacheUser, getCachedUser, clearCachedUser } from "./auth-user.${ext}";
|
|
13
|
+
*
|
|
14
|
+
* await fetchCurrentUser(); // Fetch from server & cache
|
|
15
|
+
* const user = await getCachedUser(); // Get cached (offline-capable)
|
|
16
|
+
* await clearCachedUser(); // Clear on logout
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { authenticatedFetch } from "./auth-fetch.${ext}";
|
|
20
|
+
|
|
21
|
+
const DB_NAME = "swoff-auth-user";
|
|
22
|
+
const STORE_NAME = "current-user";
|
|
23
|
+
|
|
24
|
+
function openAuthDB() {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
const request = indexedDB.open(DB_NAME, 1);
|
|
27
|
+
request.onupgradeneeded = (e) => {
|
|
28
|
+
const db = e.target.result;
|
|
29
|
+
if (!db.objectStoreNames.contains(STORE_NAME)) {
|
|
30
|
+
db.createObjectStore(STORE_NAME, { keyPath: "key" });
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
request.onsuccess = (e) => resolve(e.target.result);
|
|
34
|
+
request.onerror = (e) => reject(e.target.error);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Fetch current user from your backend and cache locally.
|
|
40
|
+
* Uses userEndpoint from swoff.config.json.
|
|
41
|
+
*/
|
|
42
|
+
export async function fetchCurrentUser() {
|
|
43
|
+
const response = await authenticatedFetch("${userEndpoint}");
|
|
44
|
+
if (!response.ok) throw new Error("Failed to fetch user");
|
|
45
|
+
|
|
46
|
+
const user = await response.json();
|
|
47
|
+
await cacheUser(user);
|
|
48
|
+
return user;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Store user in IndexedDB for offline access.
|
|
53
|
+
*/
|
|
54
|
+
export async function cacheUser(user) {
|
|
55
|
+
const db = await openAuthDB();
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const tx = db.transaction(STORE_NAME, "readwrite");
|
|
58
|
+
const store = tx.objectStore(STORE_NAME);
|
|
59
|
+
store.put({ key: "user", value: user });
|
|
60
|
+
tx.oncomplete = () => resolve();
|
|
61
|
+
tx.onerror = () => reject(tx.error);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Get cached user — works offline.
|
|
67
|
+
*/
|
|
68
|
+
export async function getCachedUser() {
|
|
69
|
+
const db = await openAuthDB();
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const tx = db.transaction(STORE_NAME, "readonly");
|
|
72
|
+
const store = tx.objectStore(STORE_NAME);
|
|
73
|
+
const request = store.get("user");
|
|
74
|
+
request.onsuccess = () => resolve(request.result?.value || null);
|
|
75
|
+
request.onerror = () => reject(request.error);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Clear cached user on logout.
|
|
81
|
+
*/
|
|
82
|
+
export async function clearCachedUser() {
|
|
83
|
+
const db = await openAuthDB();
|
|
84
|
+
return new Promise((resolve, reject) => {
|
|
85
|
+
const tx = db.transaction(STORE_NAME, "readwrite");
|
|
86
|
+
const store = tx.objectStore(STORE_NAME);
|
|
87
|
+
store.delete("user");
|
|
88
|
+
tx.oncomplete = () => resolve();
|
|
89
|
+
tx.onerror = () => reject(tx.error);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
`;
|
|
93
|
+
writeFile(ctx, `auth-user.${ext}`, code);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=auth-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/auth-user.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,GAAqB;IACpD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IAE3D,MAAM,IAAI,GAAG;;;;gGAIiF,GAAG;;;;;;;mDAOhD,GAAG;;;;;;;;;;;;;;;;;;;;;;;;+CAwBP,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD1D,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -4,12 +4,25 @@
|
|
|
4
4
|
import { writeFile } from "./context.js";
|
|
5
5
|
export function generateMutationQueue(ctx) {
|
|
6
6
|
const ext = ctx.ext;
|
|
7
|
+
const authEnabled = ctx.config.features.auth.enabled;
|
|
8
|
+
const importLines = authEnabled
|
|
9
|
+
? `import { getAuth } from "./auth-store.${ext}";
|
|
10
|
+
`
|
|
11
|
+
: "";
|
|
12
|
+
const authReplayBlock = authEnabled
|
|
13
|
+
? ` const auth = await getAuth();
|
|
14
|
+
const authHeader = auth?.token ? { Authorization: \`Bearer \${auth.token}\` } : {};
|
|
15
|
+
`
|
|
16
|
+
: "";
|
|
17
|
+
const authHeadersSpread = authEnabled
|
|
18
|
+
? ` ...authHeader,`
|
|
19
|
+
: "";
|
|
7
20
|
const code = `/**
|
|
8
21
|
* Swoff Mutation Queue
|
|
9
22
|
* Queue offline writes and sync when connection returns.
|
|
10
23
|
*
|
|
11
24
|
* Usage:
|
|
12
|
-
* import { queueMutation, processMutationQueue, getPendingCount } from './swoff/mutation-queue.${ext}';
|
|
25
|
+
* import { queueMutation, processMutationQueue, flushMutations, getPendingCount } from './swoff/mutation-queue.${ext}';
|
|
13
26
|
*
|
|
14
27
|
* // Queue a mutation
|
|
15
28
|
* await queueMutation({
|
|
@@ -21,10 +34,13 @@ export function generateMutationQueue(ctx) {
|
|
|
21
34
|
* tempId: "temp_abc123",
|
|
22
35
|
* });
|
|
23
36
|
*
|
|
37
|
+
* // Flush queued mutations (e.g., after login)
|
|
38
|
+
* await flushMutations();
|
|
39
|
+
*
|
|
24
40
|
* // Auto-processes on online event
|
|
25
41
|
*/
|
|
26
42
|
|
|
27
|
-
const DB_NAME = "swoff-queue";
|
|
43
|
+
${importLines}const DB_NAME = "swoff-queue";
|
|
28
44
|
const STORE_NAME = "mutations";
|
|
29
45
|
const MAX_RETRIES = 5;
|
|
30
46
|
|
|
@@ -77,7 +93,7 @@ export async function processMutationQueue() {
|
|
|
77
93
|
isSyncing = true;
|
|
78
94
|
|
|
79
95
|
try {
|
|
80
|
-
const db = await openQueueDB();
|
|
96
|
+
${authReplayBlock} const db = await openQueueDB();
|
|
81
97
|
const tx = db.transaction(STORE_NAME, "readonly");
|
|
82
98
|
const store = tx.objectStore(STORE_NAME);
|
|
83
99
|
const index = store.index("by-timestamp");
|
|
@@ -103,7 +119,7 @@ export async function processMutationQueue() {
|
|
|
103
119
|
method: item.method,
|
|
104
120
|
headers: {
|
|
105
121
|
"Content-Type": "application/json",
|
|
106
|
-
...item.headers,
|
|
122
|
+
${authHeadersSpread} ...item.headers,
|
|
107
123
|
},
|
|
108
124
|
body: JSON.stringify(item.body),
|
|
109
125
|
});
|
|
@@ -141,6 +157,12 @@ export async function processMutationQueue() {
|
|
|
141
157
|
}
|
|
142
158
|
}
|
|
143
159
|
|
|
160
|
+
export async function flushMutations() {
|
|
161
|
+
await processMutationQueue();
|
|
162
|
+
}
|
|
163
|
+
`;
|
|
164
|
+
// Helper functions (unchanged) are appended outside the template string
|
|
165
|
+
const helpers = `
|
|
144
166
|
async function removeFromQueue(id) {
|
|
145
167
|
const db = await openQueueDB();
|
|
146
168
|
const tx = db.transaction(STORE_NAME, "readwrite");
|
|
@@ -219,9 +241,7 @@ export async function getPendingCount() {
|
|
|
219
241
|
request.onerror = () => reject(request.error);
|
|
220
242
|
});
|
|
221
243
|
}
|
|
222
|
-
|
|
223
|
-
window.addEventListener("online", processMutationQueue);
|
|
224
244
|
`;
|
|
225
|
-
writeFile(ctx, `mutation-queue.${ext}`, code);
|
|
245
|
+
writeFile(ctx, `mutation-queue.${ext}`, code + helpers);
|
|
226
246
|
}
|
|
227
247
|
//# sourceMappingURL=mutation-queue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-queue.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/mutation-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,qBAAqB,CAAC,GAAqB;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,IAAI,GAAG;;;;;
|
|
1
|
+
{"version":3,"file":"mutation-queue.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/mutation-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,qBAAqB,CAAC,GAAqB;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAErD,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,yCAAyC,GAAG;CACjD;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW;QACjC,CAAC,CAAC;;CAEL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW;QACnC,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG;;;;;oHAKqG,GAAG;;;;;;;;;;;;;;;;;;EAkBrH,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqDX,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;EA0Bf,iBAAiB;;;;;;;;;;;;;;+DAc4C,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjE,CAAC;IAEA,wEAAwE;IACxE,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;qDAyBmC,GAAG;;;;;;kDAMN,GAAG;;;kDAGH,GAAG;;;;;;;;;;;;;;;;;yEAiBoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B3E,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,kBAAkB,GAAG,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -9,6 +9,8 @@ export function generateSwInjector(ctx) {
|
|
|
9
9
|
const preventDefaultInstall = ctx.config.features.pwa.preventDefaultInstall;
|
|
10
10
|
const crossTabSync = ctx.config.features.crossTabSync;
|
|
11
11
|
const ext = ctx.ext;
|
|
12
|
+
const mutationQueueEnabled = ctx.config.features.mutationQueue;
|
|
13
|
+
const authEnabled = ctx.config.features.auth.enabled;
|
|
12
14
|
const code = `/**
|
|
13
15
|
* Swoff SW Injector
|
|
14
16
|
* Framework-agnostic SW registration, PWA install support, and cross-tab sync.
|
|
@@ -28,6 +30,11 @@ export function generateSwInjector(ctx) {
|
|
|
28
30
|
* pwa-installable - PWA can be installed (detail: { isInstallable: true })
|
|
29
31
|
* pwa-installed - User accepted install (detail: { outcome: 'accepted' })
|
|
30
32
|
* cache-invalidated - Cache entries with given tags cleared (detail: { tags })
|
|
33
|
+
* mutation-sync-complete - Queued mutations synced (detail: { succeeded, failed })
|
|
34
|
+
* mutation-queue-changed - Queue modified
|
|
35
|
+
* mutation-rollback - Mutation exhausted retries (detail: { method, url, tempId, previousData })
|
|
36
|
+
* sw-auth-unauthorized - 401 response received (token expired or invalid)${authEnabled ? `
|
|
37
|
+
* sw-auth-state-change - Login or logout (detail: { authenticated: boolean })` : ""}
|
|
31
38
|
*
|
|
32
39
|
* Window properties:
|
|
33
40
|
* window.latestSWVersion - Latest version from version.json
|
|
@@ -40,7 +47,8 @@ export function generateSwInjector(ctx) {
|
|
|
40
47
|
* window.deferredInstallPrompt - Captured BeforeInstallPromptEvent
|
|
41
48
|
* window.pwaInstallable - Whether PWA can be installed
|
|
42
49
|
*/
|
|
43
|
-
|
|
50
|
+
${mutationQueueEnabled ? `import { processMutationQueue } from "./mutation-queue.${ext}";
|
|
51
|
+
` : ""}
|
|
44
52
|
const AUTO_REGISTER = ${autoRegister};
|
|
45
53
|
const AUTO_ACTIVATE = ${autoActivate};
|
|
46
54
|
|
|
@@ -213,6 +221,10 @@ window.addEventListener("appinstalled", () => {
|
|
|
213
221
|
);
|
|
214
222
|
});
|
|
215
223
|
` : ""}
|
|
224
|
+
${mutationQueueEnabled ? `
|
|
225
|
+
// --- Mutation Queue Listener ---
|
|
226
|
+
window.addEventListener("online", processMutationQueue);
|
|
227
|
+
` : ""}
|
|
216
228
|
// --- SW Message Listener ---
|
|
217
229
|
if (typeof window !== "undefined" && "serviceWorker" in navigator) {
|
|
218
230
|
navigator.serviceWorker.addEventListener("message", (event) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sw-injector.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/sw-injector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;IAC3D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;IAC3D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACnD,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG;;;;;8DAK+C,GAAG
|
|
1
|
+
{"version":3,"file":"sw-injector.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/sw-injector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;IAC3D,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;IAC3D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACnD,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;IAE/D,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAErD,MAAM,IAAI,GAAG;;;;;8DAK+C,GAAG;;;;;;;;;;;;;;;;;+EAiBc,WAAW,CAAC,CAAC,CAAC;kFACX,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;EAarF,oBAAoB,CAAC,CAAC,CAAC,0DAA0D,GAAG;CACrF,CAAC,CAAC,CAAC,EAAE;wBACkB,YAAY;wBACZ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgJlC,UAAU,CAAC,CAAC,CAAC;;;;;QAKP,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAqB5B,CAAC,CAAC,CAAC,EAAE;EACJ,oBAAoB,CAAC,CAAC,CAAC;;;CAGxB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BJ,YAAY,CAAC,CAAC,CAAC;;;;;;;;CAQhB,CAAC,CAAC,CAAC,EAAE;;CAEL,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -5,6 +5,9 @@ import { writeFile } from "./context.js";
|
|
|
5
5
|
export function generateTypeDefinitions(ctx) {
|
|
6
6
|
if (ctx.ext !== "ts")
|
|
7
7
|
return;
|
|
8
|
+
const authBlock = ctx.config.features.auth.enabled ? `
|
|
9
|
+
swAuthState?: "authenticated" | "unauthenticated" | "loading";
|
|
10
|
+
swCurrentUser?: object | null;` : "";
|
|
8
11
|
const code = `interface BeforeInstallPromptEvent extends Event {
|
|
9
12
|
prompt(): Promise<void>;
|
|
10
13
|
userChoice: Promise<{ outcome: "accepted" | "dismissed" }>;
|
|
@@ -20,7 +23,7 @@ declare global {
|
|
|
20
23
|
swUpdateRequired?: boolean;
|
|
21
24
|
swMinSupportedVersion?: string;
|
|
22
25
|
swReady?: boolean;
|
|
23
|
-
swError?: boolean
|
|
26
|
+
swError?: boolean;${authBlock}
|
|
24
27
|
}
|
|
25
28
|
}
|
|
26
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-definitions.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/type-definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,uBAAuB,CAAC,GAAqB;IAC3D,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO;IAE7B,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"type-definitions.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/type-definitions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,uBAAuB,CAAC,GAAqB;IAC3D,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI;QAAE,OAAO;IAE7B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;;mCAEpB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;wBAeS,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ChC,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -53,7 +53,7 @@ export function assembleSW(config, version, projectRoot) {
|
|
|
53
53
|
sw = sw.replace("// [[FETCH_HANDLER]]", generateFetchHandler(serviceWorker, features.tagInvalidation));
|
|
54
54
|
sw = sw.replace("// [[ACTIVATE_HANDLER]]", generateActivateHandler(serviceWorker.clearRuntimeOnUpdate));
|
|
55
55
|
sw = sw.replace("// [[INSTALL_HANDLER]]", generateInstallHandler());
|
|
56
|
-
sw = sw.replace("// [[MESSAGE_HANDLER]]", generateMessageHandler(features.tagInvalidation));
|
|
56
|
+
sw = sw.replace("// [[MESSAGE_HANDLER]]", generateMessageHandler(features.tagInvalidation, features.auth.enabled));
|
|
57
57
|
if (features.tagInvalidation) {
|
|
58
58
|
sw = sw.replace("// [[TAG_MANAGEMENT]]", generateTagManagement());
|
|
59
59
|
}
|
|
@@ -62,7 +62,8 @@ export function assembleSW(config, version, projectRoot) {
|
|
|
62
62
|
}
|
|
63
63
|
sw = `${generateConfigHeader(config, version)}\n\n${sw}`;
|
|
64
64
|
if (features.backgroundSync) {
|
|
65
|
-
|
|
65
|
+
const authType = features.auth.enabled ? features.auth.type : undefined;
|
|
66
|
+
sw += `\n\n${generateBackgroundSyncHandler(authType)}`;
|
|
66
67
|
}
|
|
67
68
|
return sw;
|
|
68
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assemble-sw.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/assemble-sw.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"assemble-sw.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/assemble-sw.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* Generates Background Sync event handler for the SW.
|
|
3
3
|
* Processes mutation queue when browser sync fires.
|
|
4
4
|
*/
|
|
5
|
-
export function generateBackgroundSyncHandler() {
|
|
5
|
+
export function generateBackgroundSyncHandler(authType) {
|
|
6
|
+
const credentialsLine = authType === "cookie"
|
|
7
|
+
? ` credentials: "same-origin",`
|
|
8
|
+
: "";
|
|
6
9
|
return `
|
|
7
10
|
self.addEventListener("sync", (event) => {
|
|
8
11
|
if (event.tag === "sync-mutations") {
|
|
@@ -10,11 +13,11 @@ self.addEventListener("sync", (event) => {
|
|
|
10
13
|
}
|
|
11
14
|
});
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const SW_MAX_RETRIES = 5;
|
|
16
|
+
const SW_DB_NAME = "swoff-queue";
|
|
17
|
+
const SW_STORE_NAME = "mutations";
|
|
18
|
+
const SW_MAX_RETRIES = 5;
|
|
17
19
|
|
|
20
|
+
async function processMutationQueueInSW() {
|
|
18
21
|
let succeeded = 0;
|
|
19
22
|
let failed = 0;
|
|
20
23
|
const tagsToInvalidate = new Set();
|
|
@@ -53,7 +56,7 @@ async function processMutationQueueInSW() {
|
|
|
53
56
|
method: item.method,
|
|
54
57
|
headers: { "Content-Type": "application/json", ...item.headers },
|
|
55
58
|
body: JSON.stringify(item.body),
|
|
56
|
-
});
|
|
59
|
+
${credentialsLine} });
|
|
57
60
|
if (!response.ok) throw new Error(\`HTTP \${response.status}\`);
|
|
58
61
|
|
|
59
62
|
if (item.tags) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-sync-handler.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/background-sync-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,6BAA6B;
|
|
1
|
+
{"version":3,"file":"background-sync-handler.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/background-sync-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,6BAA6B,CAAC,QAAiB;IAC7D,MAAM,eAAe,GAAG,QAAQ,KAAK,QAAQ;QAC3C,CAAC,CAAC,uCAAuC;QACzC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDP,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDf,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generates the SW message event handler (SKIP_WAITING, INVALIDATE_TAG).
|
|
2
|
+
* Generates the SW message event handler (SKIP_WAITING, INVALIDATE_TAG, CLEAR_RUNTIME_CACHE).
|
|
3
3
|
*/
|
|
4
|
-
export function generateMessageHandler(tagInvalidation) {
|
|
4
|
+
export function generateMessageHandler(tagInvalidation, authEnabled) {
|
|
5
5
|
let code = `
|
|
6
6
|
self.addEventListener("message", (event) => {
|
|
7
7
|
if (event.data.type === "SKIP_WAITING") {
|
|
@@ -11,6 +11,16 @@ self.addEventListener("message", (event) => {
|
|
|
11
11
|
code += `
|
|
12
12
|
if (event.data.type === "INVALIDATE_TAG" && event.data.tag) {
|
|
13
13
|
event.waitUntil(invalidateByTag(event.data.tag));
|
|
14
|
+
}`;
|
|
15
|
+
}
|
|
16
|
+
if (authEnabled) {
|
|
17
|
+
code += `
|
|
18
|
+
if (event.data.type === "CLEAR_RUNTIME_CACHE") {
|
|
19
|
+
event.waitUntil(
|
|
20
|
+
caches.delete(CACHE_NAME_RUNTIME).then(() => {
|
|
21
|
+
return caches.open(CACHE_NAME_RUNTIME);
|
|
22
|
+
}),
|
|
23
|
+
);
|
|
14
24
|
}`;
|
|
15
25
|
}
|
|
16
26
|
code += `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/message-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,sBAAsB,CAAC,eAAwB;
|
|
1
|
+
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/message-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,sBAAsB,CAAC,eAAwB,EAAE,WAAoB;IACnF,IAAI,IAAI,GAAG;;;;IAIT,CAAC;IAEH,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,IAAI;;;IAGR,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,IAAI;;;;;;;IAOR,CAAC;IACH,CAAC;IAED,IAAI,IAAI;IACN,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -26,6 +26,10 @@ import { generateIndexedDB } from "./file-generators/indexeddb.js";
|
|
|
26
26
|
import { generatePwaInstall } from "./file-generators/pwa-install.js";
|
|
27
27
|
import { generateManifest } from "./file-generators/manifest.js";
|
|
28
28
|
import { generateInvalidationTags } from "./file-generators/invalidation-tags.js";
|
|
29
|
+
import { generateAuthStore } from "./file-generators/auth-store.js";
|
|
30
|
+
import { generateAuthFetch } from "./file-generators/auth-fetch.js";
|
|
31
|
+
import { generateAuthUser } from "./file-generators/auth-user.js";
|
|
32
|
+
import { generateAuthState } from "./file-generators/auth-state.js";
|
|
29
33
|
import { generateSwGeneratorBuild } from "./file-generators/sw-generator-build.js";
|
|
30
34
|
import { generateTypeDefinitions } from "./file-generators/type-definitions.js";
|
|
31
35
|
export function generateFiles(ctx, onFile) {
|
|
@@ -38,6 +42,10 @@ export function generateFiles(ctx, onFile) {
|
|
|
38
42
|
{ name: "reconcile", gen: () => generateReconcile(ctx), enabled: ctx.config.features.mutationQueue },
|
|
39
43
|
{ name: "mutation-queue", gen: () => generateMutationQueue(ctx), enabled: ctx.config.features.mutationQueue },
|
|
40
44
|
{ name: "background-sync", gen: () => generateBackgroundSync(ctx), enabled: ctx.config.features.backgroundSync },
|
|
45
|
+
{ name: "auth-store", gen: () => generateAuthStore(ctx), enabled: ctx.config.features.auth.enabled },
|
|
46
|
+
{ name: "auth-fetch", gen: () => generateAuthFetch(ctx), enabled: ctx.config.features.auth.enabled },
|
|
47
|
+
{ name: "auth-user", gen: () => generateAuthUser(ctx), enabled: ctx.config.features.auth.enabled },
|
|
48
|
+
{ name: "auth-state", gen: () => generateAuthState(ctx), enabled: ctx.config.features.auth.enabled },
|
|
41
49
|
{ name: "indexeddb", gen: () => generateIndexedDB(ctx), enabled: ctx.config.features.indexeddb.enabled },
|
|
42
50
|
{ name: "sw-generator", gen: () => generateSwGeneratorBuild(ctx), enabled: true },
|
|
43
51
|
{ name: "swoff.d.ts", gen: () => generateTypeDefinitions(ctx), enabled: ctx.ext === "ts" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swoff-files-generator.js","sourceRoot":"","sources":["../../../src/lib/generators/swoff-files-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAQhF,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,MAA+B;IAClF,MAAM,KAAK,GAAW;QACpB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1E,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;QACnL,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;QAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QACpG,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC7G,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;QAChH,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE;QACxG,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QACjF,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE;QAC1F,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;QACrG,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;QACrG,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;KACtH,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;QAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC,cAAc,CAAC;AAC5B,CAAC;AAED,0BAA0B;AAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAEnF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAqB;QAC5B,MAAM;QACN,WAAW;QACX,QAAQ;QACR,GAAG;QACH,cAAc;KACf,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK;QACpC,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QACH,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,MAAM,CAAC,CAAC;IAEvD,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,CAAC,MAAM,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
1
|
+
{"version":3,"file":"swoff-files-generator.js","sourceRoot":"","sources":["../../../src/lib/generators/swoff-files-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAQhF,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,MAA+B;IAClF,MAAM,KAAK,GAAW;QACpB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QAC1E,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;QACnL,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;QAC9F,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC5F,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QACpG,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC7G,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;QAChH,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;QACpG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;QACpG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;QAClG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;QACpG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE;QACxG,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;QACjF,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE;QAC1F,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;QACrG,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;QACrG,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;KACtH,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;QAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC,cAAc,CAAC;AAC5B,CAAC;AAED,0BAA0B;AAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAEnF,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAqB;QAC5B,MAAM;QACN,WAAW;QACX,QAAQ;QACR,GAAG;QACH,cAAc;KACf,CAAC;IAEF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK;QACpC,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QACH,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,MAAM,CAAC,CAAC;IAEvD,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;IAExD,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,cAAc,CAAC,MAAM,QAAQ,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -7,7 +7,7 @@ export const KNOWN_FEATURES = [
|
|
|
7
7
|
"tagInvalidation",
|
|
8
8
|
"clientRegistration",
|
|
9
9
|
];
|
|
10
|
-
export const OBJECT_FEATURES = ["pwa", "indexeddb"];
|
|
10
|
+
export const OBJECT_FEATURES = ["pwa", "indexeddb", "auth"];
|
|
11
11
|
export const VALID_STRATEGIES = [
|
|
12
12
|
"cache-first",
|
|
13
13
|
"network-first",
|
|
@@ -16,6 +16,13 @@ export const VALID_STRATEGIES = [
|
|
|
16
16
|
"network-only",
|
|
17
17
|
];
|
|
18
18
|
export const API_PREFIXES = ["api", "v1", "v2", "v3", "rest", "graphql", "gql"];
|
|
19
|
+
function normalizeAuth(auth) {
|
|
20
|
+
if (typeof auth === "boolean")
|
|
21
|
+
return { ...defaultAuth, enabled: auth };
|
|
22
|
+
if (auth && typeof auth === "object")
|
|
23
|
+
return { ...defaultAuth, ...auth };
|
|
24
|
+
return defaultAuth;
|
|
25
|
+
}
|
|
19
26
|
export function mergeConfigs(base, override) {
|
|
20
27
|
return {
|
|
21
28
|
...base,
|
|
@@ -26,10 +33,17 @@ export function mergeConfigs(base, override) {
|
|
|
26
33
|
...override.features,
|
|
27
34
|
pwa: { ...base.features.pwa, ...override.features?.pwa },
|
|
28
35
|
indexeddb: { ...base.features.indexeddb, ...override.features?.indexeddb },
|
|
36
|
+
auth: normalizeAuth(override.features?.auth),
|
|
29
37
|
},
|
|
30
38
|
build: { ...base.build, ...override.build },
|
|
31
39
|
};
|
|
32
40
|
}
|
|
41
|
+
export const defaultAuth = {
|
|
42
|
+
enabled: false,
|
|
43
|
+
type: "bearer",
|
|
44
|
+
refreshPath: "/api/refresh",
|
|
45
|
+
userEndpoint: "/api/me",
|
|
46
|
+
};
|
|
33
47
|
export const defaultConfig = {
|
|
34
48
|
enabled: true,
|
|
35
49
|
version: "from-package",
|
|
@@ -56,7 +70,7 @@ export const defaultConfig = {
|
|
|
56
70
|
versionedSw: true,
|
|
57
71
|
mutationQueue: false,
|
|
58
72
|
backgroundSync: false,
|
|
59
|
-
auth:
|
|
73
|
+
auth: { ...defaultAuth },
|
|
60
74
|
crossTabSync: true,
|
|
61
75
|
tagInvalidation: true,
|
|
62
76
|
clientRegistration: true,
|