@tramvai/module-progressive-web-app 2.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/lib/browser.d.ts +7 -0
- package/lib/browser.js +15 -0
- package/lib/manifest/browser.browser.js +8 -0
- package/lib/manifest/browser.d.ts +3 -0
- package/lib/manifest/server.d.ts +3 -0
- package/lib/manifest/server.es.js +55 -0
- package/lib/manifest/server.js +59 -0
- package/lib/meta/browser.browser.js +8 -0
- package/lib/meta/browser.d.ts +3 -0
- package/lib/meta/server.d.ts +3 -0
- package/lib/meta/server.es.js +44 -0
- package/lib/meta/server.js +48 -0
- package/lib/server.d.ts +7 -0
- package/lib/server.es.js +15 -0
- package/lib/server.js +24 -0
- package/lib/tokens.browser.js +24 -0
- package/lib/tokens.d.ts +35 -0
- package/lib/tokens.es.js +24 -0
- package/lib/tokens.js +32 -0
- package/lib/workbox/browser.browser.js +68 -0
- package/lib/workbox/browser.d.ts +3 -0
- package/lib/workbox/server.d.ts +3 -0
- package/lib/workbox/server.es.js +28 -0
- package/lib/workbox/server.js +32 -0
- package/lib/workbox/shared.browser.js +24 -0
- package/lib/workbox/shared.d.ts +3 -0
- package/lib/workbox/shared.es.js +24 -0
- package/lib/workbox/shared.js +28 -0
- package/package.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Pwa
|
|
2
|
+
|
|
3
|
+
Pwa integration sw manifest icons meta
|
|
4
|
+
|
|
5
|
+
## Подключение
|
|
6
|
+
|
|
7
|
+
Необходимо установить `@tramvai/module-progressive-web-app`
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
yarn add @tramvai/module-progressive-web-app
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
И подключить в проекте
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { createApp } from '@tramvai/core';
|
|
17
|
+
import { TramvaiPwaModule } from '@tramvai/module-progressive-web-app';
|
|
18
|
+
|
|
19
|
+
createApp({
|
|
20
|
+
name: 'tincoin',
|
|
21
|
+
modules: [ TramvaiPwaModule ],
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Переменные окружения
|
|
26
|
+
|
|
27
|
+
- `SOME_ENV` - описание
|
|
28
|
+
|
|
29
|
+
## Explanation
|
|
30
|
+
<!-- Цель: Рассказать подробно про доступные фичи в этой библиотеке -->
|
|
31
|
+
<!-- О чем написать: Рассмотреть подробно основные фичи которые есть в библиотеке и рассказать как они работают и их особенности. Лучше акцентировать внимание на самих фичах, а не на том, как можно проинтегрировать или использовать (для этого есть раздел How to) -->
|
|
32
|
+
|
|
33
|
+
### Супер фича
|
|
34
|
+
|
|
35
|
+
Что делает эта фича и как эта фича будет полезна пользователю?
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
<!-- Цель: Подробно расписать интерфейс библиотеки -->
|
|
40
|
+
<!-- О чем написать: Описать интерфейс библиотеки какие есть поля и что они означают. -->
|
|
41
|
+
|
|
42
|
+
### createApp
|
|
43
|
+
|
|
44
|
+
Описание интерфейсов и способ использований
|
|
45
|
+
|
|
46
|
+
## How to
|
|
47
|
+
<!-- Цель: ответить на вопрос как сделать что-то или как решить определенную проблему -->
|
|
48
|
+
<!-- О чем написать: рассмотреть основные вопросы, которые могут возниктуь у нового пользователя -->
|
|
49
|
+
### Как можно сделать что-то и решить проблему?
|
|
50
|
+
|
|
51
|
+
Стоит описывать различные кейсы пользователей и как их можно решить
|
|
52
|
+
|
|
53
|
+
## Экспортируемые токены
|
|
54
|
+
<!-- Цель: Вывести все доступные токены -->
|
|
55
|
+
|
|
56
|
+
@inline src/tokens.ts
|
package/lib/browser.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TramvaiPwaWorkboxModule } from './workbox/browser';
|
|
2
|
+
import { TramvaiPwaManifestModule } from './manifest/browser';
|
|
3
|
+
export * from './tokens';
|
|
4
|
+
export { TramvaiPwaWorkboxModule, TramvaiPwaManifestModule };
|
|
5
|
+
export declare const TramvaiPwaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
6
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
7
|
+
};
|
package/lib/browser.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { declareModule } from '@tramvai/core';
|
|
2
|
+
import { TramvaiPwaWorkboxModule } from './workbox/browser.browser.js';
|
|
3
|
+
export { TramvaiPwaWorkboxModule } from './workbox/browser.browser.js';
|
|
4
|
+
import { TramvaiPwaManifestModule } from './manifest/browser.browser.js';
|
|
5
|
+
export { TramvaiPwaManifestModule } from './manifest/browser.browser.js';
|
|
6
|
+
import { TramvaiPwaMetaModule } from './meta/browser.browser.js';
|
|
7
|
+
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN } from './tokens.browser.js';
|
|
8
|
+
|
|
9
|
+
const TramvaiPwaModule = declareModule({
|
|
10
|
+
name: 'TramvaiPwaModule',
|
|
11
|
+
imports: [TramvaiPwaWorkboxModule, TramvaiPwaManifestModule, TramvaiPwaMetaModule],
|
|
12
|
+
providers: [],
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export { TramvaiPwaModule };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaManifestModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { declareModule, provide, Scope, commandLineListTokens } from '@tramvai/core';
|
|
2
|
+
import { ResourceType, ResourceSlot, RESOURCES_REGISTRY } from '@tramvai/tokens-render';
|
|
3
|
+
import { PROXY_CONFIG_TOKEN } from '@tramvai/tokens-server';
|
|
4
|
+
import { appConfig } from '@tramvai/cli/lib/external/config';
|
|
5
|
+
import { PWA_MANIFEST_URL_TOKEN } from '../tokens.es.js';
|
|
6
|
+
|
|
7
|
+
const TramvaiPwaManifestModule = declareModule({
|
|
8
|
+
name: 'TramvaiPwaManifestModule',
|
|
9
|
+
providers: [
|
|
10
|
+
provide({
|
|
11
|
+
provide: PROXY_CONFIG_TOKEN,
|
|
12
|
+
scope: Scope.SINGLETON,
|
|
13
|
+
useFactory: ({ manifestUrl }) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
return ({
|
|
16
|
+
context: [manifestUrl],
|
|
17
|
+
target: (_b = (_a = appConfig.assetsPrefix) !== null && _a !== void 0 ? _a : process.env.ASSETS_PREFIX) !== null && _b !== void 0 ? _b : '',
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
deps: {
|
|
21
|
+
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
22
|
+
},
|
|
23
|
+
}),
|
|
24
|
+
provide({
|
|
25
|
+
provide: commandLineListTokens.customerStart,
|
|
26
|
+
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
27
|
+
// @todo why boolean here?
|
|
28
|
+
if (!process.env.TRAMVAI_PWA_MANIFEST_ENABLED) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
resourcesRegistry.register({
|
|
32
|
+
type: ResourceType.asIs,
|
|
33
|
+
slot: ResourceSlot.HEAD_META,
|
|
34
|
+
// @todo what about crossorigin, maybe optional?
|
|
35
|
+
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
deps: {
|
|
39
|
+
resourcesRegistry: RESOURCES_REGISTRY,
|
|
40
|
+
manifestUrl: PWA_MANIFEST_URL_TOKEN,
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
provide({
|
|
44
|
+
provide: PWA_MANIFEST_URL_TOKEN,
|
|
45
|
+
useFactory: () => {
|
|
46
|
+
const manifestDest = process.env.TRAMVAI_PWA_MANIFEST_DEST;
|
|
47
|
+
const finalUrl = manifestDest.startsWith('/') ? manifestDest : `/${manifestDest}`;
|
|
48
|
+
// @todo check that finalUrl is relative and ends with .json or .webmanifest
|
|
49
|
+
return finalUrl;
|
|
50
|
+
},
|
|
51
|
+
}),
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
export { TramvaiPwaManifestModule };
|
|
@@ -0,0 +1,59 @@
|
|
|
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 tokensServer = require('@tramvai/tokens-server');
|
|
8
|
+
var config = require('@tramvai/cli/lib/external/config');
|
|
9
|
+
var tokens = require('../tokens.js');
|
|
10
|
+
|
|
11
|
+
const TramvaiPwaManifestModule = core.declareModule({
|
|
12
|
+
name: 'TramvaiPwaManifestModule',
|
|
13
|
+
providers: [
|
|
14
|
+
core.provide({
|
|
15
|
+
provide: tokensServer.PROXY_CONFIG_TOKEN,
|
|
16
|
+
scope: core.Scope.SINGLETON,
|
|
17
|
+
useFactory: ({ manifestUrl }) => {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
return ({
|
|
20
|
+
context: [manifestUrl],
|
|
21
|
+
target: (_b = (_a = config.appConfig.assetsPrefix) !== null && _a !== void 0 ? _a : process.env.ASSETS_PREFIX) !== null && _b !== void 0 ? _b : '',
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
deps: {
|
|
25
|
+
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
26
|
+
},
|
|
27
|
+
}),
|
|
28
|
+
core.provide({
|
|
29
|
+
provide: core.commandLineListTokens.customerStart,
|
|
30
|
+
useFactory: ({ resourcesRegistry, manifestUrl }) => async function registerWebManifest() {
|
|
31
|
+
// @todo why boolean here?
|
|
32
|
+
if (!process.env.TRAMVAI_PWA_MANIFEST_ENABLED) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
resourcesRegistry.register({
|
|
36
|
+
type: tokensRender.ResourceType.asIs,
|
|
37
|
+
slot: tokensRender.ResourceSlot.HEAD_META,
|
|
38
|
+
// @todo what about crossorigin, maybe optional?
|
|
39
|
+
payload: `<link rel="manifest" href="${manifestUrl}">`,
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
deps: {
|
|
43
|
+
resourcesRegistry: tokensRender.RESOURCES_REGISTRY,
|
|
44
|
+
manifestUrl: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
core.provide({
|
|
48
|
+
provide: tokens.PWA_MANIFEST_URL_TOKEN,
|
|
49
|
+
useFactory: () => {
|
|
50
|
+
const manifestDest = process.env.TRAMVAI_PWA_MANIFEST_DEST;
|
|
51
|
+
const finalUrl = manifestDest.startsWith('/') ? manifestDest : `/${manifestDest}`;
|
|
52
|
+
// @todo check that finalUrl is relative and ends with .json or .webmanifest
|
|
53
|
+
return finalUrl;
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
],
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
exports.TramvaiPwaManifestModule = TramvaiPwaManifestModule;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaMetaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaMetaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { declareModule, provide } from '@tramvai/core';
|
|
2
|
+
import { RENDER_SLOTS, ResourceType, ResourceSlot } from '@tramvai/tokens-render';
|
|
3
|
+
import { appConfig } from '@tramvai/cli/lib/external/config';
|
|
4
|
+
import { PWA_META_TOKEN } from '../tokens.es.js';
|
|
5
|
+
|
|
6
|
+
var _a, _b, _c;
|
|
7
|
+
const metaMap = {
|
|
8
|
+
viewport: 'viewport',
|
|
9
|
+
themeColor: 'theme-color',
|
|
10
|
+
mobileApp: 'mobile-web-app-capable',
|
|
11
|
+
mobileAppIOS: 'apple-mobile-web-app-capable',
|
|
12
|
+
appleTitle: 'apple-mobile-web-app-title',
|
|
13
|
+
appleStatusBarStyle: 'apple-mobile-web-app-status-bar-style',
|
|
14
|
+
};
|
|
15
|
+
const TramvaiPwaMetaModule = declareModule({
|
|
16
|
+
name: 'TramvaiPwaMetaModule',
|
|
17
|
+
providers: [
|
|
18
|
+
provide({
|
|
19
|
+
provide: PWA_META_TOKEN,
|
|
20
|
+
useValue: (_c = (_b = (_a = appConfig.experiments) === null || _a === void 0 ? void 0 : _a.pwa) === null || _b === void 0 ? void 0 : _b.meta) !== null && _c !== void 0 ? _c : {},
|
|
21
|
+
}),
|
|
22
|
+
provide({
|
|
23
|
+
provide: RENDER_SLOTS,
|
|
24
|
+
useFactory: ({ meta }) => {
|
|
25
|
+
const finalMeta = meta !== null && meta !== void 0 ? meta : {};
|
|
26
|
+
const keys = Object.keys(finalMeta);
|
|
27
|
+
return keys.map((key) => {
|
|
28
|
+
const metaName = metaMap[key];
|
|
29
|
+
const metaValue = finalMeta[key];
|
|
30
|
+
return {
|
|
31
|
+
type: ResourceType.asIs,
|
|
32
|
+
slot: ResourceSlot.HEAD_META,
|
|
33
|
+
payload: `<meta name="${metaName}" content="${metaValue}">`,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
deps: {
|
|
38
|
+
meta: PWA_META_TOKEN,
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
41
|
+
],
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export { TramvaiPwaMetaModule };
|
|
@@ -0,0 +1,48 @@
|
|
|
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 config = require('@tramvai/cli/lib/external/config');
|
|
8
|
+
var tokens = require('../tokens.js');
|
|
9
|
+
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const metaMap = {
|
|
12
|
+
viewport: 'viewport',
|
|
13
|
+
themeColor: 'theme-color',
|
|
14
|
+
mobileApp: 'mobile-web-app-capable',
|
|
15
|
+
mobileAppIOS: 'apple-mobile-web-app-capable',
|
|
16
|
+
appleTitle: 'apple-mobile-web-app-title',
|
|
17
|
+
appleStatusBarStyle: 'apple-mobile-web-app-status-bar-style',
|
|
18
|
+
};
|
|
19
|
+
const TramvaiPwaMetaModule = core.declareModule({
|
|
20
|
+
name: 'TramvaiPwaMetaModule',
|
|
21
|
+
providers: [
|
|
22
|
+
core.provide({
|
|
23
|
+
provide: tokens.PWA_META_TOKEN,
|
|
24
|
+
useValue: (_c = (_b = (_a = config.appConfig.experiments) === null || _a === void 0 ? void 0 : _a.pwa) === null || _b === void 0 ? void 0 : _b.meta) !== null && _c !== void 0 ? _c : {},
|
|
25
|
+
}),
|
|
26
|
+
core.provide({
|
|
27
|
+
provide: tokensRender.RENDER_SLOTS,
|
|
28
|
+
useFactory: ({ meta }) => {
|
|
29
|
+
const finalMeta = meta !== null && meta !== void 0 ? meta : {};
|
|
30
|
+
const keys = Object.keys(finalMeta);
|
|
31
|
+
return keys.map((key) => {
|
|
32
|
+
const metaName = metaMap[key];
|
|
33
|
+
const metaValue = finalMeta[key];
|
|
34
|
+
return {
|
|
35
|
+
type: tokensRender.ResourceType.asIs,
|
|
36
|
+
slot: tokensRender.ResourceSlot.HEAD_META,
|
|
37
|
+
payload: `<meta name="${metaName}" content="${metaValue}">`,
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
deps: {
|
|
42
|
+
meta: tokens.PWA_META_TOKEN,
|
|
43
|
+
},
|
|
44
|
+
}),
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
exports.TramvaiPwaMetaModule = TramvaiPwaMetaModule;
|
package/lib/server.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TramvaiPwaWorkboxModule } from './workbox/server';
|
|
2
|
+
import { TramvaiPwaManifestModule } from './manifest/server';
|
|
3
|
+
export * from './tokens';
|
|
4
|
+
export { TramvaiPwaWorkboxModule, TramvaiPwaManifestModule };
|
|
5
|
+
export declare const TramvaiPwaModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
6
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
7
|
+
};
|
package/lib/server.es.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { declareModule } from '@tramvai/core';
|
|
2
|
+
import { TramvaiPwaWorkboxModule } from './workbox/server.es.js';
|
|
3
|
+
export { TramvaiPwaWorkboxModule } from './workbox/server.es.js';
|
|
4
|
+
import { TramvaiPwaManifestModule } from './manifest/server.es.js';
|
|
5
|
+
export { TramvaiPwaManifestModule } from './manifest/server.es.js';
|
|
6
|
+
import { TramvaiPwaMetaModule } from './meta/server.es.js';
|
|
7
|
+
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN } from './tokens.es.js';
|
|
8
|
+
|
|
9
|
+
const TramvaiPwaModule = declareModule({
|
|
10
|
+
name: 'TramvaiPwaModule',
|
|
11
|
+
imports: [TramvaiPwaWorkboxModule, TramvaiPwaManifestModule, TramvaiPwaMetaModule],
|
|
12
|
+
providers: [],
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export { TramvaiPwaModule };
|
package/lib/server.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tramvai/core');
|
|
6
|
+
var server = require('./workbox/server.js');
|
|
7
|
+
var server$1 = require('./manifest/server.js');
|
|
8
|
+
var server$2 = require('./meta/server.js');
|
|
9
|
+
var tokens = require('./tokens.js');
|
|
10
|
+
|
|
11
|
+
const TramvaiPwaModule = core.declareModule({
|
|
12
|
+
name: 'TramvaiPwaModule',
|
|
13
|
+
imports: [server.TramvaiPwaWorkboxModule, server$1.TramvaiPwaManifestModule, server$2.TramvaiPwaMetaModule],
|
|
14
|
+
providers: [],
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
exports.TramvaiPwaWorkboxModule = server.TramvaiPwaWorkboxModule;
|
|
18
|
+
exports.TramvaiPwaManifestModule = server$1.TramvaiPwaManifestModule;
|
|
19
|
+
exports.PWA_MANIFEST_URL_TOKEN = tokens.PWA_MANIFEST_URL_TOKEN;
|
|
20
|
+
exports.PWA_META_TOKEN = tokens.PWA_META_TOKEN;
|
|
21
|
+
exports.PWA_SW_SCOPE_TOKEN = tokens.PWA_SW_SCOPE_TOKEN;
|
|
22
|
+
exports.PWA_SW_URL_TOKEN = tokens.PWA_SW_URL_TOKEN;
|
|
23
|
+
exports.PWA_WORKBOX_TOKEN = tokens.PWA_WORKBOX_TOKEN;
|
|
24
|
+
exports.TramvaiPwaModule = TramvaiPwaModule;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createToken } from '@tinkoff/dippy';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description Workbox instance
|
|
5
|
+
*/
|
|
6
|
+
const PWA_WORKBOX_TOKEN = createToken('pwa workbox');
|
|
7
|
+
/**
|
|
8
|
+
* @description Token to owerwrite default - `pwa.sw.dest`
|
|
9
|
+
*/
|
|
10
|
+
const PWA_SW_URL_TOKEN = createToken('pwa sw url');
|
|
11
|
+
/**
|
|
12
|
+
* @description Token to owerwrite default - `pwa.sw.scope`
|
|
13
|
+
*/
|
|
14
|
+
const PWA_SW_SCOPE_TOKEN = createToken('pwa sw scope');
|
|
15
|
+
/**
|
|
16
|
+
* @description Token to owerwrite default - `${pwa.webmanifest.path}manifest.${pwa.webmanifest.ext}`
|
|
17
|
+
*/
|
|
18
|
+
const PWA_MANIFEST_URL_TOKEN = createToken('pwa manifest url');
|
|
19
|
+
/**
|
|
20
|
+
* @description Token to owerwrite default - `pwa.meta` (meta tags will be added to all pages)
|
|
21
|
+
*/
|
|
22
|
+
const PWA_META_TOKEN = createToken('pwa meta');
|
|
23
|
+
|
|
24
|
+
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN };
|
package/lib/tokens.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Workbox } from 'workbox-window';
|
|
2
|
+
import type { PwaMetaOptions } from '@tramvai/cli';
|
|
3
|
+
export type WebManifest = {
|
|
4
|
+
[key: string]: any;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* @description Workbox instance
|
|
8
|
+
*/
|
|
9
|
+
export declare const PWA_WORKBOX_TOKEN: (() => Promise<Workbox | null>) & {
|
|
10
|
+
__type?: "base token" | undefined;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* @description Token to owerwrite default - `pwa.sw.dest`
|
|
14
|
+
*/
|
|
15
|
+
export declare const PWA_SW_URL_TOKEN: string & {
|
|
16
|
+
__type?: "base token" | undefined;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @description Token to owerwrite default - `pwa.sw.scope`
|
|
20
|
+
*/
|
|
21
|
+
export declare const PWA_SW_SCOPE_TOKEN: string & {
|
|
22
|
+
__type?: "base token" | undefined;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* @description Token to owerwrite default - `${pwa.webmanifest.path}manifest.${pwa.webmanifest.ext}`
|
|
26
|
+
*/
|
|
27
|
+
export declare const PWA_MANIFEST_URL_TOKEN: string & {
|
|
28
|
+
__type?: "base token" | undefined;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* @description Token to owerwrite default - `pwa.meta` (meta tags will be added to all pages)
|
|
32
|
+
*/
|
|
33
|
+
export declare const PWA_META_TOKEN: PwaMetaOptions & {
|
|
34
|
+
__type?: "base token" | undefined;
|
|
35
|
+
};
|
package/lib/tokens.es.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createToken } from '@tinkoff/dippy';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @description Workbox instance
|
|
5
|
+
*/
|
|
6
|
+
const PWA_WORKBOX_TOKEN = createToken('pwa workbox');
|
|
7
|
+
/**
|
|
8
|
+
* @description Token to owerwrite default - `pwa.sw.dest`
|
|
9
|
+
*/
|
|
10
|
+
const PWA_SW_URL_TOKEN = createToken('pwa sw url');
|
|
11
|
+
/**
|
|
12
|
+
* @description Token to owerwrite default - `pwa.sw.scope`
|
|
13
|
+
*/
|
|
14
|
+
const PWA_SW_SCOPE_TOKEN = createToken('pwa sw scope');
|
|
15
|
+
/**
|
|
16
|
+
* @description Token to owerwrite default - `${pwa.webmanifest.path}manifest.${pwa.webmanifest.ext}`
|
|
17
|
+
*/
|
|
18
|
+
const PWA_MANIFEST_URL_TOKEN = createToken('pwa manifest url');
|
|
19
|
+
/**
|
|
20
|
+
* @description Token to owerwrite default - `pwa.meta` (meta tags will be added to all pages)
|
|
21
|
+
*/
|
|
22
|
+
const PWA_META_TOKEN = createToken('pwa meta');
|
|
23
|
+
|
|
24
|
+
export { PWA_MANIFEST_URL_TOKEN, PWA_META_TOKEN, PWA_SW_SCOPE_TOKEN, PWA_SW_URL_TOKEN, PWA_WORKBOX_TOKEN };
|
package/lib/tokens.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var dippy = require('@tinkoff/dippy');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @description Workbox instance
|
|
9
|
+
*/
|
|
10
|
+
const PWA_WORKBOX_TOKEN = dippy.createToken('pwa workbox');
|
|
11
|
+
/**
|
|
12
|
+
* @description Token to owerwrite default - `pwa.sw.dest`
|
|
13
|
+
*/
|
|
14
|
+
const PWA_SW_URL_TOKEN = dippy.createToken('pwa sw url');
|
|
15
|
+
/**
|
|
16
|
+
* @description Token to owerwrite default - `pwa.sw.scope`
|
|
17
|
+
*/
|
|
18
|
+
const PWA_SW_SCOPE_TOKEN = dippy.createToken('pwa sw scope');
|
|
19
|
+
/**
|
|
20
|
+
* @description Token to owerwrite default - `${pwa.webmanifest.path}manifest.${pwa.webmanifest.ext}`
|
|
21
|
+
*/
|
|
22
|
+
const PWA_MANIFEST_URL_TOKEN = dippy.createToken('pwa manifest url');
|
|
23
|
+
/**
|
|
24
|
+
* @description Token to owerwrite default - `pwa.meta` (meta tags will be added to all pages)
|
|
25
|
+
*/
|
|
26
|
+
const PWA_META_TOKEN = dippy.createToken('pwa meta');
|
|
27
|
+
|
|
28
|
+
exports.PWA_MANIFEST_URL_TOKEN = PWA_MANIFEST_URL_TOKEN;
|
|
29
|
+
exports.PWA_META_TOKEN = PWA_META_TOKEN;
|
|
30
|
+
exports.PWA_SW_SCOPE_TOKEN = PWA_SW_SCOPE_TOKEN;
|
|
31
|
+
exports.PWA_SW_URL_TOKEN = PWA_SW_URL_TOKEN;
|
|
32
|
+
exports.PWA_WORKBOX_TOKEN = PWA_WORKBOX_TOKEN;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { declareModule, provide, Scope, commandLineListTokens } from '@tramvai/core';
|
|
2
|
+
import { MODERN_SATISFIES_TOKEN } from '@tramvai/tokens-render';
|
|
3
|
+
import { PWA_WORKBOX_TOKEN, PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../tokens.browser.js';
|
|
4
|
+
import { providers } from './shared.browser.js';
|
|
5
|
+
|
|
6
|
+
const TramvaiPwaWorkboxModule = declareModule({
|
|
7
|
+
name: 'TramvaiPwaWorkboxModule',
|
|
8
|
+
providers: [
|
|
9
|
+
...providers,
|
|
10
|
+
provide({
|
|
11
|
+
provide: PWA_WORKBOX_TOKEN,
|
|
12
|
+
scope: Scope.SINGLETON,
|
|
13
|
+
useFactory: ({ swUrl, swScope, modern }) => {
|
|
14
|
+
let workbox = null;
|
|
15
|
+
return async () => {
|
|
16
|
+
if (!('serviceWorker' in navigator)) {
|
|
17
|
+
// @todo: logs
|
|
18
|
+
return workbox;
|
|
19
|
+
}
|
|
20
|
+
const { Workbox } = await import('workbox-window/Workbox');
|
|
21
|
+
workbox = new Workbox(modern ? swUrl.replace(/\.js$/, '.modern.js') : swUrl, {
|
|
22
|
+
scope: swScope,
|
|
23
|
+
});
|
|
24
|
+
workbox.addEventListener('installed', (event) => {
|
|
25
|
+
if (event.isUpdate) ;
|
|
26
|
+
});
|
|
27
|
+
return workbox;
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
deps: {
|
|
31
|
+
swUrl: PWA_SW_URL_TOKEN,
|
|
32
|
+
swScope: PWA_SW_SCOPE_TOKEN,
|
|
33
|
+
modern: MODERN_SATISFIES_TOKEN,
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
provide({
|
|
37
|
+
provide: commandLineListTokens.init,
|
|
38
|
+
useFactory: ({ workbox }) => async function registerWorkbox() {
|
|
39
|
+
// @todo why boolean here?
|
|
40
|
+
if (!process.env.TRAMVAI_PWA_WORKBOX_ENABLED) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const wb = await workbox();
|
|
44
|
+
if (!wb) {
|
|
45
|
+
// @todo: logs
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
// @todo unregister when Workbox is disabled in config !!!
|
|
50
|
+
// https://github.com/nuxt-community/pwa-module/blob/main/templates/workbox/workbox.unregister.js
|
|
51
|
+
await wb.register();
|
|
52
|
+
// @todo support force update strategies?
|
|
53
|
+
if (process.env.NODE_ENV === 'development') {
|
|
54
|
+
await wb.update();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
// @todo: logs
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
deps: {
|
|
62
|
+
workbox: PWA_WORKBOX_TOKEN,
|
|
63
|
+
},
|
|
64
|
+
}),
|
|
65
|
+
],
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export { TramvaiPwaWorkboxModule };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const TramvaiPwaWorkboxModule: import("@tinkoff/dippy/lib/modules/module.h").ModuleClass & Partial<import("@tinkoff/dippy/lib/modules/module.h").ModuleSecretParameters> & {
|
|
2
|
+
[x: string]: (...args: any[]) => import("@tramvai/core").ModuleType<import("@tinkoff/dippy/lib/modules/module.h").ModuleClass>;
|
|
3
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { declareModule, provide, Scope } from '@tramvai/core';
|
|
2
|
+
import { PROXY_CONFIG_TOKEN } from '@tramvai/tokens-server';
|
|
3
|
+
import { appConfig } from '@tramvai/cli/lib/external/config';
|
|
4
|
+
import { PWA_SW_URL_TOKEN } from '../tokens.es.js';
|
|
5
|
+
import { providers } from './shared.es.js';
|
|
6
|
+
|
|
7
|
+
const TramvaiPwaWorkboxModule = declareModule({
|
|
8
|
+
name: 'TramvaiPwaWorkboxModule',
|
|
9
|
+
providers: [
|
|
10
|
+
...providers,
|
|
11
|
+
provide({
|
|
12
|
+
provide: PROXY_CONFIG_TOKEN,
|
|
13
|
+
scope: Scope.SINGLETON,
|
|
14
|
+
useFactory: ({ swUrl }) => {
|
|
15
|
+
var _a, _b;
|
|
16
|
+
return ({
|
|
17
|
+
context: [swUrl, swUrl.replace(/\.js$/, '.modern.js')],
|
|
18
|
+
target: (_b = (_a = appConfig.assetsPrefix) !== null && _a !== void 0 ? _a : process.env.ASSETS_PREFIX) !== null && _b !== void 0 ? _b : '',
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
deps: {
|
|
22
|
+
swUrl: PWA_SW_URL_TOKEN,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
],
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export { TramvaiPwaWorkboxModule };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tramvai/core');
|
|
6
|
+
var tokensServer = require('@tramvai/tokens-server');
|
|
7
|
+
var config = require('@tramvai/cli/lib/external/config');
|
|
8
|
+
var tokens = require('../tokens.js');
|
|
9
|
+
var shared = require('./shared.js');
|
|
10
|
+
|
|
11
|
+
const TramvaiPwaWorkboxModule = core.declareModule({
|
|
12
|
+
name: 'TramvaiPwaWorkboxModule',
|
|
13
|
+
providers: [
|
|
14
|
+
...shared.providers,
|
|
15
|
+
core.provide({
|
|
16
|
+
provide: tokensServer.PROXY_CONFIG_TOKEN,
|
|
17
|
+
scope: core.Scope.SINGLETON,
|
|
18
|
+
useFactory: ({ swUrl }) => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
return ({
|
|
21
|
+
context: [swUrl, swUrl.replace(/\.js$/, '.modern.js')],
|
|
22
|
+
target: (_b = (_a = config.appConfig.assetsPrefix) !== null && _a !== void 0 ? _a : process.env.ASSETS_PREFIX) !== null && _b !== void 0 ? _b : '',
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
deps: {
|
|
26
|
+
swUrl: tokens.PWA_SW_URL_TOKEN,
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
exports.TramvaiPwaWorkboxModule = TramvaiPwaWorkboxModule;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { provide } from '@tramvai/core';
|
|
2
|
+
import { PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../tokens.browser.js';
|
|
3
|
+
|
|
4
|
+
const providers = [
|
|
5
|
+
provide({
|
|
6
|
+
provide: PWA_SW_URL_TOKEN,
|
|
7
|
+
useFactory: () => {
|
|
8
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
9
|
+
const finalUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
10
|
+
// @todo check that finalUrl is relative and ends with .js
|
|
11
|
+
return finalUrl;
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
provide({
|
|
15
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
16
|
+
useFactory: () => {
|
|
17
|
+
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
18
|
+
// @todo validate
|
|
19
|
+
return swScope;
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export { providers };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { provide } from '@tramvai/core';
|
|
2
|
+
import { PWA_SW_URL_TOKEN, PWA_SW_SCOPE_TOKEN } from '../tokens.es.js';
|
|
3
|
+
|
|
4
|
+
const providers = [
|
|
5
|
+
provide({
|
|
6
|
+
provide: PWA_SW_URL_TOKEN,
|
|
7
|
+
useFactory: () => {
|
|
8
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
9
|
+
const finalUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
10
|
+
// @todo check that finalUrl is relative and ends with .js
|
|
11
|
+
return finalUrl;
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
provide({
|
|
15
|
+
provide: PWA_SW_SCOPE_TOKEN,
|
|
16
|
+
useFactory: () => {
|
|
17
|
+
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
18
|
+
// @todo validate
|
|
19
|
+
return swScope;
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export { providers };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@tramvai/core');
|
|
6
|
+
var tokens = require('../tokens.js');
|
|
7
|
+
|
|
8
|
+
const providers = [
|
|
9
|
+
core.provide({
|
|
10
|
+
provide: tokens.PWA_SW_URL_TOKEN,
|
|
11
|
+
useFactory: () => {
|
|
12
|
+
const swDest = process.env.TRAMVAI_PWA_SW_DEST;
|
|
13
|
+
const finalUrl = swDest.startsWith('/') ? swDest : `/${swDest}`;
|
|
14
|
+
// @todo check that finalUrl is relative and ends with .js
|
|
15
|
+
return finalUrl;
|
|
16
|
+
},
|
|
17
|
+
}),
|
|
18
|
+
core.provide({
|
|
19
|
+
provide: tokens.PWA_SW_SCOPE_TOKEN,
|
|
20
|
+
useFactory: () => {
|
|
21
|
+
const swScope = process.env.TRAMVAI_PWA_SW_SCOPE;
|
|
22
|
+
// @todo validate
|
|
23
|
+
return swScope;
|
|
24
|
+
},
|
|
25
|
+
}),
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
exports.providers = providers;
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tramvai/module-progressive-web-app",
|
|
3
|
+
"version": "2.100.0",
|
|
4
|
+
"description": "Pwa integration - SW, manifest, icons and meta",
|
|
5
|
+
"browser": "lib/browser.js",
|
|
6
|
+
"main": "lib/server.js",
|
|
7
|
+
"module": "lib/server.es.js",
|
|
8
|
+
"typings": "lib/server.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"lib"
|
|
11
|
+
],
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"license": "Apache-2.0",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git@github.com:Tinkoff/tramvai.git"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tramvai-build --forPublish --preserveModules",
|
|
20
|
+
"watch": "tsc -w"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"registry": "https://registry.npmjs.org/"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@tramvai/tokens-render": "2.100.0",
|
|
27
|
+
"@tramvai/tokens-server": "2.100.0",
|
|
28
|
+
"workbox-window": "^6.4.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"@tramvai/cli": "2.100.0",
|
|
33
|
+
"@tramvai/core": "2.100.0",
|
|
34
|
+
"@tinkoff/dippy": "0.8.15",
|
|
35
|
+
"tslib": "^2.4.0"
|
|
36
|
+
}
|
|
37
|
+
}
|