@tramvai/module-progressive-web-app 3.13.0 → 3.14.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.
- package/lib/browser.d.ts +3 -0
- package/lib/browser.js +8 -3
- package/lib/manifest/browser.browser.js +5 -1
- package/lib/manifest/browser.d.ts +3 -0
- package/lib/manifest/server.d.ts +3 -0
- package/lib/manifest/server.es.js +19 -40
- package/lib/manifest/server.js +18 -38
- package/lib/manifest/shared/providers.d.ts +18 -0
- package/lib/manifest/shared/providers.es.js +38 -0
- package/lib/manifest/shared/providers.js +43 -0
- package/lib/server.d.ts +3 -0
- package/lib/server.es.js +8 -3
- package/lib/server.js +6 -0
- package/lib/workbox/browser.browser.js +37 -84
- package/lib/workbox/browser.d.ts +3 -0
- package/lib/workbox/server.d.ts +3 -0
- package/lib/workbox/server.es.js +34 -33
- package/lib/workbox/server.js +34 -32
- package/lib/workbox/shared/providers/swProviders.browser.js +27 -0
- package/lib/workbox/shared/providers/swProviders.d.ts +7 -0
- package/lib/workbox/shared/providers/swProviders.es.js +27 -0
- package/lib/workbox/{shared.js → shared/providers/swProviders.js} +9 -8
- package/lib/workbox/shared/providers/workboxProviders.browser.js +73 -0
- package/lib/workbox/shared/providers/workboxProviders.d.ts +31 -0
- package/lib/workbox/shared/utils/normalizeSwUrl.browser.js +8 -0
- package/lib/workbox/shared/utils/normalizeSwUrl.d.ts +2 -0
- package/lib/workbox/shared/utils/normalizeSwUrl.es.js +8 -0
- package/lib/workbox/shared/utils/normalizeSwUrl.js +12 -0
- package/lib/workbox/shared/utils/validateUrl.d.ts +3 -0
- package/lib/workbox/shared/utils/validateUrl.es.js +18 -0
- package/lib/workbox/shared/utils/validateUrl.js +23 -0
- package/package.json +6 -6
- package/lib/workbox/shared.browser.js +0 -27
- package/lib/workbox/shared.d.ts +0 -24
- package/lib/workbox/shared.es.js +0 -27
package/lib/browser.d.ts
CHANGED
|
@@ -5,4 +5,7 @@ export { TramvaiPwaWorkboxModule, TramvaiPwaManifestModule };
|
|
|
5
5
|
export declare const TramvaiPwaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
6
6
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
7
7
|
};
|
|
8
|
+
export declare const TramvaiPwaLightModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
9
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
10
|
+
};
|
|
8
11
|
//# sourceMappingURL=browser.d.ts.map
|
package/lib/browser.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { declareModule } from '@tramvai/core';
|
|
2
|
-
import { TramvaiPwaWorkboxModule } from './workbox/browser.browser.js';
|
|
2
|
+
import { TramvaiPwaWorkboxModule, TramvaiPwaLightWorkboxModule } from './workbox/browser.browser.js';
|
|
3
3
|
export { TramvaiPwaWorkboxModule } from './workbox/browser.browser.js';
|
|
4
|
-
import { TramvaiPwaManifestModule } from './manifest/browser.browser.js';
|
|
4
|
+
import { TramvaiPwaManifestModule, TramvaiPwaLightManifestModule } from './manifest/browser.browser.js';
|
|
5
5
|
export { TramvaiPwaManifestModule } from './manifest/browser.browser.js';
|
|
6
6
|
import { TramvaiPwaMetaModule } from './meta/browser.browser.js';
|
|
7
7
|
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_PARAMS_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN } from './tokens.browser.js';
|
|
@@ -11,5 +11,10 @@ const TramvaiPwaModule = declareModule({
|
|
|
11
11
|
imports: [TramvaiPwaWorkboxModule, TramvaiPwaManifestModule, TramvaiPwaMetaModule],
|
|
12
12
|
providers: [],
|
|
13
13
|
});
|
|
14
|
+
const TramvaiPwaLightModule = /* @__PURE__ */ declareModule({
|
|
15
|
+
name: 'TramvaiPwaLightModule',
|
|
16
|
+
imports: [TramvaiPwaLightWorkboxModule, TramvaiPwaLightManifestModule],
|
|
17
|
+
providers: [],
|
|
18
|
+
});
|
|
14
19
|
|
|
15
|
-
export { TramvaiPwaModule };
|
|
20
|
+
export { TramvaiPwaLightModule, TramvaiPwaModule };
|
|
@@ -4,5 +4,9 @@ const TramvaiPwaManifestModule = declareModule({
|
|
|
4
4
|
name: 'TramvaiPwaManifestModule',
|
|
5
5
|
providers: [],
|
|
6
6
|
});
|
|
7
|
+
const TramvaiPwaLightManifestModule = declareModule({
|
|
8
|
+
name: 'TramvaiPwaLightManifestModule',
|
|
9
|
+
providers: [],
|
|
10
|
+
});
|
|
7
11
|
|
|
8
|
-
export { TramvaiPwaManifestModule };
|
|
12
|
+
export { TramvaiPwaLightManifestModule, TramvaiPwaManifestModule };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare const TramvaiPwaManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
2
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
3
3
|
};
|
|
4
|
+
export declare const TramvaiPwaLightManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
5
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
6
|
+
};
|
|
4
7
|
//# sourceMappingURL=browser.d.ts.map
|
package/lib/manifest/server.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare const TramvaiPwaManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
2
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
3
3
|
};
|
|
4
|
+
export declare const TramvaiPwaLightManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
5
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
6
|
+
};
|
|
4
7
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import { declareModule, provide, Scope
|
|
2
|
-
import { ResourceType, ResourceSlot, RESOURCES_REGISTRY } from '@tramvai/tokens-render';
|
|
1
|
+
import { declareModule, provide, Scope } from '@tramvai/core';
|
|
3
2
|
import { PROXY_CONFIG_TOKEN } from '@tramvai/tokens-server';
|
|
4
3
|
import { appConfig } from '@tramvai/cli/lib/external/config';
|
|
5
4
|
import { PWA_MANIFEST_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../tokens.es.js';
|
|
5
|
+
import { registerWebManifestProvider, validateRelativeUrlProvider } from './shared/providers.es.js';
|
|
6
6
|
|
|
7
|
-
const validateRelativeUrl = (url) => {
|
|
8
|
-
if (!url.startsWith('/')) {
|
|
9
|
-
throw new Error(`Webmanifest url should start from "/", got ${url}`);
|
|
10
|
-
}
|
|
11
|
-
if (!(url.endsWith('.json') || url.endsWith('.webmanifest'))) {
|
|
12
|
-
throw new Error(`Webmanifest url should has .json or .webmanifest extension, got ${url}`);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
7
|
const TramvaiPwaManifestModule = declareModule({
|
|
16
8
|
name: 'TramvaiPwaManifestModule',
|
|
17
9
|
providers: [
|
|
@@ -33,25 +25,6 @@ const TramvaiPwaManifestModule = declareModule({
|
|
|
33
25
|
swScope: PWA_SW_SCOPE_TOKEN,
|
|
34
26
|
},
|
|
35
27
|
}),
|
|
36
|
-
provide({
|
|
37
|
-
provide: commandLineListTokens.customerStart,
|
|
38
|
-
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
39
|
-
// @todo why boolean here?
|
|
40
|
-
if (!process.env.TRAMVAI_PWA_MANIFEST_ENABLED) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
resourcesRegistry.register({
|
|
44
|
-
type: ResourceType.asIs,
|
|
45
|
-
slot: ResourceSlot.HEAD_META,
|
|
46
|
-
// @todo what about crossorigin, maybe optional?
|
|
47
|
-
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
48
|
-
});
|
|
49
|
-
},
|
|
50
|
-
deps: {
|
|
51
|
-
resourcesRegistry: RESOURCES_REGISTRY,
|
|
52
|
-
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
53
|
-
},
|
|
54
|
-
}),
|
|
55
28
|
provide({
|
|
56
29
|
provide: PWA_MANIFEST_URL_TOKEN,
|
|
57
30
|
useFactory: ({ swScope }) => {
|
|
@@ -65,19 +38,25 @@ const TramvaiPwaManifestModule = declareModule({
|
|
|
65
38
|
swScope: PWA_SW_SCOPE_TOKEN,
|
|
66
39
|
},
|
|
67
40
|
}),
|
|
41
|
+
...(process.env.TRAMVAI_PWA_MANIFEST_ENABLED
|
|
42
|
+
? [registerWebManifestProvider, validateRelativeUrlProvider]
|
|
43
|
+
: []),
|
|
44
|
+
],
|
|
45
|
+
});
|
|
46
|
+
const TramvaiPwaLightManifestModule = declareModule({
|
|
47
|
+
name: 'TramvaiPwaLightManifestModule',
|
|
48
|
+
providers: [
|
|
49
|
+
provide({
|
|
50
|
+
provide: PWA_MANIFEST_URL_TOKEN,
|
|
51
|
+
useValue: '/manifest.webmanifest',
|
|
52
|
+
}),
|
|
68
53
|
provide({
|
|
69
|
-
provide:
|
|
70
|
-
|
|
71
|
-
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
validateRelativeUrl(manifestUrl);
|
|
75
|
-
},
|
|
76
|
-
deps: {
|
|
77
|
-
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
78
|
-
},
|
|
54
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
55
|
+
useValue: '/',
|
|
79
56
|
}),
|
|
57
|
+
registerWebManifestProvider,
|
|
58
|
+
validateRelativeUrlProvider,
|
|
80
59
|
],
|
|
81
60
|
});
|
|
82
61
|
|
|
83
|
-
export { TramvaiPwaManifestModule };
|
|
62
|
+
export { TramvaiPwaLightManifestModule, TramvaiPwaManifestModule };
|
package/lib/manifest/server.js
CHANGED
|
@@ -3,19 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var core = require('@tramvai/core');
|
|
6
|
-
var tokensRender = require('@tramvai/tokens-render');
|
|
7
6
|
var tokensServer = require('@tramvai/tokens-server');
|
|
8
7
|
var config = require('@tramvai/cli/lib/external/config');
|
|
9
8
|
var tokens = require('../tokens.js');
|
|
9
|
+
var providers = require('./shared/providers.js');
|
|
10
10
|
|
|
11
|
-
const validateRelativeUrl = (url) => {
|
|
12
|
-
if (!url.startsWith('/')) {
|
|
13
|
-
throw new Error(`Webmanifest url should start from "/", got ${url}`);
|
|
14
|
-
}
|
|
15
|
-
if (!(url.endsWith('.json') || url.endsWith('.webmanifest'))) {
|
|
16
|
-
throw new Error(`Webmanifest url should has .json or .webmanifest extension, got ${url}`);
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
11
|
const TramvaiPwaManifestModule = core.declareModule({
|
|
20
12
|
name: 'TramvaiPwaManifestModule',
|
|
21
13
|
providers: [
|
|
@@ -37,25 +29,6 @@ const TramvaiPwaManifestModule = core.declareModule({
|
|
|
37
29
|
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
38
30
|
},
|
|
39
31
|
}),
|
|
40
|
-
core.provide({
|
|
41
|
-
provide: core.commandLineListTokens.customerStart,
|
|
42
|
-
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
43
|
-
// @todo why boolean here?
|
|
44
|
-
if (!process.env.TRAMVAI_PWA_MANIFEST_ENABLED) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
resourcesRegistry.register({
|
|
48
|
-
type: tokensRender.ResourceType.asIs,
|
|
49
|
-
slot: tokensRender.ResourceSlot.HEAD_META,
|
|
50
|
-
// @todo what about crossorigin, maybe optional?
|
|
51
|
-
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
52
|
-
});
|
|
53
|
-
},
|
|
54
|
-
deps: {
|
|
55
|
-
resourcesRegistry: tokensRender.RESOURCES_REGISTRY,
|
|
56
|
-
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
57
|
-
},
|
|
58
|
-
}),
|
|
59
32
|
core.provide({
|
|
60
33
|
provide: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
61
34
|
useFactory: ({ swScope }) => {
|
|
@@ -69,19 +42,26 @@ const TramvaiPwaManifestModule = core.declareModule({
|
|
|
69
42
|
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
70
43
|
},
|
|
71
44
|
}),
|
|
45
|
+
...(process.env.TRAMVAI_PWA_MANIFEST_ENABLED
|
|
46
|
+
? [providers.registerWebManifestProvider, providers.validateRelativeUrlProvider]
|
|
47
|
+
: []),
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
const TramvaiPwaLightManifestModule = core.declareModule({
|
|
51
|
+
name: 'TramvaiPwaLightManifestModule',
|
|
52
|
+
providers: [
|
|
53
|
+
core.provide({
|
|
54
|
+
provide: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
55
|
+
useValue: '/manifest.webmanifest',
|
|
56
|
+
}),
|
|
72
57
|
core.provide({
|
|
73
|
-
provide:
|
|
74
|
-
|
|
75
|
-
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
validateRelativeUrl(manifestUrl);
|
|
79
|
-
},
|
|
80
|
-
deps: {
|
|
81
|
-
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
82
|
-
},
|
|
58
|
+
provide: tokens.PWA_SW_SCOPE_TOKEN,
|
|
59
|
+
useValue: '/',
|
|
83
60
|
}),
|
|
61
|
+
providers.registerWebManifestProvider,
|
|
62
|
+
providers.validateRelativeUrlProvider,
|
|
84
63
|
],
|
|
85
64
|
});
|
|
86
65
|
|
|
66
|
+
exports.TramvaiPwaLightManifestModule = TramvaiPwaLightManifestModule;
|
|
87
67
|
exports.TramvaiPwaManifestModule = TramvaiPwaManifestModule;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const validateRelativeUrlProvider: import("@tramvai/core").Provider<{
|
|
2
|
+
manifestUrl: string & {
|
|
3
|
+
__type?: "base token" | undefined;
|
|
4
|
+
};
|
|
5
|
+
}, import("@tramvai/core").Command & {
|
|
6
|
+
__type?: "multi token" | undefined;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const registerWebManifestProvider: import("@tramvai/core").Provider<{
|
|
9
|
+
resourcesRegistry: import("@tramvai/tokens-render").ResourcesRegistry & {
|
|
10
|
+
__type?: "base token" | undefined;
|
|
11
|
+
};
|
|
12
|
+
manifestUrl: string & {
|
|
13
|
+
__type?: "base token" | undefined;
|
|
14
|
+
};
|
|
15
|
+
}, import("@tramvai/core").Command & {
|
|
16
|
+
__type?: "multi token" | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { provide, commandLineListTokens } from '@tramvai/core';
|
|
2
|
+
import { ResourceType, ResourceSlot, RESOURCES_REGISTRY } from '@tramvai/tokens-render';
|
|
3
|
+
import { PWA_MANIFEST_URL_TOKEN } from '../../tokens.es.js';
|
|
4
|
+
|
|
5
|
+
const validateRelativeUrl = (url) => {
|
|
6
|
+
if (!url.startsWith('/')) {
|
|
7
|
+
throw new Error(`Webmanifest url should start from "/", got ${url}`);
|
|
8
|
+
}
|
|
9
|
+
if (!(url.endsWith('.json') || url.endsWith('.webmanifest'))) {
|
|
10
|
+
throw new Error(`Webmanifest url should has .json or .webmanifest extension, got ${url}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const validateRelativeUrlProvider = provide({
|
|
14
|
+
provide: commandLineListTokens.init,
|
|
15
|
+
useFactory: ({ manifestUrl }) => function validateSwUrlAndScope() {
|
|
16
|
+
validateRelativeUrl(manifestUrl);
|
|
17
|
+
},
|
|
18
|
+
deps: {
|
|
19
|
+
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
const registerWebManifestProvider = provide({
|
|
23
|
+
provide: commandLineListTokens.customerStart,
|
|
24
|
+
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
25
|
+
resourcesRegistry.register({
|
|
26
|
+
type: ResourceType.asIs,
|
|
27
|
+
slot: ResourceSlot.HEAD_META,
|
|
28
|
+
// @todo what about crossorigin, maybe optional?
|
|
29
|
+
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
deps: {
|
|
33
|
+
resourcesRegistry: RESOURCES_REGISTRY,
|
|
34
|
+
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export { registerWebManifestProvider, validateRelativeUrlProvider };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tramvai/core');
|
|
6
|
+
var tokensRender = require('@tramvai/tokens-render');
|
|
7
|
+
var tokens = require('../../tokens.js');
|
|
8
|
+
|
|
9
|
+
const validateRelativeUrl = (url) => {
|
|
10
|
+
if (!url.startsWith('/')) {
|
|
11
|
+
throw new Error(`Webmanifest url should start from "/", got ${url}`);
|
|
12
|
+
}
|
|
13
|
+
if (!(url.endsWith('.json') || url.endsWith('.webmanifest'))) {
|
|
14
|
+
throw new Error(`Webmanifest url should has .json or .webmanifest extension, got ${url}`);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const validateRelativeUrlProvider = core.provide({
|
|
18
|
+
provide: core.commandLineListTokens.init,
|
|
19
|
+
useFactory: ({ manifestUrl }) => function validateSwUrlAndScope() {
|
|
20
|
+
validateRelativeUrl(manifestUrl);
|
|
21
|
+
},
|
|
22
|
+
deps: {
|
|
23
|
+
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const registerWebManifestProvider = core.provide({
|
|
27
|
+
provide: core.commandLineListTokens.customerStart,
|
|
28
|
+
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
29
|
+
resourcesRegistry.register({
|
|
30
|
+
type: tokensRender.ResourceType.asIs,
|
|
31
|
+
slot: tokensRender.ResourceSlot.HEAD_META,
|
|
32
|
+
// @todo what about crossorigin, maybe optional?
|
|
33
|
+
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
deps: {
|
|
37
|
+
resourcesRegistry: tokensRender.RESOURCES_REGISTRY,
|
|
38
|
+
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
exports.registerWebManifestProvider = registerWebManifestProvider;
|
|
43
|
+
exports.validateRelativeUrlProvider = validateRelativeUrlProvider;
|
package/lib/server.d.ts
CHANGED
|
@@ -5,4 +5,7 @@ export { TramvaiPwaWorkboxModule, TramvaiPwaManifestModule };
|
|
|
5
5
|
export declare const TramvaiPwaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
6
6
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
7
7
|
};
|
|
8
|
+
export declare const TramvaiPwaLightModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
9
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
10
|
+
};
|
|
8
11
|
//# sourceMappingURL=server.d.ts.map
|
package/lib/server.es.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { declareModule } from '@tramvai/core';
|
|
2
|
-
import { TramvaiPwaWorkboxModule } from './workbox/server.es.js';
|
|
2
|
+
import { TramvaiPwaWorkboxModule, TramvaiPwaLightWorkboxModule } from './workbox/server.es.js';
|
|
3
3
|
export { TramvaiPwaWorkboxModule } from './workbox/server.es.js';
|
|
4
|
-
import { TramvaiPwaManifestModule } from './manifest/server.es.js';
|
|
4
|
+
import { TramvaiPwaManifestModule, TramvaiPwaLightManifestModule } from './manifest/server.es.js';
|
|
5
5
|
export { TramvaiPwaManifestModule } from './manifest/server.es.js';
|
|
6
6
|
import { TramvaiPwaMetaModule } from './meta/server.es.js';
|
|
7
7
|
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_PARAMS_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN } from './tokens.es.js';
|
|
@@ -11,5 +11,10 @@ const TramvaiPwaModule = declareModule({
|
|
|
11
11
|
imports: [TramvaiPwaWorkboxModule, TramvaiPwaManifestModule, TramvaiPwaMetaModule],
|
|
12
12
|
providers: [],
|
|
13
13
|
});
|
|
14
|
+
const TramvaiPwaLightModule = /* @__PURE__ */ declareModule({
|
|
15
|
+
name: 'TramvaiPwaLightModule',
|
|
16
|
+
imports: [TramvaiPwaLightWorkboxModule, TramvaiPwaLightManifestModule],
|
|
17
|
+
providers: [],
|
|
18
|
+
});
|
|
14
19
|
|
|
15
|
-
export { TramvaiPwaModule };
|
|
20
|
+
export { TramvaiPwaLightModule, TramvaiPwaModule };
|
package/lib/server.js
CHANGED
|
@@ -13,6 +13,11 @@ const TramvaiPwaModule = core.declareModule({
|
|
|
13
13
|
imports: [server.TramvaiPwaWorkboxModule, server$1.TramvaiPwaManifestModule, server$2.TramvaiPwaMetaModule],
|
|
14
14
|
providers: [],
|
|
15
15
|
});
|
|
16
|
+
const TramvaiPwaLightModule = /* @__PURE__ */ core.declareModule({
|
|
17
|
+
name: 'TramvaiPwaLightModule',
|
|
18
|
+
imports: [server.TramvaiPwaLightWorkboxModule, server$1.TramvaiPwaLightManifestModule],
|
|
19
|
+
providers: [],
|
|
20
|
+
});
|
|
16
21
|
|
|
17
22
|
exports.TramvaiPwaWorkboxModule = server.TramvaiPwaWorkboxModule;
|
|
18
23
|
exports.TramvaiPwaManifestModule = server$1.TramvaiPwaManifestModule;
|
|
@@ -22,4 +27,5 @@ exports.PWA_SW_PARAMS_TOKEN = tokens.PWA_SW_PARAMS_TOKEN;
|
|
|
22
27
|
exports.PWA_SW_SCOPE_TOKEN = tokens.PWA_SW_SCOPE_TOKEN;
|
|
23
28
|
exports.PWA_SW_URL_TOKEN = tokens.PWA_SW_URL_TOKEN;
|
|
24
29
|
exports.PWA_WORKBOX_TOKEN = tokens.PWA_WORKBOX_TOKEN;
|
|
30
|
+
exports.TramvaiPwaLightModule = TramvaiPwaLightModule;
|
|
25
31
|
exports.TramvaiPwaModule = TramvaiPwaModule;
|
|
@@ -1,102 +1,55 @@
|
|
|
1
|
-
import { declareModule, provide,
|
|
1
|
+
import { declareModule, provide, optional } from '@tramvai/core';
|
|
2
2
|
import { MODERN_SATISFIES_TOKEN } from '@tramvai/tokens-render';
|
|
3
|
-
import { ENV_MANAGER_TOKEN
|
|
4
|
-
import {
|
|
5
|
-
import { providers } from './shared.browser.js';
|
|
3
|
+
import { ENV_MANAGER_TOKEN } from '@tramvai/tokens-common';
|
|
4
|
+
import { PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_PARAMS_TOKEN } from '../tokens.browser.js';
|
|
5
|
+
import { providers, sharedPwaLightModuleProviders } from './shared/providers/swProviders.browser.js';
|
|
6
|
+
import { pwaWorkboxTokenProvider, workboxRegisterProvider } from './shared/providers/workboxProviders.browser.js';
|
|
7
|
+
import { normalizeSwUrl } from './shared/utils/normalizeSwUrl.browser.js';
|
|
6
8
|
|
|
7
9
|
const TramvaiPwaWorkboxModule = declareModule({
|
|
8
10
|
name: 'TramvaiPwaWorkboxModule',
|
|
9
11
|
providers: [
|
|
10
12
|
...providers,
|
|
11
13
|
provide({
|
|
12
|
-
provide:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
provide: PWA_SW_URL_TOKEN,
|
|
15
|
+
useFactory: ({ swScope, modern, envManager, swParams }) => {
|
|
16
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
17
|
+
const swUrl = normalizeSwUrl(swDest, swScope);
|
|
18
|
+
const hasModernBuild = !!process.env.TRAMVAI_MODERN_BUILD;
|
|
19
|
+
const isCsrMode = envManager.get('TRAMVAI_FORCE_CLIENT_SIDE_RENDERING') === 'true';
|
|
20
|
+
// tramvai modern build is not supported for CSR and not compatible with PWA module in CSR mode
|
|
21
|
+
const addModernPrefix = modern && hasModernBuild && !isCsrMode;
|
|
22
|
+
let finalSwUrl = swUrl;
|
|
23
|
+
if (addModernPrefix) {
|
|
24
|
+
finalSwUrl = finalSwUrl.replace(/\.js$/, '.modern.js');
|
|
25
|
+
}
|
|
26
|
+
if (swParams && swParams.length) {
|
|
27
|
+
const params = swParams
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.reduce((acc, p) => {
|
|
30
|
+
return acc.concat(Object.keys(p).map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(p[k])}`));
|
|
31
|
+
}, [])
|
|
32
|
+
.join('&');
|
|
33
|
+
if (params) {
|
|
34
|
+
finalSwUrl += `?${params}`;
|
|
21
35
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
const { Workbox } = await import(
|
|
26
|
-
/* webpackChunkName: "tramvai-workbox-window" */ 'workbox-window/Workbox');
|
|
27
|
-
const hasModernBuild = !!process.env.TRAMVAI_MODERN_BUILD;
|
|
28
|
-
const isCsrMode = envManager.get('TRAMVAI_FORCE_CLIENT_SIDE_RENDERING') === 'true';
|
|
29
|
-
// tramvai modern build is not supported for CSR and not compatible with PWA module in CSR mode
|
|
30
|
-
let finalSwUrl = modern && hasModernBuild && !isCsrMode ? swUrl.replace(/\.js$/, '.modern.js') : swUrl;
|
|
31
|
-
if (swParams && swParams.length) {
|
|
32
|
-
const params = swParams
|
|
33
|
-
.filter(Boolean)
|
|
34
|
-
.reduce((acc, p) => {
|
|
35
|
-
return acc.concat(Object.keys(p).map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(p[k])}`));
|
|
36
|
-
}, [])
|
|
37
|
-
.join('&');
|
|
38
|
-
if (params) {
|
|
39
|
-
finalSwUrl += `?${params}`;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
workbox = new Workbox(finalSwUrl, {
|
|
43
|
-
scope: swScope,
|
|
44
|
-
});
|
|
45
|
-
workbox.addEventListener('installed', (event) => {
|
|
46
|
-
if (event.isUpdate) ;
|
|
47
|
-
});
|
|
48
|
-
return workbox;
|
|
49
|
-
};
|
|
36
|
+
}
|
|
37
|
+
return finalSwUrl;
|
|
50
38
|
},
|
|
51
39
|
deps: {
|
|
52
|
-
swUrl: PWA_SW_URL_TOKEN,
|
|
53
40
|
swScope: PWA_SW_SCOPE_TOKEN,
|
|
54
41
|
modern: MODERN_SATISFIES_TOKEN,
|
|
55
|
-
swParams: optional(PWA_SW_PARAMS_TOKEN),
|
|
56
42
|
envManager: ENV_MANAGER_TOKEN,
|
|
57
|
-
|
|
58
|
-
},
|
|
59
|
-
}),
|
|
60
|
-
provide({
|
|
61
|
-
provide: commandLineListTokens.init,
|
|
62
|
-
useFactory: ({ workbox, logger }) => {
|
|
63
|
-
const log = logger('pwa:workbox');
|
|
64
|
-
return function registerWorkbox() {
|
|
65
|
-
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
// load workbox-window early but in non-blocking way
|
|
69
|
-
(async () => {
|
|
70
|
-
try {
|
|
71
|
-
const wb = await workbox();
|
|
72
|
-
if (!wb) {
|
|
73
|
-
log.info('Service Worker registration stopped');
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
// @todo unregister when Workbox is disabled in config !!!
|
|
77
|
-
// https://github.com/nuxt-community/pwa-module/blob/main/templates/workbox/workbox.unregister.js
|
|
78
|
-
await wb.register();
|
|
79
|
-
// @todo support force update strategies?
|
|
80
|
-
if (process.env.NODE_ENV === 'development') {
|
|
81
|
-
await wb.update();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch (error) {
|
|
85
|
-
log.error({
|
|
86
|
-
event: 'register-failed',
|
|
87
|
-
message: 'Service Worker registration failed',
|
|
88
|
-
error,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
})();
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
deps: {
|
|
95
|
-
workbox: PWA_WORKBOX_TOKEN,
|
|
96
|
-
logger: LOGGER_TOKEN,
|
|
43
|
+
swParams: optional(PWA_SW_PARAMS_TOKEN),
|
|
97
44
|
},
|
|
98
45
|
}),
|
|
46
|
+
pwaWorkboxTokenProvider,
|
|
47
|
+
...(process.env.TRAMVAI_PWA_WORKBOX_ENABLED ? [workboxRegisterProvider] : []),
|
|
99
48
|
],
|
|
100
49
|
});
|
|
50
|
+
const TramvaiPwaLightWorkboxModule = declareModule({
|
|
51
|
+
name: 'TramvaiPwaLightWorkboxModule',
|
|
52
|
+
providers: [...sharedPwaLightModuleProviders, pwaWorkboxTokenProvider, workboxRegisterProvider],
|
|
53
|
+
});
|
|
101
54
|
|
|
102
|
-
export { TramvaiPwaWorkboxModule };
|
|
55
|
+
export { TramvaiPwaLightWorkboxModule, TramvaiPwaWorkboxModule };
|
package/lib/workbox/browser.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare const TramvaiPwaWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
2
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
3
3
|
};
|
|
4
|
+
export declare const TramvaiPwaLightWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
5
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
6
|
+
};
|
|
4
7
|
//# sourceMappingURL=browser.d.ts.map
|
package/lib/workbox/server.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare const TramvaiPwaWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
2
|
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
3
3
|
};
|
|
4
|
+
export declare const TramvaiPwaLightWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
5
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType;
|
|
6
|
+
};
|
|
4
7
|
//# sourceMappingURL=server.d.ts.map
|
package/lib/workbox/server.es.js
CHANGED
|
@@ -1,29 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { provide, commandLineListTokens, declareModule, Scope } from '@tramvai/core';
|
|
2
2
|
import { PROXY_CONFIG_TOKEN } from '@tramvai/tokens-server';
|
|
3
3
|
import { appConfig } from '@tramvai/cli/lib/external/config';
|
|
4
4
|
import { PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../tokens.es.js';
|
|
5
|
-
import { providers } from './shared.es.js';
|
|
5
|
+
import { providers, sharedPwaLightModuleProviders } from './shared/providers/swProviders.es.js';
|
|
6
|
+
import { normalizeSwUrl } from './shared/utils/normalizeSwUrl.es.js';
|
|
7
|
+
import { validateSwScope, validateRelativeUrl } from './shared/utils/validateUrl.es.js';
|
|
6
8
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
};
|
|
9
|
+
const validateSwUrlAndScopeProvider = provide({
|
|
10
|
+
provide: commandLineListTokens.init,
|
|
11
|
+
useFactory: ({ swUrl, swScope }) => function validateSwUrlAndScope() {
|
|
12
|
+
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
validateSwScope(swScope);
|
|
16
|
+
validateRelativeUrl(swUrl);
|
|
17
|
+
},
|
|
18
|
+
deps: {
|
|
19
|
+
swUrl: PWA_SW_URL_TOKEN,
|
|
20
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
23
|
const TramvaiPwaWorkboxModule = declareModule({
|
|
24
24
|
name: 'TramvaiPwaWorkboxModule',
|
|
25
25
|
providers: [
|
|
26
26
|
...providers,
|
|
27
|
+
provide({
|
|
28
|
+
provide: PWA_SW_URL_TOKEN,
|
|
29
|
+
useFactory: ({ swScope }) => {
|
|
30
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
31
|
+
return normalizeSwUrl(swDest, swScope);
|
|
32
|
+
},
|
|
33
|
+
deps: {
|
|
34
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
27
37
|
provide({
|
|
28
38
|
provide: PROXY_CONFIG_TOKEN,
|
|
29
39
|
scope: Scope.SINGLETON,
|
|
@@ -42,21 +52,12 @@ const TramvaiPwaWorkboxModule = declareModule({
|
|
|
42
52
|
swScope: PWA_SW_SCOPE_TOKEN,
|
|
43
53
|
},
|
|
44
54
|
}),
|
|
45
|
-
|
|
46
|
-
provide: commandLineListTokens.init,
|
|
47
|
-
useFactory: ({ swUrl, swScope }) => function validateSwUrlAndScope() {
|
|
48
|
-
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
validateSwScope(swScope);
|
|
52
|
-
validateRelativeUrl(swUrl);
|
|
53
|
-
},
|
|
54
|
-
deps: {
|
|
55
|
-
swUrl: PWA_SW_URL_TOKEN,
|
|
56
|
-
swScope: PWA_SW_SCOPE_TOKEN,
|
|
57
|
-
},
|
|
58
|
-
}),
|
|
55
|
+
validateSwUrlAndScopeProvider,
|
|
59
56
|
],
|
|
60
57
|
});
|
|
58
|
+
const TramvaiPwaLightWorkboxModule = declareModule({
|
|
59
|
+
name: 'TramvaiPwaLightWorkboxModule',
|
|
60
|
+
providers: [...sharedPwaLightModuleProviders, validateSwUrlAndScopeProvider],
|
|
61
|
+
});
|
|
61
62
|
|
|
62
|
-
export { TramvaiPwaWorkboxModule };
|
|
63
|
+
export { TramvaiPwaLightWorkboxModule, TramvaiPwaWorkboxModule };
|
package/lib/workbox/server.js
CHANGED
|
@@ -6,28 +6,38 @@ var core = require('@tramvai/core');
|
|
|
6
6
|
var tokensServer = require('@tramvai/tokens-server');
|
|
7
7
|
var config = require('@tramvai/cli/lib/external/config');
|
|
8
8
|
var tokens = require('../tokens.js');
|
|
9
|
-
var
|
|
9
|
+
var swProviders = require('./shared/providers/swProviders.js');
|
|
10
|
+
var normalizeSwUrl = require('./shared/utils/normalizeSwUrl.js');
|
|
11
|
+
var validateUrl = require('./shared/utils/validateUrl.js');
|
|
10
12
|
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
};
|
|
13
|
+
const validateSwUrlAndScopeProvider = core.provide({
|
|
14
|
+
provide: core.commandLineListTokens.init,
|
|
15
|
+
useFactory: ({ swUrl, swScope }) => function validateSwUrlAndScope() {
|
|
16
|
+
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
validateUrl.validateSwScope(swScope);
|
|
20
|
+
validateUrl.validateRelativeUrl(swUrl);
|
|
21
|
+
},
|
|
22
|
+
deps: {
|
|
23
|
+
swUrl: tokens.PWA_SW_URL_TOKEN,
|
|
24
|
+
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
27
|
const TramvaiPwaWorkboxModule = core.declareModule({
|
|
28
28
|
name: 'TramvaiPwaWorkboxModule',
|
|
29
29
|
providers: [
|
|
30
|
-
...
|
|
30
|
+
...swProviders.providers,
|
|
31
|
+
core.provide({
|
|
32
|
+
provide: tokens.PWA_SW_URL_TOKEN,
|
|
33
|
+
useFactory: ({ swScope }) => {
|
|
34
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
35
|
+
return normalizeSwUrl.normalizeSwUrl(swDest, swScope);
|
|
36
|
+
},
|
|
37
|
+
deps: {
|
|
38
|
+
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
31
41
|
core.provide({
|
|
32
42
|
provide: tokensServer.PROXY_CONFIG_TOKEN,
|
|
33
43
|
scope: core.Scope.SINGLETON,
|
|
@@ -46,21 +56,13 @@ const TramvaiPwaWorkboxModule = core.declareModule({
|
|
|
46
56
|
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
47
57
|
},
|
|
48
58
|
}),
|
|
49
|
-
|
|
50
|
-
provide: core.commandLineListTokens.init,
|
|
51
|
-
useFactory: ({ swUrl, swScope }) => function validateSwUrlAndScope() {
|
|
52
|
-
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
validateSwScope(swScope);
|
|
56
|
-
validateRelativeUrl(swUrl);
|
|
57
|
-
},
|
|
58
|
-
deps: {
|
|
59
|
-
swUrl: tokens.PWA_SW_URL_TOKEN,
|
|
60
|
-
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
61
|
-
},
|
|
62
|
-
}),
|
|
59
|
+
validateSwUrlAndScopeProvider,
|
|
63
60
|
],
|
|
64
61
|
});
|
|
62
|
+
const TramvaiPwaLightWorkboxModule = core.declareModule({
|
|
63
|
+
name: 'TramvaiPwaLightWorkboxModule',
|
|
64
|
+
providers: [...swProviders.sharedPwaLightModuleProviders, validateSwUrlAndScopeProvider],
|
|
65
|
+
});
|
|
65
66
|
|
|
67
|
+
exports.TramvaiPwaLightWorkboxModule = TramvaiPwaLightWorkboxModule;
|
|
66
68
|
exports.TramvaiPwaWorkboxModule = TramvaiPwaWorkboxModule;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { provide } from '@tramvai/core';
|
|
2
|
+
import { PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN } from '../../../tokens.browser.js';
|
|
3
|
+
|
|
4
|
+
const providers = [
|
|
5
|
+
provide({
|
|
6
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
7
|
+
useFactory: () => {
|
|
8
|
+
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
9
|
+
return swScope;
|
|
10
|
+
},
|
|
11
|
+
}),
|
|
12
|
+
];
|
|
13
|
+
const sharedPwaLightModuleProviders = [
|
|
14
|
+
provide({
|
|
15
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
16
|
+
useValue: '/',
|
|
17
|
+
}),
|
|
18
|
+
provide({
|
|
19
|
+
provide: PWA_SW_URL_TOKEN,
|
|
20
|
+
useValue: '/sw.js',
|
|
21
|
+
deps: {
|
|
22
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
export { providers, sharedPwaLightModuleProviders };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const providers: import("@tramvai/core").Provider<unknown, string & {
|
|
2
|
+
__type?: "base token" | undefined;
|
|
3
|
+
}>[];
|
|
4
|
+
export declare const sharedPwaLightModuleProviders: import("@tramvai/core").Provider<unknown, string & {
|
|
5
|
+
__type?: "base token" | undefined;
|
|
6
|
+
}>[];
|
|
7
|
+
//# sourceMappingURL=swProviders.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { provide } from '@tramvai/core';
|
|
2
|
+
import { PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN } from '../../../tokens.es.js';
|
|
3
|
+
|
|
4
|
+
const providers = [
|
|
5
|
+
provide({
|
|
6
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
7
|
+
useFactory: () => {
|
|
8
|
+
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
9
|
+
return swScope;
|
|
10
|
+
},
|
|
11
|
+
}),
|
|
12
|
+
];
|
|
13
|
+
const sharedPwaLightModuleProviders = [
|
|
14
|
+
provide({
|
|
15
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
16
|
+
useValue: '/',
|
|
17
|
+
}),
|
|
18
|
+
provide({
|
|
19
|
+
provide: PWA_SW_URL_TOKEN,
|
|
20
|
+
useValue: '/sw.js',
|
|
21
|
+
deps: {
|
|
22
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
export { providers, sharedPwaLightModuleProviders };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var core = require('@tramvai/core');
|
|
6
|
-
var tokens = require('
|
|
6
|
+
var tokens = require('../../../tokens.js');
|
|
7
7
|
|
|
8
8
|
const providers = [
|
|
9
9
|
core.provide({
|
|
@@ -13,15 +13,15 @@ const providers = [
|
|
|
13
13
|
return swScope;
|
|
14
14
|
},
|
|
15
15
|
}),
|
|
16
|
+
];
|
|
17
|
+
const sharedPwaLightModuleProviders = [
|
|
18
|
+
core.provide({
|
|
19
|
+
provide: tokens.PWA_SW_SCOPE_TOKEN,
|
|
20
|
+
useValue: '/',
|
|
21
|
+
}),
|
|
16
22
|
core.provide({
|
|
17
23
|
provide: tokens.PWA_SW_URL_TOKEN,
|
|
18
|
-
|
|
19
|
-
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
20
|
-
const normalizedUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
21
|
-
const normalizedScope = swScope.replace(/\/$/, '');
|
|
22
|
-
const finalUrl = `${normalizedScope}${normalizedUrl}`;
|
|
23
|
-
return finalUrl;
|
|
24
|
-
},
|
|
24
|
+
useValue: '/sw.js',
|
|
25
25
|
deps: {
|
|
26
26
|
swScope: tokens.PWA_SW_SCOPE_TOKEN,
|
|
27
27
|
},
|
|
@@ -29,3 +29,4 @@ const providers = [
|
|
|
29
29
|
];
|
|
30
30
|
|
|
31
31
|
exports.providers = providers;
|
|
32
|
+
exports.sharedPwaLightModuleProviders = sharedPwaLightModuleProviders;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { provide, commandLineListTokens, Scope } from '@tramvai/core';
|
|
2
|
+
import { LOGGER_TOKEN } from '@tramvai/tokens-common';
|
|
3
|
+
import { PWA_WORKBOX_TOKEN, PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../../../tokens.browser.js';
|
|
4
|
+
|
|
5
|
+
const workboxRegisterProvider = provide({
|
|
6
|
+
provide: commandLineListTokens.init,
|
|
7
|
+
useFactory: ({ workbox, logger }) => {
|
|
8
|
+
const log = logger('pwa:workbox');
|
|
9
|
+
return function registerWorkbox() {
|
|
10
|
+
// load workbox-window early but in non-blocking way
|
|
11
|
+
(async () => {
|
|
12
|
+
try {
|
|
13
|
+
const wb = await workbox();
|
|
14
|
+
if (!wb) {
|
|
15
|
+
log.info('Service Worker registration stopped');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// @todo unregister when Workbox is disabled in config !!!
|
|
19
|
+
// https://github.com/nuxt-community/pwa-module/blob/main/templates/workbox/workbox.unregister.js
|
|
20
|
+
await wb.register();
|
|
21
|
+
// @todo support force update strategies?
|
|
22
|
+
if (process.env.NODE_ENV === 'development') {
|
|
23
|
+
await wb.update();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
log.error({
|
|
28
|
+
event: 'register-failed',
|
|
29
|
+
message: 'Service Worker registration failed',
|
|
30
|
+
error,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
})();
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
deps: {
|
|
37
|
+
workbox: PWA_WORKBOX_TOKEN,
|
|
38
|
+
logger: LOGGER_TOKEN,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const pwaWorkboxTokenProvider = provide({
|
|
42
|
+
provide: PWA_WORKBOX_TOKEN,
|
|
43
|
+
scope: Scope.SINGLETON,
|
|
44
|
+
useFactory: ({ swUrl, swScope, logger }) => {
|
|
45
|
+
const log = logger('pwa:workbox');
|
|
46
|
+
let workbox = null;
|
|
47
|
+
return async () => {
|
|
48
|
+
if (!('serviceWorker' in navigator)) {
|
|
49
|
+
log.info('Service Worker is not supported');
|
|
50
|
+
return workbox;
|
|
51
|
+
}
|
|
52
|
+
if (workbox) {
|
|
53
|
+
return workbox;
|
|
54
|
+
}
|
|
55
|
+
const { Workbox } = await import(
|
|
56
|
+
/* webpackChunkName: "tramvai-workbox-window" */ 'workbox-window/Workbox');
|
|
57
|
+
workbox = new Workbox(swUrl, {
|
|
58
|
+
scope: swScope,
|
|
59
|
+
});
|
|
60
|
+
workbox.addEventListener('installed', (event) => {
|
|
61
|
+
if (event.isUpdate) ;
|
|
62
|
+
});
|
|
63
|
+
return workbox;
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
deps: {
|
|
67
|
+
swUrl: PWA_SW_URL_TOKEN,
|
|
68
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
69
|
+
logger: LOGGER_TOKEN,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export { pwaWorkboxTokenProvider, workboxRegisterProvider };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Workbox } from 'workbox-window';
|
|
2
|
+
export declare const workboxRegisterProvider: import("@tramvai/core").Provider<{
|
|
3
|
+
workbox: (() => Promise<Workbox | null>) & {
|
|
4
|
+
__type?: "base token" | undefined;
|
|
5
|
+
};
|
|
6
|
+
logger: import("@tramvai/tokens-common").Logger & ((configOrName: string | {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
name: string;
|
|
9
|
+
}) => import("@tramvai/tokens-common").Logger) & {
|
|
10
|
+
__type?: "base token" | undefined;
|
|
11
|
+
};
|
|
12
|
+
}, import("@tramvai/core").Command & {
|
|
13
|
+
__type?: "multi token" | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const pwaWorkboxTokenProvider: import("@tramvai/core").Provider<{
|
|
16
|
+
swUrl: string & {
|
|
17
|
+
__type?: "base token" | undefined;
|
|
18
|
+
};
|
|
19
|
+
swScope: string & {
|
|
20
|
+
__type?: "base token" | undefined;
|
|
21
|
+
};
|
|
22
|
+
logger: import("@tramvai/tokens-common").Logger & ((configOrName: string | {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
name: string;
|
|
25
|
+
}) => import("@tramvai/tokens-common").Logger) & {
|
|
26
|
+
__type?: "base token" | undefined;
|
|
27
|
+
};
|
|
28
|
+
}, (() => Promise<Workbox | null>) & {
|
|
29
|
+
__type?: "base token" | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
//# sourceMappingURL=workboxProviders.d.ts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const normalizeSwUrl = (url, scope) => {
|
|
6
|
+
const normalizedUrl = url.startsWith('/') ? url : `/${url}`;
|
|
7
|
+
const normalizedScope = scope.replace(/\/$/, '');
|
|
8
|
+
const result = `${normalizedScope}${normalizedUrl}`;
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
exports.normalizeSwUrl = normalizeSwUrl;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const validateSwScope = (scope) => {
|
|
2
|
+
if (!scope.startsWith('/')) {
|
|
3
|
+
throw new Error(`Service Worker scope should start from "/", got ${scope}`);
|
|
4
|
+
}
|
|
5
|
+
if (!scope.endsWith('/')) {
|
|
6
|
+
throw new Error(`Service Worker scope should ends with slash, got ${scope}`);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
const validateRelativeUrl = (url) => {
|
|
10
|
+
if (!url.startsWith('/')) {
|
|
11
|
+
throw new Error(`Service Worker url should start from "/", got ${url}`);
|
|
12
|
+
}
|
|
13
|
+
if (!url.endsWith('.js')) {
|
|
14
|
+
throw new Error(`Service Worker url should has .js extension, got ${url}`);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { validateRelativeUrl, validateSwScope };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const validateSwScope = (scope) => {
|
|
6
|
+
if (!scope.startsWith('/')) {
|
|
7
|
+
throw new Error(`Service Worker scope should start from "/", got ${scope}`);
|
|
8
|
+
}
|
|
9
|
+
if (!scope.endsWith('/')) {
|
|
10
|
+
throw new Error(`Service Worker scope should ends with slash, got ${scope}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const validateRelativeUrl = (url) => {
|
|
14
|
+
if (!url.startsWith('/')) {
|
|
15
|
+
throw new Error(`Service Worker url should start from "/", got ${url}`);
|
|
16
|
+
}
|
|
17
|
+
if (!url.endsWith('.js')) {
|
|
18
|
+
throw new Error(`Service Worker url should has .js extension, got ${url}`);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.validateRelativeUrl = validateRelativeUrl;
|
|
23
|
+
exports.validateSwScope = validateSwScope;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-progressive-web-app",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.14.1",
|
|
4
4
|
"description": "Pwa integration - SW, manifest, icons and meta",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
"registry": "https://registry.npmjs.org/"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@tramvai/tokens-common": "3.
|
|
27
|
-
"@tramvai/tokens-render": "3.
|
|
28
|
-
"@tramvai/tokens-server": "3.
|
|
26
|
+
"@tramvai/tokens-common": "3.14.1",
|
|
27
|
+
"@tramvai/tokens-render": "3.14.1",
|
|
28
|
+
"@tramvai/tokens-server": "3.14.1",
|
|
29
29
|
"workbox-window": "^6.6.1"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@tramvai/cli": "3.
|
|
34
|
-
"@tramvai/core": "3.
|
|
33
|
+
"@tramvai/cli": "3.14.1",
|
|
34
|
+
"@tramvai/core": "3.14.1",
|
|
35
35
|
"@tinkoff/dippy": "0.9.1",
|
|
36
36
|
"tslib": "^2.4.0"
|
|
37
37
|
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { provide } from '@tramvai/core';
|
|
2
|
-
import { PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN } from '../tokens.browser.js';
|
|
3
|
-
|
|
4
|
-
const providers = [
|
|
5
|
-
provide({
|
|
6
|
-
provide: PWA_SW_SCOPE_TOKEN,
|
|
7
|
-
useFactory: () => {
|
|
8
|
-
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
9
|
-
return swScope;
|
|
10
|
-
},
|
|
11
|
-
}),
|
|
12
|
-
provide({
|
|
13
|
-
provide: PWA_SW_URL_TOKEN,
|
|
14
|
-
useFactory: ({ swScope }) => {
|
|
15
|
-
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
16
|
-
const normalizedUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
17
|
-
const normalizedScope = swScope.replace(/\/$/, '');
|
|
18
|
-
const finalUrl = `${normalizedScope}${normalizedUrl}`;
|
|
19
|
-
return finalUrl;
|
|
20
|
-
},
|
|
21
|
-
deps: {
|
|
22
|
-
swScope: PWA_SW_SCOPE_TOKEN,
|
|
23
|
-
},
|
|
24
|
-
}),
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
export { providers };
|
package/lib/workbox/shared.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export declare const providers: (import("@tinkoff/dippy/lib/Provider").ValueProvider<string & {
|
|
2
|
-
__type?: "base token" | undefined;
|
|
3
|
-
}> | import("@tinkoff/dippy/lib/Provider").ClassProviderWithDeps<unknown, string & {
|
|
4
|
-
__type?: "base token" | undefined;
|
|
5
|
-
}> | import("@tinkoff/dippy/lib/Provider").ClassProviderWithoutDeps<string & {
|
|
6
|
-
__type?: "base token" | undefined;
|
|
7
|
-
}> | import("@tinkoff/dippy/lib/Provider").FactoryProviderWithDeps<unknown, string & {
|
|
8
|
-
__type?: "base token" | undefined;
|
|
9
|
-
}> | import("@tinkoff/dippy/lib/Provider").FactoryProviderWithoutDeps<string & {
|
|
10
|
-
__type?: "base token" | undefined;
|
|
11
|
-
}> | import("@tinkoff/dippy/lib/Provider").ClassProviderWithDeps<{
|
|
12
|
-
swScope: string & {
|
|
13
|
-
__type?: "base token" | undefined;
|
|
14
|
-
};
|
|
15
|
-
}, string & {
|
|
16
|
-
__type?: "base token" | undefined;
|
|
17
|
-
}> | import("@tinkoff/dippy/lib/Provider").FactoryProviderWithDeps<{
|
|
18
|
-
swScope: string & {
|
|
19
|
-
__type?: "base token" | undefined;
|
|
20
|
-
};
|
|
21
|
-
}, string & {
|
|
22
|
-
__type?: "base token" | undefined;
|
|
23
|
-
}>)[];
|
|
24
|
-
//# sourceMappingURL=shared.d.ts.map
|
package/lib/workbox/shared.es.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { provide } from '@tramvai/core';
|
|
2
|
-
import { PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN } from '../tokens.es.js';
|
|
3
|
-
|
|
4
|
-
const providers = [
|
|
5
|
-
provide({
|
|
6
|
-
provide: PWA_SW_SCOPE_TOKEN,
|
|
7
|
-
useFactory: () => {
|
|
8
|
-
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
9
|
-
return swScope;
|
|
10
|
-
},
|
|
11
|
-
}),
|
|
12
|
-
provide({
|
|
13
|
-
provide: PWA_SW_URL_TOKEN,
|
|
14
|
-
useFactory: ({ swScope }) => {
|
|
15
|
-
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
16
|
-
const normalizedUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
17
|
-
const normalizedScope = swScope.replace(/\/$/, '');
|
|
18
|
-
const finalUrl = `${normalizedScope}${normalizedUrl}`;
|
|
19
|
-
return finalUrl;
|
|
20
|
-
},
|
|
21
|
-
deps: {
|
|
22
|
-
swScope: PWA_SW_SCOPE_TOKEN,
|
|
23
|
-
},
|
|
24
|
-
}),
|
|
25
|
-
];
|
|
26
|
-
|
|
27
|
-
export { providers };
|