@swoff/cli 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +49 -0
  2. package/dist/__tests__/assemble-sw.test.js +145 -0
  3. package/dist/__tests__/assemble-sw.test.js.map +1 -0
  4. package/dist/__tests__/cli-integration.test.js +128 -0
  5. package/dist/__tests__/cli-integration.test.js.map +1 -0
  6. package/dist/__tests__/config-types.test.js +82 -0
  7. package/dist/__tests__/config-types.test.js.map +1 -0
  8. package/dist/__tests__/detect-language.test.js +51 -0
  9. package/dist/__tests__/detect-language.test.js.map +1 -0
  10. package/dist/__tests__/file-generators.test.js +272 -0
  11. package/dist/__tests__/file-generators.test.js.map +1 -0
  12. package/dist/__tests__/invalidation-tags.test.js +99 -0
  13. package/dist/__tests__/invalidation-tags.test.js.map +1 -0
  14. package/dist/__tests__/loader.test.js +77 -0
  15. package/dist/__tests__/loader.test.js.map +1 -0
  16. package/dist/__tests__/validator.test.js +231 -0
  17. package/dist/__tests__/validator.test.js.map +1 -0
  18. package/dist/index.js +22 -585
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/cli/colors.js +14 -0
  21. package/dist/lib/cli/colors.js.map +1 -0
  22. package/dist/lib/cli/help.js +63 -0
  23. package/dist/lib/cli/help.js.map +1 -0
  24. package/dist/lib/cli/logger.js +13 -0
  25. package/dist/lib/cli/logger.js.map +1 -0
  26. package/dist/lib/commands/add.js +58 -0
  27. package/dist/lib/commands/add.js.map +1 -0
  28. package/dist/lib/commands/clean.js +39 -0
  29. package/dist/lib/commands/clean.js.map +1 -0
  30. package/dist/lib/commands/generate.js +84 -0
  31. package/dist/lib/commands/generate.js.map +1 -0
  32. package/dist/lib/commands/info.js +44 -0
  33. package/dist/lib/commands/info.js.map +1 -0
  34. package/dist/lib/commands/init.js +46 -0
  35. package/dist/lib/commands/init.js.map +1 -0
  36. package/dist/lib/commands/validate.js +30 -0
  37. package/dist/lib/commands/validate.js.map +1 -0
  38. package/dist/lib/config/loader.js +80 -0
  39. package/dist/lib/config/loader.js.map +1 -0
  40. package/dist/lib/config/validator.js +102 -0
  41. package/dist/lib/config/validator.js.map +1 -0
  42. package/dist/lib/generators/file-generators/background-sync.js +59 -0
  43. package/dist/lib/generators/file-generators/background-sync.js.map +1 -0
  44. package/dist/lib/generators/file-generators/cache.js +55 -0
  45. package/dist/lib/generators/file-generators/cache.js.map +1 -0
  46. package/dist/lib/generators/file-generators/context.js +16 -0
  47. package/dist/lib/generators/file-generators/context.js.map +1 -0
  48. package/dist/lib/generators/file-generators/fetch-wrapper.js +80 -0
  49. package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -0
  50. package/dist/lib/generators/file-generators/indexeddb.js +73 -0
  51. package/dist/lib/generators/file-generators/indexeddb.js.map +1 -0
  52. package/dist/lib/generators/file-generators/invalidation-tags.js +91 -0
  53. package/dist/lib/generators/file-generators/invalidation-tags.js.map +1 -0
  54. package/dist/lib/generators/file-generators/manifest.js +26 -0
  55. package/dist/lib/generators/file-generators/manifest.js.map +1 -0
  56. package/dist/lib/generators/file-generators/mutation-queue.js +226 -0
  57. package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -0
  58. package/dist/lib/generators/file-generators/pwa-install.js +102 -0
  59. package/dist/lib/generators/file-generators/pwa-install.js.map +1 -0
  60. package/dist/lib/generators/file-generators/reconcile.js +54 -0
  61. package/dist/lib/generators/file-generators/reconcile.js.map +1 -0
  62. package/dist/lib/generators/file-generators/store.js +75 -0
  63. package/dist/lib/generators/file-generators/store.js.map +1 -0
  64. package/dist/lib/generators/file-generators/sw-generator-build.js +70 -0
  65. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -0
  66. package/dist/lib/generators/file-generators/sw-injector.js +201 -0
  67. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -0
  68. package/dist/lib/generators/file-generators/sw-template.js +143 -0
  69. package/dist/lib/generators/file-generators/sw-template.js.map +1 -0
  70. package/dist/lib/generators/file-generators/type-definitions.js +69 -0
  71. package/dist/lib/generators/file-generators/type-definitions.js.map +1 -0
  72. package/dist/lib/generators/sw-generator.js +33 -569
  73. package/dist/lib/generators/sw-generator.js.map +1 -1
  74. package/dist/lib/generators/sw-sections/activate-handler.js +16 -0
  75. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -0
  76. package/dist/lib/generators/sw-sections/assemble-sw.js +38 -0
  77. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -0
  78. package/dist/lib/generators/sw-sections/background-sync-handler.js +106 -0
  79. package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -0
  80. package/dist/lib/generators/sw-sections/config-header.js +15 -0
  81. package/dist/lib/generators/sw-sections/config-header.js.map +1 -0
  82. package/dist/lib/generators/sw-sections/default-template.js +51 -0
  83. package/dist/lib/generators/sw-sections/default-template.js.map +1 -0
  84. package/dist/lib/generators/sw-sections/fetch-handler.js +203 -0
  85. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -0
  86. package/dist/lib/generators/sw-sections/install-handler.js +35 -0
  87. package/dist/lib/generators/sw-sections/install-handler.js.map +1 -0
  88. package/dist/lib/generators/sw-sections/message-handler.js +20 -0
  89. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -0
  90. package/dist/lib/generators/sw-sections/tag-management.js +69 -0
  91. package/dist/lib/generators/sw-sections/tag-management.js.map +1 -0
  92. package/dist/lib/generators/swoff-files-generator.js +78 -1368
  93. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  94. package/dist/lib/shared/config-types.js +87 -0
  95. package/dist/lib/shared/config-types.js.map +1 -0
  96. package/dist/lib/utils/detect-language.js +33 -0
  97. package/dist/lib/utils/detect-language.js.map +1 -0
  98. package/package.json +5 -2
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Generates sw-injector.{js|ts} - client-side SW registration with version checking.
3
+ */
4
+ import { writeFile } from "./context.js";
5
+ export function generateSwInjector(ctx) {
6
+ const autoRegister = ctx.config.serviceWorker.autoRegister;
7
+ const autoActivate = ctx.config.serviceWorker.autoActivate;
8
+ const ext = ctx.ext;
9
+ const code = `/**
10
+ * Swoff Service Worker Injector
11
+ * Framework-agnostic client registration with version checking.
12
+ *
13
+ * Usage:
14
+ * import { initServiceWorker } from './swoff/sw-injector.${ext}';
15
+ *
16
+ * // Call in your app entry point (e.g., main.tsx, app.js):
17
+ * initServiceWorker();
18
+ *
19
+ * // Or defer until after onboarding, but still call initServiceWorker():
20
+ * // (edit the shouldRegister function below instead)
21
+ *
22
+ * Window events:
23
+ * sw-version-detected - Version info available on window
24
+ * sw-update-available - New version ready for user consent (detail: { version })
25
+ * sw-progress - Download progress (detail: { percent, downloaded, total })
26
+ * sw-ready - SW active and controlling page
27
+ * sw-error - SW registration failed
28
+ *
29
+ * Window properties:
30
+ * window.latestSWVersion - Latest version from version.json
31
+ * window.currentSWVersion - Active SW version
32
+ * window.swAvailableVersion - Pending update version
33
+ * window.swUpdateRequired - Forced update needed (version < minSupportedVersion)
34
+ * window.swMinSupportedVersion - Minimum supported version from version.json
35
+ * window.swReady - SW is active
36
+ * window.swError - Registration failed
37
+ */
38
+
39
+ const AUTO_REGISTER = ${autoRegister};
40
+ const AUTO_ACTIVATE = ${autoActivate};
41
+
42
+ async function checkForUpdate() {
43
+ const response = await fetch("/version.json");
44
+ if (!response.ok) {
45
+ throw new Error("Failed to fetch version.json");
46
+ }
47
+ return response.json();
48
+ }
49
+
50
+ async function doRegisterServiceWorker(version) {
51
+ const swUrl = \`/sw-v\${version}.js\`;
52
+ const registration = await navigator.serviceWorker.register(swUrl);
53
+ localStorage.setItem("swRegisteredVersion", version);
54
+ window.currentSWVersion = version;
55
+ window.swRegisteredVersion = version;
56
+ window.dispatchEvent(new CustomEvent("sw-version-detected"));
57
+ window.dispatchEvent(new CustomEvent("sw-ready"));
58
+ return registration;
59
+ }
60
+
61
+ function shouldRegister() {
62
+ // Add custom preconditions here. Return false to prevent registration.
63
+ // Examples:
64
+ // if (!localStorage.getItem("onboarding-complete")) return false;
65
+ // if (navigator.connection?.effectiveType === "slow-2g") return false;
66
+
67
+ return true;
68
+ }
69
+
70
+ export async function initServiceWorker() {
71
+ if (!("serviceWorker" in navigator)) {
72
+ console.warn("Service Workers not supported");
73
+ return;
74
+ }
75
+
76
+ if (!shouldRegister()) return;
77
+
78
+ try {
79
+ const manifest = await checkForUpdate();
80
+ const currentVersion = localStorage.getItem("swRegisteredVersion");
81
+ window.latestSWVersion = manifest.version;
82
+ window.swMinSupportedVersion = manifest.minSupportedVersion || "0.0.0";
83
+
84
+ if (currentVersion === manifest.version) {
85
+ const registration = await navigator.serviceWorker.getRegistration();
86
+ if (registration && registration.active) {
87
+ window.currentSWVersion = currentVersion;
88
+ window.dispatchEvent(new CustomEvent("sw-version-detected"));
89
+ window.dispatchEvent(new CustomEvent("sw-ready"));
90
+ }
91
+ } else if (currentVersion && currentVersion !== manifest.version) {
92
+ window.swAvailableVersion = manifest.version;
93
+ window.swUpdateRequired =
94
+ currentVersion < (manifest.minSupportedVersion || "0.0.0");
95
+
96
+ if (AUTO_REGISTER) {
97
+ const registration = await navigator.serviceWorker.getRegistration();
98
+ if (registration && registration.waiting) {
99
+ if (AUTO_ACTIVATE) {
100
+ registration.waiting.postMessage({ type: "SKIP_WAITING" });
101
+ } else {
102
+ window.dispatchEvent(
103
+ new CustomEvent("sw-update-available", {
104
+ detail: { version: manifest.version },
105
+ })
106
+ );
107
+ }
108
+ } else {
109
+ const newReg = await doRegisterServiceWorker(manifest.version);
110
+ if (AUTO_ACTIVATE && newReg.waiting) {
111
+ newReg.waiting.postMessage({ type: "SKIP_WAITING" });
112
+ } else {
113
+ window.dispatchEvent(
114
+ new CustomEvent("sw-update-available", {
115
+ detail: { version: manifest.version },
116
+ })
117
+ );
118
+ }
119
+ }
120
+ } else {
121
+ window.dispatchEvent(
122
+ new CustomEvent("sw-update-available", {
123
+ detail: { version: manifest.version },
124
+ })
125
+ );
126
+ }
127
+ } else {
128
+ await doRegisterServiceWorker(manifest.version);
129
+ }
130
+ } catch (error) {
131
+ // Offline or version.json fetch failed — try using existing registration
132
+ try {
133
+ const existing = await navigator.serviceWorker.getRegistration();
134
+ if (existing && existing.active) {
135
+ window.currentSWVersion = localStorage.getItem("swRegisteredVersion") || "unknown";
136
+ window.dispatchEvent(new CustomEvent("sw-version-detected"));
137
+ window.dispatchEvent(new CustomEvent("sw-ready"));
138
+ return;
139
+ }
140
+ } catch {
141
+ // Registration check also failed, nothing we can do
142
+ }
143
+
144
+ console.error("Service Worker initialization failed:", error);
145
+ window.swError = true;
146
+ window.dispatchEvent(new CustomEvent("sw-error"));
147
+ }
148
+ }
149
+
150
+ export async function handleUpdateApproved(newVersion) {
151
+ const registration = await navigator.serviceWorker.getRegistration();
152
+ if (registration && registration.waiting) {
153
+ registration.waiting.postMessage({ type: "SKIP_WAITING" });
154
+ registration.addEventListener("controllerchange", () => {
155
+ window.location.reload();
156
+ });
157
+ } else {
158
+ await doRegisterServiceWorker(newVersion);
159
+ navigator.serviceWorker.addEventListener("controllerchange", () => {
160
+ window.location.reload();
161
+ });
162
+ }
163
+ }
164
+
165
+ export async function skipWaiting() {
166
+ const registration = await navigator.serviceWorker.ready;
167
+ if (registration.waiting) {
168
+ registration.waiting.postMessage({ type: "SKIP_WAITING" });
169
+ }
170
+ }
171
+
172
+ if (typeof window !== "undefined" && "serviceWorker" in navigator) {
173
+ navigator.serviceWorker.addEventListener("message", (event) => {
174
+ if (event.data.type === "SW_PROGRESS") {
175
+ const { percent, downloaded, total } = event.data;
176
+ window.dispatchEvent(
177
+ new CustomEvent("sw-progress", {
178
+ detail: { percent, downloaded, total },
179
+ })
180
+ );
181
+ }
182
+ if (event.data.type === "BACKGROUND_SYNC_COMPLETE") {
183
+ const { succeeded, failed, tags } = event.data.detail;
184
+ window.dispatchEvent(
185
+ new CustomEvent("mutation-sync-complete", {
186
+ detail: { succeeded, failed },
187
+ })
188
+ );
189
+ if (tags && tags.length > 0) {
190
+ window.dispatchEvent(
191
+ new CustomEvent("cache-invalidated", { detail: { tags } })
192
+ );
193
+ }
194
+ window.dispatchEvent(new CustomEvent("mutation-queue-changed"));
195
+ }
196
+ });
197
+ }
198
+ `;
199
+ writeFile(ctx, `sw-injector.${ext}`, code);
200
+ }
201
+ //# sourceMappingURL=sw-injector.js.map
@@ -0,0 +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,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAEpB,MAAM,IAAI,GAAG;;;;;8DAK+C,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;wBAyBzC,YAAY;wBACZ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8JnC,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Generates sw-template.js - the SW template with placeholders.
3
+ */
4
+ import { writeFile } from "./context.js";
5
+ export function generateSwTemplate(ctx) {
6
+ const code = `/**
7
+ * Swoff Service Worker Template
8
+ *
9
+ * This file is processed by swoff/sw-generator.js to create
10
+ * a versioned service worker. Placeholders are replaced during build.
11
+ *
12
+ * Placeholders:
13
+ * // [[CACHE_NAME]] - Replaced with versioned cache name
14
+ * // [[ASSETS_LIST]] - Replaced with assets to cache
15
+ * // [[AUTO_SKIP_WAITING]] - Replaced with autoActivate config
16
+ *
17
+ * You can customize this template before running the build script.
18
+ */
19
+
20
+ let CACHE_NAME = "";
21
+ let ASSETS_TO_CACHE = [];
22
+
23
+ // [[CACHE_NAME]]
24
+ // [[ASSETS_LIST]]
25
+ // [[AUTO_SKIP_WAITING]]
26
+
27
+ const CACHE_NAME_RUNTIME = "swoff-runtime";
28
+
29
+ // Install - download assets with progress tracking
30
+ self.addEventListener("install", (event) => {
31
+ event.waitUntil(
32
+ (async () => {
33
+ const cache = await caches.open(CACHE_NAME);
34
+ let downloaded = 0;
35
+ for (const asset of ASSETS_TO_CACHE) {
36
+ try {
37
+ const request = new Request(asset.url, asset.options);
38
+ await cache.add(request);
39
+ downloaded++;
40
+ const percent = Math.round((downloaded / ASSETS_TO_CACHE.length) * 100);
41
+ const clients = await self.clients.matchAll({ includeUncontrolled: true });
42
+ clients.forEach((client) => {
43
+ client.postMessage({
44
+ type: "SW_PROGRESS",
45
+ percent,
46
+ downloaded,
47
+ total: ASSETS_TO_CACHE.length,
48
+ });
49
+ });
50
+ } catch (err) {
51
+ console.error(\`Failed to cache \${asset.url}:\`, err);
52
+ }
53
+ }
54
+ if (AUTO_SKIP_WAITING) self.skipWaiting();
55
+ })(),
56
+ );
57
+ });
58
+
59
+ // Activate - clean old caches
60
+ self.addEventListener("activate", (event) => {
61
+ event.waitUntil(
62
+ caches.keys().then((keys) =>
63
+ Promise.all(
64
+ keys.filter((key) => key !== CACHE_NAME && key !== CACHE_NAME_RUNTIME).map((key) => caches.delete(key))
65
+ )
66
+ )
67
+ );
68
+ });
69
+
70
+ // Message - skip waiting and cache invalidation
71
+ self.addEventListener("message", (event) => {
72
+ if (event.data.type === "SKIP_WAITING") {
73
+ self.skipWaiting();
74
+ }
75
+ });
76
+
77
+ // Fetch - cache strategies
78
+ self.addEventListener("fetch", (event) => {
79
+ if (event.request.method !== "GET" && event.request.method !== "HEAD") return;
80
+
81
+ event.respondWith(
82
+ (async () => {
83
+ const cache = await caches.open(CACHE_NAME);
84
+ const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
85
+ const url = new URL(event.request.url);
86
+
87
+ const byPath = await cache.match(url.pathname);
88
+ if (byPath) return byPath;
89
+
90
+ const byRequest = await runtimeCache.match(event.request);
91
+ if (byRequest) return byRequest;
92
+
93
+ if (event.request.mode === "navigate") {
94
+ const spa = await cache.match("/index.html");
95
+ if (spa) return spa;
96
+ }
97
+
98
+ try {
99
+ const response = await fetch(event.request);
100
+ if (response.ok) {
101
+ await runtimeCache.put(event.request, response.clone());
102
+ }
103
+ return response;
104
+ } catch {
105
+ return new Response("Offline: content not available", { status: 503 });
106
+ }
107
+ })(),
108
+ );
109
+ });
110
+
111
+ const SWOFF = {
112
+ cache: {
113
+ async get(key) {
114
+ const cache = await caches.open(CACHE_NAME);
115
+ return cache.match(key);
116
+ },
117
+ async put(request, response) {
118
+ const cache = await caches.open(CACHE_NAME);
119
+ await cache.put(request, response);
120
+ },
121
+ async delete(request) {
122
+ const cache = await caches.open(CACHE_NAME);
123
+ return cache.delete(request);
124
+ }
125
+ },
126
+ network: {
127
+ async fetch(request, options = {}) {
128
+ try {
129
+ return await fetch(request, options);
130
+ } catch (error) {
131
+ throw new Error(\`Network request failed: \${error.message}\`);
132
+ }
133
+ }
134
+ }
135
+ };
136
+
137
+ if (typeof self !== 'undefined') {
138
+ self.SWOFF = SWOFF;
139
+ }
140
+ `;
141
+ writeFile(ctx, "sw-template.js", code);
142
+ }
143
+ //# sourceMappingURL=sw-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-template.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/sw-template.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsId,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Generates swoff.d.ts - TypeScript type declarations.
3
+ */
4
+ import { writeFile } from "./context.js";
5
+ export function generateTypeDefinitions(ctx) {
6
+ if (ctx.ext !== "ts")
7
+ return;
8
+ const code = `interface BeforeInstallPromptEvent extends Event {
9
+ prompt(): Promise<void>;
10
+ userChoice: Promise<{ outcome: "accepted" | "dismissed" }>;
11
+ }
12
+
13
+ declare global {
14
+ interface Window {
15
+ deferredInstallPrompt: BeforeInstallPromptEvent | null;
16
+ latestSWVersion?: string;
17
+ currentSWVersion?: string;
18
+ swRegisteredVersion?: string;
19
+ swAvailableVersion?: string;
20
+ swUpdateRequired?: boolean;
21
+ swMinSupportedVersion?: string;
22
+ swReady?: boolean;
23
+ swError?: boolean;
24
+ }
25
+ }
26
+
27
+ export interface SWOFFCache {
28
+ get(key: Request | string): Promise<Response | undefined>;
29
+ put(request: Request | string, response: Response): Promise<void>;
30
+ delete(request: Request | string): Promise<boolean>;
31
+ }
32
+
33
+ export interface SWOFF {
34
+ cache: SWOFFCache;
35
+ network: {
36
+ fetch(request: Request | string, options?: RequestInit): Promise<Response>;
37
+ };
38
+ }
39
+
40
+ export interface FetchWithCacheOptions extends RequestInit {
41
+ strategy?: "read" | "mutation";
42
+ tags?: string[];
43
+ staleWhileRevalidate?: boolean;
44
+ }
45
+
46
+ export interface MutationQueueItem {
47
+ id: string;
48
+ method: string;
49
+ url: string;
50
+ body: unknown;
51
+ headers: Record<string, string>;
52
+ previousData: unknown | null;
53
+ timestamp: number;
54
+ retryCount: number;
55
+ tags: string[];
56
+ storeName: string | null;
57
+ tempId: string | null;
58
+ }
59
+
60
+ export interface MutationQueueResult {
61
+ succeeded: number;
62
+ failed: number;
63
+ }
64
+
65
+ export {};
66
+ `;
67
+ writeFile(ctx, "swoff.d.ts", code);
68
+ }
69
+ //# sourceMappingURL=type-definitions.js.map
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Dd,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC"}