@metricinsights/pp-dev 0.1.1 → 0.3.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.
Files changed (62) hide show
  1. package/README.md +49 -15
  2. package/dist/api/assets.d.ts +15 -0
  3. package/dist/api/assets.js +58 -0
  4. package/dist/api/assets.js.map +1 -0
  5. package/dist/api/base.d.ts +5 -0
  6. package/dist/api/base.js +7 -0
  7. package/dist/api/base.js.map +1 -0
  8. package/dist/api/constants.d.ts +1 -0
  9. package/dist/api/constants.js +2 -0
  10. package/dist/api/constants.js.map +1 -0
  11. package/dist/api/index.d.ts +2 -0
  12. package/dist/api/index.js +3 -0
  13. package/dist/api/index.js.map +1 -0
  14. package/dist/api/page.d.ts +16 -0
  15. package/dist/api/page.js +43 -0
  16. package/dist/api/page.js.map +1 -0
  17. package/dist/cli.js +103 -0
  18. package/dist/cli.js.map +1 -1
  19. package/dist/client/client.css +131 -28
  20. package/dist/client/client.js +40 -1
  21. package/dist/client/client.js.map +1 -1
  22. package/dist/client/index.html +2 -2
  23. package/dist/index.d.ts +4 -0
  24. package/dist/index.js +40 -8
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/client.service.d.ts +9 -3
  27. package/dist/lib/client.service.js +32 -6
  28. package/dist/lib/client.service.js.map +1 -1
  29. package/dist/lib/dist.service.d.ts +31 -0
  30. package/dist/lib/dist.service.js +148 -0
  31. package/dist/lib/dist.service.js.map +1 -0
  32. package/dist/lib/helpers/content-encoding.helper.d.ts +3 -0
  33. package/dist/lib/helpers/content-encoding.helper.js +26 -0
  34. package/dist/lib/helpers/content-encoding.helper.js.map +1 -0
  35. package/dist/lib/helpers/server.d.ts +14 -0
  36. package/dist/lib/helpers/server.js +40 -0
  37. package/dist/lib/helpers/server.js.map +1 -0
  38. package/dist/lib/helpers/url.helper.d.ts +4 -0
  39. package/dist/lib/helpers/url.helper.js +13 -0
  40. package/dist/lib/helpers/url.helper.js.map +1 -1
  41. package/dist/lib/load-pp-data.middleware.d.ts +5 -0
  42. package/dist/lib/load-pp-data.middleware.js +28 -0
  43. package/dist/lib/load-pp-data.middleware.js.map +1 -0
  44. package/dist/lib/pp-redirect.middleware.d.ts +3 -0
  45. package/dist/lib/pp-redirect.middleware.js +21 -0
  46. package/dist/lib/pp-redirect.middleware.js.map +1 -0
  47. package/dist/lib/pp.middleware.d.ts +15 -3
  48. package/dist/lib/pp.middleware.js +58 -43
  49. package/dist/lib/pp.middleware.js.map +1 -1
  50. package/dist/lib/proxy-cache.middleware.d.ts +5 -4
  51. package/dist/lib/proxy-cache.middleware.js +5 -5
  52. package/dist/lib/proxy-cache.middleware.js.map +1 -1
  53. package/dist/lib/proxy-pass.middleware.d.ts +2 -1
  54. package/dist/lib/proxy-pass.middleware.js +2 -2
  55. package/dist/lib/proxy-pass.middleware.js.map +1 -1
  56. package/dist/lib/rewrite-response.middleware.d.ts +6 -0
  57. package/dist/lib/rewrite-response.middleware.js +23 -0
  58. package/dist/lib/rewrite-response.middleware.js.map +1 -0
  59. package/dist/plugin.d.ts +2 -0
  60. package/dist/plugin.js +30 -62
  61. package/dist/plugin.js.map +1 -1
  62. package/package.json +8 -3
@@ -0,0 +1,148 @@
1
+ import * as path from 'path';
2
+ import { promises as fs } from 'fs';
3
+ import { fileURLToPath } from 'url';
4
+ import * as crypto from 'crypto';
5
+ import * as process from 'process';
6
+ import * as child_process from 'child_process';
7
+ import * as console from 'console';
8
+ export const TEMPLATE_PART_PAGE_NAME = 'pageName';
9
+ export const TEMPLATE_PART_DATE = 'date';
10
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
+ const pluginPath = path.resolve(__dirname, '..', '..');
12
+ const node_modules_path = path.resolve(pluginPath, '..', '..');
13
+ const metaDirName = '.pp-dev-meta';
14
+ const metaDirPath = path.resolve(node_modules_path, metaDirName);
15
+ const metaFilePath = path.resolve(metaDirPath, 'sync-service.meta.json');
16
+ export class DistService {
17
+ backupFolder;
18
+ backupNameTemplate;
19
+ dateFormat;
20
+ pageName;
21
+ currentMeta = null;
22
+ constructor(pageName, syncOptions) {
23
+ const { backupFolder = path.resolve(process.cwd(), 'backups'), backupNameTemplate = `{${TEMPLATE_PART_PAGE_NAME}}-{${TEMPLATE_PART_DATE}}.zip`, dateFormat = (date) => date.toISOString().replace(/:/g, '-').replace(/\..*$/, ''), } = syncOptions || {};
24
+ this.backupFolder = backupFolder;
25
+ this.backupNameTemplate = backupNameTemplate;
26
+ this.dateFormat = dateFormat;
27
+ this.pageName = pageName;
28
+ this.syncMeta();
29
+ }
30
+ async checkMeta() {
31
+ try {
32
+ await fs.stat(metaDirPath);
33
+ }
34
+ catch {
35
+ await fs.mkdir(metaDirPath);
36
+ }
37
+ try {
38
+ await fs.stat(this.backupFolder);
39
+ }
40
+ catch {
41
+ await fs.mkdir(this.backupFolder);
42
+ }
43
+ }
44
+ async readMetaFile() {
45
+ await this.checkMeta();
46
+ return await fs
47
+ .readFile(metaFilePath, {
48
+ encoding: 'utf-8',
49
+ })
50
+ .catch(() => '{}');
51
+ }
52
+ async writeMetaFile(meta) {
53
+ await this.checkMeta();
54
+ return await fs.writeFile(metaFilePath, JSON.stringify(meta, null, 2), {
55
+ encoding: 'utf-8',
56
+ });
57
+ }
58
+ async syncMeta() {
59
+ if (!this.currentMeta) {
60
+ this.currentMeta = JSON.parse(await this.readMetaFile());
61
+ }
62
+ else {
63
+ await this.writeMetaFile(this.currentMeta);
64
+ }
65
+ }
66
+ async getLatestSavedBackup() {
67
+ const { lastBackupName } = this.currentMeta;
68
+ if (!lastBackupName) {
69
+ return null;
70
+ }
71
+ const backupPath = path.resolve(this.backupFolder, lastBackupName);
72
+ try {
73
+ await fs.stat(backupPath);
74
+ return backupPath;
75
+ }
76
+ catch {
77
+ return null;
78
+ }
79
+ }
80
+ backupName(pageName, date = new Date()) {
81
+ return this.backupNameTemplate
82
+ .replace(`{${TEMPLATE_PART_PAGE_NAME}}`, pageName)
83
+ .replace(`{${TEMPLATE_PART_DATE}}`, this.dateFormat(date));
84
+ }
85
+ getBackupMeta() {
86
+ return this.currentMeta;
87
+ }
88
+ async saveBackup(backupFile) {
89
+ const backupFileHash = crypto.createHash('md5').update(backupFile).digest('hex');
90
+ const lastSavedBackup = await this.getLatestSavedBackup();
91
+ if (lastSavedBackup) {
92
+ const { lastBackupHash } = this.currentMeta;
93
+ if (lastBackupHash === backupFileHash) {
94
+ return;
95
+ }
96
+ }
97
+ const backupDate = new Date();
98
+ const filename = this.backupName(this.pageName, backupDate);
99
+ this.currentMeta.lastBackupName = filename;
100
+ this.currentMeta.lastBackupHash = backupFileHash;
101
+ this.currentMeta.lastBackupDate = backupDate.toISOString();
102
+ await this.syncMeta();
103
+ return await fs.writeFile(path.resolve(this.backupFolder, filename), backupFile);
104
+ }
105
+ async buildNewAssets() {
106
+ const buildCommand = new Promise(function (resolve, reject) {
107
+ let data = '';
108
+ console.log('\x1b[36m%s\x1b[0m', '[DistService] Build started');
109
+ const proc = child_process.spawn('node', [path.resolve(pluginPath, './bin/pp-dev.js'), 'build'], {
110
+ cwd: process.cwd(),
111
+ env: process.env,
112
+ stdio: 'inherit',
113
+ });
114
+ proc.on('message', (msg) => {
115
+ data += msg;
116
+ });
117
+ proc.on('close', (code) => {
118
+ if (code !== 0) {
119
+ reject(new Error(`build command exited with code ${code}`));
120
+ return;
121
+ }
122
+ resolve(data);
123
+ });
124
+ proc.on('error', (err) => {
125
+ reject(err);
126
+ });
127
+ });
128
+ try {
129
+ await buildCommand.finally(() => {
130
+ console.log('\x1b[36m%s\x1b[0m', '[DistService] Build finished');
131
+ });
132
+ const assetFile = path.resolve(process.cwd(), `./dist-zip/${this.pageName}.zip`);
133
+ if (!(await fs.stat(assetFile))) {
134
+ throw new Error(`File ${assetFile} not found`);
135
+ }
136
+ return await fs.readFile(assetFile);
137
+ }
138
+ catch (e) {
139
+ console.log(e);
140
+ throw e;
141
+ }
142
+ }
143
+ async saveBackupAndBuild(backupFile) {
144
+ await this.saveBackup(backupFile);
145
+ return await this.buildNewAssets();
146
+ }
147
+ }
148
+ //# sourceMappingURL=dist.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist.service.js","sourceRoot":"","sources":["../../src/lib/dist.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ export declare function decodeContent(content: Buffer, contentEncoding?: string): Buffer;
3
+ export declare function encodeContent(content: Buffer, contentEncoding?: string): Buffer;
@@ -0,0 +1,26 @@
1
+ import { unzipSync, brotliDecompressSync, deflateSync, gzipSync, brotliCompressSync, inflateSync } from 'zlib';
2
+ export function decodeContent(content, contentEncoding) {
3
+ switch (contentEncoding) {
4
+ case 'gzip':
5
+ return unzipSync(content);
6
+ case 'br':
7
+ return brotliDecompressSync(content);
8
+ case 'deflate':
9
+ return deflateSync(content);
10
+ default:
11
+ return content;
12
+ }
13
+ }
14
+ export function encodeContent(content, contentEncoding) {
15
+ switch (contentEncoding) {
16
+ case 'gzip':
17
+ return gzipSync(content);
18
+ case 'br':
19
+ return brotliCompressSync(content);
20
+ case 'deflate':
21
+ return inflateSync(content);
22
+ default:
23
+ return content;
24
+ }
25
+ }
26
+ //# sourceMappingURL=content-encoding.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-encoding.helper.js","sourceRoot":"","sources":["../../../src/lib/helpers/content-encoding.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAE/G,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,eAAwB;IACrE,QAAQ,eAAe,EAAE;QACvB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5B,KAAK,IAAI;YACP,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEvC,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAE9B;YACE,OAAO,OAAO,CAAC;KAClB;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,eAAwB;IACrE,QAAQ,eAAe,EAAE;QACvB,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,KAAK,IAAI;YACP,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAErC,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;QAE9B;YACE,OAAO,OAAO,CAAC;KAClB;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import * as express from 'express';
2
+ import * as winston from 'winston';
3
+ import * as memoryCache from 'memory-cache';
4
+ import type { CacheItem } from '../proxy-cache.middleware.js';
5
+ declare module 'express' {
6
+ interface Express {
7
+ cache?: memoryCache.CacheClass<string, CacheItem>;
8
+ config: {
9
+ logger: winston.Logger;
10
+ };
11
+ printUrls: (base?: string) => void;
12
+ }
13
+ }
14
+ export declare function createDevServer(logLevel?: string): express.Express;
@@ -0,0 +1,40 @@
1
+ import * as express from 'express';
2
+ import * as winston from 'winston';
3
+ import { createColors } from 'picocolors';
4
+ import { URL } from 'url';
5
+ const colors = createColors();
6
+ export function createDevServer(logLevel = 'info') {
7
+ const server = express.default();
8
+ const logger = winston.createLogger({
9
+ level: logLevel,
10
+ format: winston.format.cli({ level: true }),
11
+ transports: [new winston.transports.Console()],
12
+ });
13
+ server.config = {
14
+ logger,
15
+ };
16
+ const originalListen = server.listen;
17
+ let listener;
18
+ server.listen = function (...args) {
19
+ listener = originalListen.apply(this, args);
20
+ };
21
+ server.printUrls = function (base) {
22
+ if (!listener) {
23
+ throw new Error('Server is not listening');
24
+ }
25
+ const colorUrl = (url) => colors.cyan(url.replace(/:(\d+)\//, (_, port) => `:${colors.bold(port)}/`));
26
+ const address = listener.address();
27
+ if (address && typeof address === 'object') {
28
+ if (address.address === '::') {
29
+ const url = new URL(base || '', `http://localhost:${address.port}`);
30
+ logger.info(` ${colors.green('➜')} ${colors.bold('Local')}: ${colorUrl(url.toString())}`);
31
+ }
32
+ else {
33
+ const url = new URL(base || '', `http://[${address.address}]:${address.port}`);
34
+ logger.info(` ${colors.green('➜')} ${colors.bold('Local')}: ${colorUrl(url.toString())}`);
35
+ }
36
+ }
37
+ };
38
+ return server;
39
+ }
40
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/lib/helpers/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAY1B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAE9B,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAG,MAAM;IAC/C,MAAM,MAAM,GAAI,OAAe,CAAC,OAAO,EAAa,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QAClC,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC3C,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC/C,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,GAAG;QACd,MAAM;KACP,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAErC,IAAI,QAA+C,CAAC;IAEpD,MAAM,CAAC,MAAM,GAAG,UAAiC,GAAG,IAA2C;QAC7F,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAyB,CAAC;IAE1B,MAAM,CAAC,SAAS,GAAG,UAAU,IAAa;QACxC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QAED,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9G,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAEnC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC1C,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;gBAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAEpE,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/F;iBAAM;gBACL,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAE/E,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;aAC/F;SACF;IACH,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,3 +1,7 @@
1
+ import type { ServerResponse } from 'http';
1
2
  export declare const stringIsAValidUrl: (s: string, protocols: string[]) => boolean;
2
3
  export declare const urlReplacer: (originalHost: string, destinationHost: string, content: string) => string;
3
4
  export declare const urlPathReplacer: (urlPath: string, destinationPath: string, content: string) => string;
5
+ export declare const redirect: (res: ServerResponse, url: string, statusCode?: number) => void;
6
+ export declare function cutUrlParams(url: string): string;
7
+ export declare function cutUrlHash(url: string): string;
@@ -24,4 +24,17 @@ export const urlPathReplacer = (urlPath, destinationPath, content) => {
24
24
  const urlReplaceRegExp = new RegExp(`${urlPath.replace(/\\*\//gi, '\\\\/')}`, 'gi');
25
25
  return content.replace(urlReplaceRegExp, destinationPath);
26
26
  };
27
+ export const redirect = (res, url, statusCode) => {
28
+ res.setHeader('location', url);
29
+ res.statusCode = statusCode || 302;
30
+ res.end();
31
+ };
32
+ export function cutUrlParams(url) {
33
+ const urlParts = url.split('?');
34
+ return urlParts[0];
35
+ }
36
+ export function cutUrlHash(url) {
37
+ const urlParts = url.split('#');
38
+ return urlParts[0];
39
+ }
27
40
  //# sourceMappingURL=url.helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url.helper.js","sourceRoot":"","sources":["../../../src/lib/helpers/url.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,SAAmB,EAAE,EAAE;IAClE,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,SAAS,EAAE;YACb,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACxG;QAED,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAE,eAAuB,EAAE,OAAe,EAAE,EAAE;IAC5F,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,kCAAkC,YAAY,GAAG,EAAE,IAAI,CAAC,CAAC;IAE7F,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE;QAC9D,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;QAED,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAE,EAAE;IAC3F,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpF,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC,CAAC"}
1
+ {"version":3,"file":"url.helper.js","sourceRoot":"","sources":["../../../src/lib/helpers/url.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG1B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,SAAmB,EAAE,EAAE;IAClE,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1B,IAAI,SAAS,EAAE;YACb,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACxG;QAED,OAAO,IAAI,CAAC;KACb;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAE,eAAuB,EAAE,OAAe,EAAE,EAAE;IAC5F,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,kCAAkC,YAAY,GAAG,EAAE,IAAI,CAAC,CAAC;IAE7F,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE;QAC9D,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;QAED,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAE,EAAE;IAC3F,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAEpF,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAmB,EAAE,GAAW,EAAE,UAAmB,EAAE,EAAE;IAChF,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/B,GAAG,CAAC,UAAU,GAAG,UAAU,IAAI,GAAG,CAAC;IAEnC,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { PPDevConfig } from '../index.js';
2
+ import { Connect } from 'vite';
3
+ import NextHandleFunction = Connect.NextHandleFunction;
4
+ import { MiAPI } from './pp.middleware.js';
5
+ export declare function initLoadPPData(applyUrlRegExp: RegExp, mi: MiAPI, opts: PPDevConfig): NextHandleFunction;
@@ -0,0 +1,28 @@
1
+ import { cutUrlParams, redirect } from './helpers/url.helper.js';
2
+ export function initLoadPPData(applyUrlRegExp, mi, opts) {
3
+ const { templateLess = false, miHudLess = false, portalPageId } = opts;
4
+ return (req, res, next) => {
5
+ const isNeedTemplateLoad = !(templateLess && miHudLess);
6
+ const isApplyRequest = applyUrlRegExp.test(cutUrlParams(req.url ?? ''));
7
+ if (isNeedTemplateLoad && isApplyRequest) {
8
+ const headers = (req.headers ?? {});
9
+ const loadPageData = !templateLess && typeof portalPageId !== 'undefined'
10
+ ? mi.getPageVariables(portalPageId, headers)
11
+ : mi.getPageTemplate(headers);
12
+ loadPageData
13
+ .then(() => {
14
+ next();
15
+ })
16
+ .catch((reason) => {
17
+ if (reason.response) {
18
+ return redirect(res, `/home?proxyRedirect=${encodeURIComponent('/')}`, 302);
19
+ }
20
+ next(reason);
21
+ });
22
+ }
23
+ else {
24
+ next();
25
+ }
26
+ };
27
+ }
28
+ //# sourceMappingURL=load-pp-data.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-pp-data.middleware.js","sourceRoot":"","sources":["../../src/lib/load-pp-data.middleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,UAAU,cAAc,CAAC,cAAsB,EAAE,EAAS,EAAE,IAAiB;IACjF,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAEvE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC;QACxD,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAExE,IAAI,kBAAkB,IAAI,cAAc,EAAE;YACxC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAY,CAAC;YAE/C,MAAM,YAAY,GAChB,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,WAAW;gBAClD,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC;gBAC5C,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAElC,YAAY;iBACT,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,EAAE,CAAC;YACT,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChB,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACnB,OAAO,QAAQ,CAAC,GAAG,EAAE,uBAAuB,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;iBAC7E;gBAED,IAAI,CAAC,MAAM,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;SACN;aAAM;YACL,IAAI,EAAE,CAAC;SACR;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Connect } from 'vite';
2
+ import NextHandleFunction = Connect.NextHandleFunction;
3
+ export declare function initPPRedirect(base: string, templateName?: string): NextHandleFunction;
@@ -0,0 +1,21 @@
1
+ import { redirect } from './helpers/url.helper.js';
2
+ import { URL } from 'url';
3
+ export function initPPRedirect(base, templateName) {
4
+ base = base.startsWith('/') ? base : `/${base}`;
5
+ base = base.endsWith('/') ? base : `${base}/`;
6
+ const baseWithoutTrailingSlash = base.endsWith('/') ? base.slice(0, -1) : base;
7
+ return (req, res, next) => {
8
+ const parsedUrl = new URL(req.url ?? '', 'http://localhost');
9
+ const { pathname, search } = parsedUrl;
10
+ const findPaths = ['/', baseWithoutTrailingSlash];
11
+ if (templateName) {
12
+ findPaths.push(`/pt/${templateName}`);
13
+ }
14
+ if (findPaths.includes(pathname)) {
15
+ const redirectUrl = `${base}${search}`;
16
+ return redirect(res, redirectUrl, 302);
17
+ }
18
+ next();
19
+ };
20
+ }
21
+ //# sourceMappingURL=pp-redirect.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pp-redirect.middleware.js","sourceRoot":"","sources":["../../src/lib/pp-redirect.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,YAAqB;IAChE,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IAE9C,MAAM,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/E,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC7D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAElD,IAAI,YAAY,EAAE;YAChB,SAAS,CAAC,IAAI,CAAC,OAAO,YAAY,EAAE,CAAC,CAAC;SACvC;QAGD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAChC,MAAM,WAAW,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;YAEvC,OAAO,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;SACxC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -1,15 +1,27 @@
1
1
  /// <reference types="node" />
2
2
  export type Headers = Record<string, string | undefined>;
3
+ export interface MiAPIOptions {
4
+ portalPageId?: number;
5
+ headers?: Headers;
6
+ templateLess: boolean;
7
+ }
3
8
  export declare class MiAPI {
4
9
  #private;
5
- constructor(baseURL: string, opts?: {
6
- headers?: Headers;
7
- });
10
+ private portalPageId?;
11
+ private templateLess?;
12
+ private assetsApi;
13
+ private pageApi;
14
+ constructor(baseURL: string, opts?: MiAPIOptions);
8
15
  isTemplateLoaded(): Promise<boolean>;
16
+ updateHeaders(headers: Headers): void;
9
17
  getPageTemplate(headers: Headers): Promise<string>;
10
18
  getPageVariables(pageId: number, headers: Headers): Promise<{
11
19
  name: string;
12
20
  value: string;
13
21
  }[]>;
14
22
  buildPage(content: string | Buffer, miHudLess?: boolean): string;
23
+ getAssets(): Promise<Buffer | undefined>;
24
+ updateAssets(assets: Buffer): Promise<{
25
+ status?: "OK" | undefined;
26
+ } | undefined>;
15
27
  }
@@ -1,5 +1,6 @@
1
1
  import axios from 'axios';
2
2
  import { JSDOM } from 'jsdom';
3
+ import { AssetsAPI, PageAPI } from '../api/index.js';
3
4
  export class MiAPI {
4
5
  #headers;
5
6
  #axios;
@@ -8,8 +9,12 @@ export class MiAPI {
8
9
  #pageVars;
9
10
  #templateLoaded;
10
11
  #templateLoadedResolve;
12
+ portalPageId;
13
+ templateLess;
14
+ assetsApi;
15
+ pageApi;
11
16
  constructor(baseURL, opts) {
12
- const { headers = {} } = opts || {};
17
+ const { headers = {}, portalPageId, templateLess = true } = opts || {};
13
18
  this.#headers = headers;
14
19
  this.#pageVars = [];
15
20
  this.#pageTitle = '';
@@ -17,6 +22,10 @@ export class MiAPI {
17
22
  this.#templateLoadedResolve = resolve;
18
23
  });
19
24
  this.#axios = axios.create({ baseURL, headers });
25
+ this.portalPageId = portalPageId;
26
+ this.templateLess = templateLess;
27
+ this.assetsApi = new AssetsAPI(this.#axios);
28
+ this.pageApi = new PageAPI(this.#axios);
20
29
  }
21
30
  async isTemplateLoaded() {
22
31
  return this.#templateLoaded;
@@ -24,49 +33,34 @@ export class MiAPI {
24
33
  #clearHeaders(headers) {
25
34
  const obj = Object.assign({}, headers, { host: undefined });
26
35
  Object.keys(obj).forEach((key) => obj[key] === undefined && delete obj[key]);
36
+ this.#headers = obj;
27
37
  return obj;
28
38
  }
39
+ updateHeaders(headers) {
40
+ this.#clearHeaders(headers);
41
+ }
29
42
  async getPageTemplate(headers) {
30
43
  if (this.#pageTemplate) {
31
44
  return Promise.resolve(this.#pageTemplate);
32
45
  }
33
- const pageList = await this.#axios
34
- .get('/api/page', {
35
- withCredentials: true,
36
- headers: Object.assign(this.#clearHeaders(headers), {
37
- accept: 'application/json',
38
- 'content-type': 'application/json',
39
- }),
40
- })
41
- .then((response) => response.data);
42
- let page = pageList.pages.find((p) => p.name === '[DEV PAGE. DO NOT DELETE]');
46
+ if (typeof this.templateLess === 'undefined') {
47
+ this.templateLess = false;
48
+ }
49
+ const pageList = await this.pageApi.getAll(this.#clearHeaders(headers));
50
+ let page = pageList.find((p) => p.name === '[DEV PAGE. DO NOT DELETE]');
43
51
  if (!page) {
44
- page = await this.#axios
45
- .post('/api/page/', {
52
+ page = await this.pageApi.create({
46
53
  enabled: 'Y',
47
54
  name: '[DEV PAGE. DO NOT DELETE]',
48
55
  internal_name: 'dev-page-template',
49
56
  visible_in_homepage: 'Y',
50
- }, {
51
- withCredentials: true,
52
- headers: Object.assign(this.#clearHeaders(headers), {
53
- accept: 'application/json',
54
- 'content-type': 'application/json',
55
- }),
56
- })
57
- .then((response) => response.data.page);
57
+ }, this.#clearHeaders(headers));
58
58
  }
59
- return await this.#axios
60
- .get(`/p/${page.internal_name}`, {
61
- withCredentials: true,
62
- headers: Object.assign(this.#clearHeaders(headers), {
63
- accept: 'text/html',
64
- 'content-type': 'application/json',
65
- }),
66
- })
59
+ return await this.pageApi
60
+ .getPageContent(page.internal_name, this.#clearHeaders(headers))
67
61
  .then((response) => {
68
- this.#pageTemplate = response.data;
69
- return response.data;
62
+ this.#pageTemplate = response;
63
+ return response;
70
64
  })
71
65
  .finally(() => {
72
66
  this.#templateLoadedResolve(true);
@@ -74,19 +68,14 @@ export class MiAPI {
74
68
  }
75
69
  async getPageVariables(pageId, headers) {
76
70
  this.#pageTemplate = await this.getPageTemplate(headers);
77
- return await this.#axios
78
- .get(`/api/page/id/${pageId}`, {
79
- withCredentials: true,
80
- headers: Object.assign(this.#clearHeaders(headers), {
81
- accept: 'application/json',
82
- 'content-type': 'application/json',
83
- 'cache-control': 'no-cache',
84
- pragma: 'no-cache',
85
- expires: '0',
86
- }),
87
- })
71
+ if (!this.portalPageId) {
72
+ this.portalPageId = pageId;
73
+ this.templateLess = false;
74
+ }
75
+ return await this.pageApi
76
+ .get(pageId, this.#clearHeaders(headers))
88
77
  .then((response) => {
89
- const { page: { tags = '[]', name, template }, } = response.data;
78
+ const { tags = '[]', name, template } = response;
90
79
  if (template && tags) {
91
80
  const parsed = JSON.parse(tags);
92
81
  this.#pageVars = parsed;
@@ -136,5 +125,31 @@ export class MiAPI {
136
125
  const serializedDom = dom.serialize();
137
126
  return serializedDom.replace(new RegExp(`<div>\\s*${placeholderText}\\s*<\\/div>`, 'i'), result);
138
127
  }
128
+ async getAssets() {
129
+ if (this.portalPageId) {
130
+ if (this.templateLess) {
131
+ return await this.assetsApi.downloadPageAssets(this.portalPageId, this.#headers);
132
+ }
133
+ else {
134
+ const pageInfo = await this.pageApi.get(this.portalPageId, this.#headers);
135
+ if (pageInfo.template) {
136
+ return await this.assetsApi.downloadTemplateAssets(pageInfo.template, this.#headers);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ async updateAssets(assets) {
142
+ if (this.portalPageId) {
143
+ if (this.templateLess) {
144
+ return await this.assetsApi.uploadPageAssets(this.portalPageId, assets, this.#headers);
145
+ }
146
+ else {
147
+ const pageInfo = await this.pageApi.get(this.portalPageId, this.#headers);
148
+ if (pageInfo.template) {
149
+ return await this.assetsApi.uploadTemplateAssets(pageInfo.template, assets, this.#headers);
150
+ }
151
+ }
152
+ }
153
+ }
139
154
  }
140
155
  //# sourceMappingURL=pp.middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pp.middleware.js","sourceRoot":"","sources":["../../src/lib/pp.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pp.middleware.js","sourceRoot":"","sources":["../../src/lib/pp.middleware.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  import { Connect, ViteDevServer } from 'vite';
2
2
  import * as memoryCache from 'memory-cache';
3
3
  import NextHandleFunction = Connect.NextHandleFunction;
4
- export interface ProxyCacheOpts {
5
- viteDevServer: ViteDevServer;
6
- ttl?: number;
7
- }
4
+ import { Express } from 'express';
8
5
  export interface CacheItem {
9
6
  headers: Record<string, any>;
10
7
  content: any;
11
8
  }
9
+ export interface ProxyCacheOpts {
10
+ devServer: ViteDevServer | Express;
11
+ ttl?: number;
12
+ }
12
13
  declare module 'vite' {
13
14
  interface ViteDevServer {
14
15
  cache?: memoryCache.CacheClass<string, CacheItem>;
@@ -3,14 +3,14 @@ import { PROXY_HEADER } from './proxy-pass.middleware.js';
3
3
  const cache = new memoryCache.Cache();
4
4
  const testCacheUrlRegExp = /\.[a-z0-9]+$/i;
5
5
  export function initProxyCache(opts) {
6
- const { viteDevServer, ttl = 10 * 60 * 1000 } = opts;
7
- viteDevServer.cache = cache;
6
+ const { devServer, ttl = 10 * 60 * 1000 } = opts;
7
+ devServer.cache = cache;
8
8
  return (req, res, next) => {
9
9
  const url = req.originalUrl || req.url || '';
10
10
  if (testCacheUrlRegExp.test(url.split('?')[0] || '')) {
11
11
  const cacheItem = cache.get(url);
12
- if (cacheItem) {
13
- viteDevServer.config.logger.info(`Proxies request: ${req.method} ${url} -> Cache ${url}`);
12
+ if (cacheItem && devServer.config) {
13
+ devServer.config.logger.info(`Proxies request: ${req.method} ${url} -> Cache ${url}`);
14
14
  for (const [header, value] of Object.entries(cacheItem.headers)) {
15
15
  res.setHeader(header, value);
16
16
  }
@@ -39,7 +39,7 @@ export function initProxyCache(opts) {
39
39
  buffer = Buffer.concat([buffer, chunk]);
40
40
  }
41
41
  if (res.hasHeader(PROXY_HEADER)) {
42
- viteDevServer.config.logger?.info(`[Cached] ${url}`);
42
+ devServer.config.logger?.info(`[Cached] ${url}`);
43
43
  cache.put(url, { headers: res.getHeaders(), content: buffer }, ttl);
44
44
  }
45
45
  end.call(this, buffer, encoding, cb);