@stencil/core 2.9.0 → 2.12.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/cli/index.cjs +16 -5
- package/cli/index.js +16 -5
- package/cli/package.json +1 -1
- package/compiler/lib.dom.d.ts +263 -648
- package/compiler/lib.dom.iterable.d.ts +1 -5
- package/compiler/lib.es2015.core.d.ts +2 -2
- package/compiler/lib.es2015.iterable.d.ts +1 -1
- package/compiler/lib.es2015.symbol.wellknown.d.ts +10 -10
- package/compiler/lib.es2018.asynciterable.d.ts +1 -1
- package/compiler/lib.es2020.bigint.d.ts +1 -1
- package/compiler/lib.es2020.intl.d.ts +6 -7
- package/compiler/lib.es2020.symbol.wellknown.d.ts +1 -1
- package/compiler/lib.es2021.d.ts +24 -0
- package/compiler/lib.es2021.full.d.ts +25 -0
- package/compiler/lib.es2021.promise.d.ts +43 -0
- package/compiler/lib.es2021.string.d.ts +35 -0
- package/compiler/lib.es2021.weakref.d.ts +75 -0
- package/compiler/lib.es5.d.ts +9 -9
- package/compiler/lib.esnext.d.ts +1 -4
- package/compiler/lib.esnext.promise.d.ts +26 -26
- package/compiler/lib.esnext.string.d.ts +18 -18
- package/compiler/lib.esnext.weakref.d.ts +58 -58
- package/compiler/lib.webworker.d.ts +98 -153
- package/compiler/lib.webworker.iterable.d.ts +1 -1
- package/compiler/package.json +1 -1
- package/compiler/stencil.js +497 -725
- package/compiler/stencil.min.js +2 -2
- package/dependencies.json +6 -1
- package/dev-server/client/index.js +1 -1
- package/dev-server/client/package.json +1 -1
- package/dev-server/connector.html +2 -2
- package/dev-server/index.js +1 -1
- package/dev-server/package.json +1 -1
- package/dev-server/server-process.js +2 -2
- package/internal/app-data/package.json +1 -1
- package/internal/client/css-shim.js +1 -1
- package/internal/client/dom.js +1 -1
- package/internal/client/index.js +119 -102
- package/internal/client/package.json +1 -1
- package/internal/client/patch-browser.js +1 -1
- package/internal/client/patch-esm.js +1 -1
- package/internal/client/shadow-css.js +9 -10
- package/internal/hydrate/index.js +44 -40
- package/internal/hydrate/package.json +1 -1
- package/internal/hydrate/shadow-css.js +59 -62
- package/internal/index.js +1 -0
- package/internal/package.json +1 -1
- package/internal/stencil-public-compiler.d.ts +1 -1
- package/internal/testing/index.js +54 -47
- package/internal/testing/package.json +1 -1
- package/internal/testing/shadow-css.js +54 -57
- package/mock-doc/index.cjs +5 -2
- package/mock-doc/index.d.ts +6 -6
- package/mock-doc/index.js +5 -2
- package/mock-doc/package.json +1 -1
- package/package.json +17 -9
- package/screenshot/index.js +1 -1
- package/screenshot/package.json +1 -1
- package/sys/node/autoprefixer.js +2 -2
- package/sys/node/index.js +1 -1
- package/sys/node/package.json +1 -1
- package/sys/node/worker.js +1 -1
- package/testing/index.js +84 -73
- package/testing/jest/jest-environment.d.ts +1 -0
- package/testing/jest/jest-preprocessor.d.ts +56 -8
- package/testing/jest-preset.js +5 -0
- package/testing/mocks.d.ts +1 -5
- package/testing/package.json +1 -1
- package/testing/testing-sys.d.ts +6 -1
- package/screenshot/index.js.map +0 -1
package/sys/node/index.js
CHANGED
package/sys/node/package.json
CHANGED
package/sys/node/worker.js
CHANGED
package/testing/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
Stencil Testing v2.
|
|
2
|
+
Stencil Testing v2.12.0 | MIT Licensed | https://stenciljs.com
|
|
3
3
|
*/
|
|
4
4
|
function _lazyRequire(e) {
|
|
5
5
|
return new Proxy({}, {
|
|
@@ -205,6 +205,64 @@ function formatDiagnostic(e) {
|
|
|
205
205
|
t;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
+
function getCompilerOptions(e) {
|
|
209
|
+
if (_tsCompilerOptions) return _tsCompilerOptions;
|
|
210
|
+
if ("string" != typeof e) return null;
|
|
211
|
+
e = normalizePath(e);
|
|
212
|
+
const t = stencil_js.ts.findConfigFile(e, stencil_js.ts.sys.fileExists);
|
|
213
|
+
if (!t) return null;
|
|
214
|
+
const r = stencil_js.ts.readConfigFile(t, stencil_js.ts.sys.readFile);
|
|
215
|
+
if (r.error) throw new Error(formatDiagnostic((e => {
|
|
216
|
+
const t = {
|
|
217
|
+
level: "warn",
|
|
218
|
+
type: "typescript",
|
|
219
|
+
language: "typescript",
|
|
220
|
+
header: "TypeScript",
|
|
221
|
+
code: e.code.toString(),
|
|
222
|
+
messageText: flattenDiagnosticMessageText(e, e.messageText),
|
|
223
|
+
relFilePath: null,
|
|
224
|
+
absFilePath: null,
|
|
225
|
+
lines: []
|
|
226
|
+
};
|
|
227
|
+
if (1 === e.category && (t.level = "error"), e.file) {
|
|
228
|
+
t.absFilePath = e.file.fileName;
|
|
229
|
+
const s = "string" != typeof (r = e.file.text) ? [] : (r = r.replace(/\\r/g, "\n")).split("\n"), n = e.file.getLineAndCharacterOfPosition(e.start), i = {
|
|
230
|
+
lineIndex: n.line,
|
|
231
|
+
lineNumber: n.line + 1,
|
|
232
|
+
text: s[n.line],
|
|
233
|
+
errorCharStart: n.character,
|
|
234
|
+
errorLength: Math.max(e.length, 1)
|
|
235
|
+
};
|
|
236
|
+
if (t.lineNumber = i.lineNumber, t.columnNumber = i.errorCharStart + 1, t.lines.push(i),
|
|
237
|
+
0 === i.errorLength && i.errorCharStart > 0 && (i.errorLength = 1, i.errorCharStart--),
|
|
238
|
+
i.lineIndex > 0) {
|
|
239
|
+
const e = {
|
|
240
|
+
lineIndex: i.lineIndex - 1,
|
|
241
|
+
lineNumber: i.lineNumber - 1,
|
|
242
|
+
text: s[i.lineIndex - 1],
|
|
243
|
+
errorCharStart: -1,
|
|
244
|
+
errorLength: -1
|
|
245
|
+
};
|
|
246
|
+
t.lines.unshift(e);
|
|
247
|
+
}
|
|
248
|
+
if (i.lineIndex + 1 < s.length) {
|
|
249
|
+
const e = {
|
|
250
|
+
lineIndex: i.lineIndex + 1,
|
|
251
|
+
lineNumber: i.lineNumber + 1,
|
|
252
|
+
text: s[i.lineIndex + 1],
|
|
253
|
+
errorCharStart: -1,
|
|
254
|
+
errorLength: -1
|
|
255
|
+
};
|
|
256
|
+
t.lines.push(e);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
var r;
|
|
260
|
+
return t;
|
|
261
|
+
})(r.error)));
|
|
262
|
+
const s = stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t);
|
|
263
|
+
return _tsCompilerOptions = s.options, _tsCompilerOptions;
|
|
264
|
+
}
|
|
265
|
+
|
|
208
266
|
function compareHtml(e, t, r) {
|
|
209
267
|
if (null == e) throw new Error(`expect toEqualHtml() value is "${e}"`);
|
|
210
268
|
if ("function" == typeof e.then) throw new Error("element must be a resolved value, not a promise, before it can be tested");
|
|
@@ -1235,9 +1293,13 @@ const path$2 = require("path"), index_js = _lazyRequire("../dev-server/index.js"
|
|
|
1235
1293
|
if (!r.includes(t.code) && (n = t.messageText, isIterable(t.next))) for (const r of t.next) n += flattenDiagnosticMessageText(e, r);
|
|
1236
1294
|
return s && (n = n.replace("type 'StencilConfig'", "Stencil Config"), n = n.replace("Object literal may only specify known properties, but ", ""),
|
|
1237
1295
|
n = n.replace("Object literal may only specify known properties, and ", "")), n.trim();
|
|
1238
|
-
}, isOutputTargetDistLazy = e => e.type === DIST_LAZY, isOutputTargetWww = e => e.type === WWW, DIST_LAZY = "dist-lazy", WWW = "www",
|
|
1239
|
-
|
|
1240
|
-
|
|
1296
|
+
}, isOutputTargetDistLazy = e => e.type === DIST_LAZY, isOutputTargetWww = e => e.type === WWW, DIST_LAZY = "dist-lazy", WWW = "www", isJest27TransformOptions = e => "object" == typeof e && e.hasOwnProperty("config");
|
|
1297
|
+
|
|
1298
|
+
let _tsCompilerOptions = null, _tsCompilerOptionsKey = null;
|
|
1299
|
+
|
|
1300
|
+
const jestPreprocessor = {
|
|
1301
|
+
process(e, t, r, s) {
|
|
1302
|
+
if (isJest27TransformOptions(r) && (s = r.config), function n(e, t) {
|
|
1241
1303
|
const r = e.split(".").pop().toLowerCase().split("?")[0];
|
|
1242
1304
|
if ("ts" === r || "tsx" === r || "jsx" === r) return !0;
|
|
1243
1305
|
if ("mjs" === r) return !0;
|
|
@@ -1247,12 +1309,12 @@ const path$2 = require("path"), index_js = _lazyRequire("../dev-server/index.js"
|
|
|
1247
1309
|
}
|
|
1248
1310
|
return "css" === r;
|
|
1249
1311
|
}(t, e)) {
|
|
1250
|
-
const
|
|
1312
|
+
const r = {
|
|
1251
1313
|
file: t,
|
|
1252
|
-
currentDirectory:
|
|
1253
|
-
}, n =
|
|
1254
|
-
n && (n.baseUrl && (
|
|
1255
|
-
const i = transpile(e,
|
|
1314
|
+
currentDirectory: s.rootDir
|
|
1315
|
+
}, n = getCompilerOptions(s.rootDir);
|
|
1316
|
+
n && (n.baseUrl && (r.baseUrl = n.baseUrl), n.paths && (r.paths = n.paths));
|
|
1317
|
+
const i = transpile(e, r), o = i.diagnostics.some((e => "error" === e.level));
|
|
1256
1318
|
if (i.diagnostics && o) {
|
|
1257
1319
|
const e = i.diagnostics.map(formatDiagnostic).join("\n\n");
|
|
1258
1320
|
throw new Error(e);
|
|
@@ -1261,69 +1323,12 @@ const path$2 = require("path"), index_js = _lazyRequire("../dev-server/index.js"
|
|
|
1261
1323
|
}
|
|
1262
1324
|
return e;
|
|
1263
1325
|
},
|
|
1264
|
-
getCompilerOptions(e) {
|
|
1265
|
-
return this._tsCompilerOptions || (this._tsCompilerOptions = function t(e) {
|
|
1266
|
-
if ("string" != typeof e) return null;
|
|
1267
|
-
e = normalizePath(e);
|
|
1268
|
-
const t = stencil_js.ts.findConfigFile(e, stencil_js.ts.sys.fileExists);
|
|
1269
|
-
if (!t) return null;
|
|
1270
|
-
const r = stencil_js.ts.readConfigFile(t, stencil_js.ts.sys.readFile);
|
|
1271
|
-
if (r.error) throw new Error(formatDiagnostic((e => {
|
|
1272
|
-
const t = {
|
|
1273
|
-
level: "warn",
|
|
1274
|
-
type: "typescript",
|
|
1275
|
-
language: "typescript",
|
|
1276
|
-
header: "TypeScript",
|
|
1277
|
-
code: e.code.toString(),
|
|
1278
|
-
messageText: flattenDiagnosticMessageText(e, e.messageText),
|
|
1279
|
-
relFilePath: null,
|
|
1280
|
-
absFilePath: null,
|
|
1281
|
-
lines: []
|
|
1282
|
-
};
|
|
1283
|
-
if (1 === e.category && (t.level = "error"), e.file) {
|
|
1284
|
-
t.absFilePath = e.file.fileName;
|
|
1285
|
-
const s = "string" != typeof (r = e.file.text) ? [] : (r = r.replace(/\\r/g, "\n")).split("\n"), n = e.file.getLineAndCharacterOfPosition(e.start), i = {
|
|
1286
|
-
lineIndex: n.line,
|
|
1287
|
-
lineNumber: n.line + 1,
|
|
1288
|
-
text: s[n.line],
|
|
1289
|
-
errorCharStart: n.character,
|
|
1290
|
-
errorLength: Math.max(e.length, 1)
|
|
1291
|
-
};
|
|
1292
|
-
if (t.lineNumber = i.lineNumber, t.columnNumber = i.errorCharStart + 1, t.lines.push(i),
|
|
1293
|
-
0 === i.errorLength && i.errorCharStart > 0 && (i.errorLength = 1, i.errorCharStart--),
|
|
1294
|
-
i.lineIndex > 0) {
|
|
1295
|
-
const e = {
|
|
1296
|
-
lineIndex: i.lineIndex - 1,
|
|
1297
|
-
lineNumber: i.lineNumber - 1,
|
|
1298
|
-
text: s[i.lineIndex - 1],
|
|
1299
|
-
errorCharStart: -1,
|
|
1300
|
-
errorLength: -1
|
|
1301
|
-
};
|
|
1302
|
-
t.lines.unshift(e);
|
|
1303
|
-
}
|
|
1304
|
-
if (i.lineIndex + 1 < s.length) {
|
|
1305
|
-
const e = {
|
|
1306
|
-
lineIndex: i.lineIndex + 1,
|
|
1307
|
-
lineNumber: i.lineNumber + 1,
|
|
1308
|
-
text: s[i.lineIndex + 1],
|
|
1309
|
-
errorCharStart: -1,
|
|
1310
|
-
errorLength: -1
|
|
1311
|
-
};
|
|
1312
|
-
t.lines.push(e);
|
|
1313
|
-
}
|
|
1314
|
-
}
|
|
1315
|
-
var r;
|
|
1316
|
-
return t;
|
|
1317
|
-
})(r.error)));
|
|
1318
|
-
return stencil_js.ts.parseJsonConfigFileContent(r.config, stencil_js.ts.sys, e, void 0, t).options;
|
|
1319
|
-
}(e)), this._tsCompilerOptions;
|
|
1320
|
-
},
|
|
1321
1326
|
getCacheKey(e, t, r, s) {
|
|
1322
|
-
if (!
|
|
1323
|
-
const e =
|
|
1324
|
-
|
|
1327
|
+
if (isJest27TransformOptions(r) && (s = r.config), !_tsCompilerOptionsKey) {
|
|
1328
|
+
const e = getCompilerOptions(s.rootDir);
|
|
1329
|
+
_tsCompilerOptionsKey = JSON.stringify(e);
|
|
1325
1330
|
}
|
|
1326
|
-
return [ process.version,
|
|
1331
|
+
return [ process.version, _tsCompilerOptionsKey, e, t, r, !!s.instrument, 7 ].join(":");
|
|
1327
1332
|
}
|
|
1328
1333
|
}, deepEqual = function e(t, r) {
|
|
1329
1334
|
var s, n, i, o, a, l, c, u, d, h;
|
|
@@ -2858,7 +2863,7 @@ const createSystem = e => {
|
|
|
2858
2863
|
u("/");
|
|
2859
2864
|
const S = {
|
|
2860
2865
|
name: "in-memory",
|
|
2861
|
-
version: "2.
|
|
2866
|
+
version: "2.12.0",
|
|
2862
2867
|
events: o,
|
|
2863
2868
|
access: async e => c(e),
|
|
2864
2869
|
accessSync: c,
|
|
@@ -3141,7 +3146,7 @@ const createSystem = e => {
|
|
|
3141
3146
|
const r = e;
|
|
3142
3147
|
return (...e) => (t++, r.apply(r, e));
|
|
3143
3148
|
};
|
|
3144
|
-
|
|
3149
|
+
if (r.access = s(r.access), r.accessSync = s(r.accessSync), r.homeDir = s(r.homeDir),
|
|
3145
3150
|
r.readFile = s(r.readFile), r.readFileSync = s(r.readFileSync), r.readDir = s(r.readDir),
|
|
3146
3151
|
r.readDirSync = s(r.readDirSync), r.stat = s(r.stat), r.statSync = s(r.statSync),
|
|
3147
3152
|
r.copyFile = n(r.copyFile), r.createDir = n(r.createDir), r.createDirSync = n(r.createDirSync),
|
|
@@ -3159,7 +3164,10 @@ const createSystem = e => {
|
|
|
3159
3164
|
t = e;
|
|
3160
3165
|
}
|
|
3161
3166
|
}
|
|
3162
|
-
})
|
|
3167
|
+
}), !function i(e) {
|
|
3168
|
+
return "diskReads" in e && "diskWrites" in e;
|
|
3169
|
+
}(r)) throw new Error("could not generate TestingSystem");
|
|
3170
|
+
return r;
|
|
3163
3171
|
};
|
|
3164
3172
|
|
|
3165
3173
|
class TestingLogger {
|
|
@@ -3589,6 +3597,9 @@ exports.createJestPuppeteerEnvironment = function createJestPuppeteerEnvironment
|
|
|
3589
3597
|
} catch (e) {}
|
|
3590
3598
|
}(this.browser), this.browser = null;
|
|
3591
3599
|
}
|
|
3600
|
+
getVmContext() {
|
|
3601
|
+
return super.getVmContext();
|
|
3602
|
+
}
|
|
3592
3603
|
};
|
|
3593
3604
|
}, exports.createTestRunner = function createTestRunner() {
|
|
3594
3605
|
const e = require("jest-runner");
|
|
@@ -1,11 +1,59 @@
|
|
|
1
|
+
declare type Jest26CacheKeyOptions = {
|
|
2
|
+
instrument: boolean;
|
|
3
|
+
rootDir: string;
|
|
4
|
+
};
|
|
5
|
+
declare type Jest26Config = {
|
|
6
|
+
instrument: boolean;
|
|
7
|
+
rootDir: string;
|
|
8
|
+
};
|
|
9
|
+
declare type Jest27TransformOptions = {
|
|
10
|
+
config: Jest26Config;
|
|
11
|
+
};
|
|
1
12
|
export declare const jestPreprocessor: {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Transforms a file to CommonJS to be used by Jest. The API for `process` is described in the
|
|
15
|
+
* ["Writing custom transformers"](https://jestjs.io/docs/code-transformation#writing-custom-transformers)
|
|
16
|
+
* documentation on the jest site. Unfortunately, the URL is not versioned at the time of this writing. For
|
|
17
|
+
* reference, the v27.2 docs were referenced (the most recent available).
|
|
18
|
+
*
|
|
19
|
+
* This function attempts to support several versions of Jest (v23 through v27). Support for earlier versions of Jest
|
|
20
|
+
* will be removed in a future major version of Stencil.
|
|
21
|
+
*
|
|
22
|
+
* @param sourceText the contents of the source file
|
|
23
|
+
* @param sourcePath the path to the source file
|
|
24
|
+
* @param jestConfig the jest configuration when called by Jest 26 and lower. This parameter is folded into
|
|
25
|
+
* `transformOptions` when called by Jest 27+ as a top level `config` property. Calls to this function from Jest 27+
|
|
26
|
+
* will have a `Jest27TransformOptions` shape
|
|
27
|
+
* @param transformOptions an object containing the various transformation options. In Jest 27+ this parameter occurs
|
|
28
|
+
* third in this function signature (and no fourth parameter is formally accepted)
|
|
29
|
+
* @returns the transformed file contents if the file should be transformed. returns the original source otherwise
|
|
30
|
+
*/
|
|
31
|
+
process(sourceText: string, sourcePath: string, jestConfig: Jest26Config | Jest27TransformOptions, transformOptions?: Jest26Config): string;
|
|
32
|
+
/**
|
|
33
|
+
* Generates a key used to cache the results of transforming a file. This helps avoid re-processing a file via the
|
|
34
|
+
* `transform` function unnecessarily (when no changes have occurred). The API for `getCacheKey` is described in the
|
|
35
|
+
* ["Writing custom transformers"](https://jestjs.io/docs/code-transformation#writing-custom-transformers)
|
|
36
|
+
* documentation on the jest site. Unfortunately, the URL is not versioned at the time of this writing. For
|
|
37
|
+
* reference, the v27.2 docs were referenced (the most recent available).
|
|
38
|
+
*
|
|
39
|
+
* This function attempts to support several versions of Jest (v23 through v27). Support for earlier versions of Jest
|
|
40
|
+
* will be removed in a future major version of Stencil.
|
|
41
|
+
*
|
|
42
|
+
* @param sourceText the contents of the source file
|
|
43
|
+
* @param sourcePath the path to the source file
|
|
44
|
+
* @param jestConfigStr a stringified version of the jest configuration when called by Jest 26 and lower. This
|
|
45
|
+
* parameter takes the shape of `transformOptions` when called by Jest 27+.
|
|
46
|
+
* @param transformOptions an object containing the various transformation options. In Jest 27+ this parameter occurs
|
|
47
|
+
* third in this function signature (and no fourth parameter is formally accepted)
|
|
48
|
+
* @returns the key to cache a file with
|
|
49
|
+
*/
|
|
50
|
+
getCacheKey(sourceText: string, sourcePath: string, jestConfigStr: string | Jest27TransformOptions, transformOptions?: Jest26CacheKeyOptions): string;
|
|
10
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Determines if a file should be transformed prior to being consumed by Jest, based on the file name and its contents
|
|
54
|
+
* @param filePath the path of the file
|
|
55
|
+
* @param sourceText the contents of the file
|
|
56
|
+
* @returns `true` if the file should be transformed, `false` otherwise
|
|
57
|
+
*/
|
|
11
58
|
export declare function shouldTransform(filePath: string, sourceText: string): boolean;
|
|
59
|
+
export {};
|
package/testing/jest-preset.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The path's declared below are relative. Specifically, they are relative to the location of this file after
|
|
3
|
+
* compilation of the Stencil compiler has completed. See `scripts/bundles/testing` for the location of this file
|
|
4
|
+
* following compilation.
|
|
5
|
+
*/
|
|
1
6
|
const path = require('path');
|
|
2
7
|
const testingDir = __dirname;
|
|
3
8
|
const rootDir = path.join(testingDir, '..');
|
package/testing/mocks.d.ts
CHANGED
|
@@ -5,10 +5,6 @@ export declare function mockCompilerCtx(config?: Config): CompilerCtx;
|
|
|
5
5
|
export declare function mockBuildCtx(config?: Config, compilerCtx?: CompilerCtx): BuildCtx;
|
|
6
6
|
export declare function mockCache(config?: Config, compilerCtx?: CompilerCtx): Cache;
|
|
7
7
|
export declare function mockLogger(): TestingLogger;
|
|
8
|
-
export
|
|
9
|
-
diskReads: number;
|
|
10
|
-
diskWrites: number;
|
|
11
|
-
}
|
|
12
|
-
export declare function mockStencilSystem(): TestingSystem;
|
|
8
|
+
export declare function mockStencilSystem(): CompilerSystem;
|
|
13
9
|
export declare function mockDocument(html?: string): Document;
|
|
14
10
|
export declare function mockWindow(html?: string): Window;
|
package/testing/package.json
CHANGED
package/testing/testing-sys.d.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { CompilerSystem } from '@stencil/core/internal';
|
|
2
|
+
export interface TestingSystem extends CompilerSystem {
|
|
3
|
+
diskReads: number;
|
|
4
|
+
diskWrites: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const createTestingSystem: () => TestingSystem;
|
package/screenshot/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../build/screenshot/screenshot-fs.js","../build/screenshot/connector-base.js","../build/utils/normalize-path.js","../build/screenshot/connector-local.js"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nexport async function writeScreenshotImage(imagePath, screenshotBuf) {\n const imageExists = await fileExists(imagePath);\n if (!imageExists) {\n await writeFile(imagePath, screenshotBuf);\n }\n}\nexport async function writeScreenshotData(dataDir, screenshotData) {\n const filePath = getDataFilePath(dataDir, screenshotData.id);\n const content = JSON.stringify(screenshotData, null, 2);\n await writeFile(filePath, content);\n}\nexport async function readScreenshotData(dataDir, screenshotId) {\n let rtn = null;\n try {\n const dataFilePath = getDataFilePath(dataDir, screenshotId);\n const dataContent = await readFile(dataFilePath);\n rtn = JSON.parse(dataContent);\n }\n catch (e) { }\n return rtn;\n}\nfunction getDataFilePath(dataDir, screenshotId) {\n const fileName = `${screenshotId}.json`;\n return path.join(dataDir, fileName);\n}\nexport function fileExists(filePath) {\n return new Promise((resolve) => {\n fs.access(filePath, (err) => resolve(!err));\n });\n}\nexport function readFile(filePath) {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf-8', (err, data) => {\n if (err) {\n reject(err);\n }\n else {\n resolve(data);\n }\n });\n });\n}\nexport function readFileBuffer(filePath) {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, (err, data) => {\n if (err) {\n reject(err);\n }\n else {\n resolve(data);\n }\n });\n });\n}\nexport function writeFile(filePath, data) {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, (err) => {\n if (err) {\n reject(err);\n }\n else {\n resolve();\n }\n });\n });\n}\nexport function mkDir(filePath) {\n return new Promise((resolve) => {\n fs.mkdir(filePath, () => {\n resolve();\n });\n });\n}\nexport function rmDir(filePath) {\n return new Promise((resolve) => {\n fs.rmdir(filePath, () => {\n resolve();\n });\n });\n}\nexport async function emptyDir(dir) {\n const files = await readDir(dir);\n const promises = files.map(async (fileName) => {\n const filePath = path.join(dir, fileName);\n const isDirFile = await isFile(filePath);\n if (isDirFile) {\n await unlink(filePath);\n }\n });\n await Promise.all(promises);\n}\nexport async function readDir(dir) {\n return new Promise((resolve) => {\n fs.readdir(dir, (err, files) => {\n if (err) {\n resolve([]);\n }\n else {\n resolve(files);\n }\n });\n });\n}\nexport async function isFile(itemPath) {\n return new Promise((resolve) => {\n fs.stat(itemPath, (err, stat) => {\n if (err) {\n resolve(false);\n }\n else {\n resolve(stat.isFile());\n }\n });\n });\n}\nexport async function unlink(filePath) {\n return new Promise((resolve) => {\n fs.unlink(filePath, () => {\n resolve();\n });\n });\n}\n","import { emptyDir, fileExists, mkDir, readDir, readFile, readFileBuffer, rmDir, writeFile } from './screenshot-fs';\nimport { join } from 'path';\nimport { tmpdir } from 'os';\nexport class ScreenshotConnector {\n constructor() {\n this.screenshotDirName = 'screenshot';\n this.imagesDirName = 'images';\n this.buildsDirName = 'builds';\n this.masterBuildFileName = 'master.json';\n this.screenshotCacheFileName = 'screenshot-cache.json';\n }\n async initBuild(opts) {\n this.logger = opts.logger;\n this.buildId = opts.buildId;\n this.buildMessage = opts.buildMessage || '';\n this.buildAuthor = opts.buildAuthor;\n this.buildUrl = opts.buildUrl;\n this.previewUrl = opts.previewUrl;\n (this.buildTimestamp = typeof opts.buildTimestamp === 'number' ? opts.buildTimestamp : Date.now()),\n (this.cacheDir = opts.cacheDir);\n this.packageDir = opts.packageDir;\n this.rootDir = opts.rootDir;\n this.appNamespace = opts.appNamespace;\n this.waitBeforeScreenshot = opts.waitBeforeScreenshot;\n this.pixelmatchModulePath = opts.pixelmatchModulePath;\n if (!opts.logger) {\n throw new Error(`logger option required`);\n }\n if (typeof opts.buildId !== 'string') {\n throw new Error(`buildId option required`);\n }\n if (typeof opts.cacheDir !== 'string') {\n throw new Error(`cacheDir option required`);\n }\n if (typeof opts.packageDir !== 'string') {\n throw new Error(`packageDir option required`);\n }\n if (typeof opts.rootDir !== 'string') {\n throw new Error(`rootDir option required`);\n }\n this.updateMaster = !!opts.updateMaster;\n this.allowableMismatchedPixels = opts.allowableMismatchedPixels;\n this.allowableMismatchedRatio = opts.allowableMismatchedRatio;\n this.pixelmatchThreshold = opts.pixelmatchThreshold;\n this.logger.debug(`screenshot build: ${this.buildId}, ${this.buildMessage}, updateMaster: ${this.updateMaster}`);\n this.logger.debug(`screenshot, allowableMismatchedPixels: ${this.allowableMismatchedPixels}, allowableMismatchedRatio: ${this.allowableMismatchedRatio}, pixelmatchThreshold: ${this.pixelmatchThreshold}`);\n if (typeof opts.screenshotDirName === 'string') {\n this.screenshotDirName = opts.screenshotDirName;\n }\n if (typeof opts.imagesDirName === 'string') {\n this.imagesDirName = opts.imagesDirName;\n }\n if (typeof opts.buildsDirName === 'string') {\n this.buildsDirName = opts.buildsDirName;\n }\n this.screenshotDir = join(this.rootDir, this.screenshotDirName);\n this.imagesDir = join(this.screenshotDir, this.imagesDirName);\n this.buildsDir = join(this.screenshotDir, this.buildsDirName);\n this.masterBuildFilePath = join(this.buildsDir, this.masterBuildFileName);\n this.screenshotCacheFilePath = join(this.cacheDir, this.screenshotCacheFileName);\n this.currentBuildDir = join(tmpdir(), 'screenshot-build-' + this.buildId);\n this.logger.debug(`screenshotDirPath: ${this.screenshotDir}`);\n this.logger.debug(`imagesDirPath: ${this.imagesDir}`);\n this.logger.debug(`buildsDirPath: ${this.buildsDir}`);\n this.logger.debug(`currentBuildDir: ${this.currentBuildDir}`);\n this.logger.debug(`cacheDir: ${this.cacheDir}`);\n await mkDir(this.screenshotDir);\n await Promise.all([\n mkDir(this.imagesDir),\n mkDir(this.buildsDir),\n mkDir(this.currentBuildDir),\n mkDir(this.cacheDir),\n ]);\n }\n async pullMasterBuild() {\n /**/\n }\n async getMasterBuild() {\n let masterBuild = null;\n try {\n masterBuild = JSON.parse(await readFile(this.masterBuildFilePath));\n }\n catch (e) { }\n return masterBuild;\n }\n async completeBuild(masterBuild) {\n const filePaths = (await readDir(this.currentBuildDir))\n .map((f) => join(this.currentBuildDir, f))\n .filter((f) => f.endsWith('.json'));\n const screenshots = await Promise.all(filePaths.map(async (f) => JSON.parse(await readFile(f))));\n this.sortScreenshots(screenshots);\n if (!masterBuild) {\n masterBuild = {\n id: this.buildId,\n message: this.buildMessage,\n author: this.buildAuthor,\n url: this.buildUrl,\n previewUrl: this.previewUrl,\n appNamespace: this.appNamespace,\n timestamp: this.buildTimestamp,\n screenshots: screenshots,\n };\n }\n const results = {\n appNamespace: this.appNamespace,\n masterBuild: masterBuild,\n currentBuild: {\n id: this.buildId,\n message: this.buildMessage,\n author: this.buildAuthor,\n url: this.buildUrl,\n previewUrl: this.previewUrl,\n appNamespace: this.appNamespace,\n timestamp: this.buildTimestamp,\n screenshots: screenshots,\n },\n compare: {\n id: `${masterBuild.id}-${this.buildId}`,\n a: {\n id: masterBuild.id,\n message: masterBuild.message,\n author: masterBuild.author,\n url: masterBuild.url,\n previewUrl: masterBuild.previewUrl,\n },\n b: {\n id: this.buildId,\n message: this.buildMessage,\n author: this.buildAuthor,\n url: this.buildUrl,\n previewUrl: this.previewUrl,\n },\n url: null,\n appNamespace: this.appNamespace,\n timestamp: this.buildTimestamp,\n diffs: [],\n },\n };\n results.currentBuild.screenshots.forEach((screenshot) => {\n screenshot.diff.device = screenshot.diff.device || screenshot.diff.userAgent;\n results.compare.diffs.push(screenshot.diff);\n delete screenshot.diff;\n });\n this.sortCompares(results.compare.diffs);\n await emptyDir(this.currentBuildDir);\n await rmDir(this.currentBuildDir);\n return results;\n }\n async publishBuild(results) {\n return results;\n }\n async generateJsonpDataUris(build) {\n if (build && Array.isArray(build.screenshots)) {\n for (let i = 0; i < build.screenshots.length; i++) {\n const screenshot = build.screenshots[i];\n const jsonpFileName = `screenshot_${screenshot.image}.js`;\n const jsonFilePath = join(this.cacheDir, jsonpFileName);\n const jsonpExists = await fileExists(jsonFilePath);\n if (!jsonpExists) {\n const imageFilePath = join(this.imagesDir, screenshot.image);\n const imageBuf = await readFileBuffer(imageFilePath);\n const jsonpContent = `loadScreenshot(\"${screenshot.image}\",\"data:image/png;base64,${imageBuf.toString('base64')}\");`;\n await writeFile(jsonFilePath, jsonpContent);\n }\n }\n }\n }\n async getScreenshotCache() {\n return null;\n }\n async updateScreenshotCache(screenshotCache, buildResults) {\n screenshotCache = screenshotCache || {};\n screenshotCache.timestamp = this.buildTimestamp;\n screenshotCache.lastBuildId = this.buildId;\n screenshotCache.size = 0;\n screenshotCache.items = screenshotCache.items || [];\n if (buildResults && buildResults.compare && Array.isArray(buildResults.compare.diffs)) {\n buildResults.compare.diffs.forEach((diff) => {\n if (typeof diff.cacheKey !== 'string') {\n return;\n }\n if (diff.imageA === diff.imageB) {\n // no need to cache identical matches\n return;\n }\n const existingItem = screenshotCache.items.find((i) => i.key === diff.cacheKey);\n if (existingItem) {\n // already have this cached, but update its timestamp\n existingItem.ts = this.buildTimestamp;\n }\n else {\n // add this item to the cache\n screenshotCache.items.push({\n key: diff.cacheKey,\n ts: this.buildTimestamp,\n mp: diff.mismatchedPixels,\n });\n }\n });\n }\n // sort so the newest items are on top\n screenshotCache.items.sort((a, b) => {\n if (a.ts > b.ts)\n return -1;\n if (a.ts < b.ts)\n return 1;\n if (a.mp > b.mp)\n return -1;\n if (a.mp < b.mp)\n return 1;\n return 0;\n });\n // keep only the most recent items\n screenshotCache.items = screenshotCache.items.slice(0, 1000);\n screenshotCache.size = screenshotCache.items.length;\n return screenshotCache;\n }\n toJson(masterBuild, screenshotCache) {\n const masterScreenshots = {};\n if (masterBuild && Array.isArray(masterBuild.screenshots)) {\n masterBuild.screenshots.forEach((masterScreenshot) => {\n masterScreenshots[masterScreenshot.id] = masterScreenshot.image;\n });\n }\n const mismatchCache = {};\n if (screenshotCache && Array.isArray(screenshotCache.items)) {\n screenshotCache.items.forEach((cacheItem) => {\n mismatchCache[cacheItem.key] = cacheItem.mp;\n });\n }\n const screenshotBuild = {\n buildId: this.buildId,\n rootDir: this.rootDir,\n screenshotDir: this.screenshotDir,\n imagesDir: this.imagesDir,\n buildsDir: this.buildsDir,\n masterScreenshots: masterScreenshots,\n cache: mismatchCache,\n currentBuildDir: this.currentBuildDir,\n updateMaster: this.updateMaster,\n allowableMismatchedPixels: this.allowableMismatchedPixels,\n allowableMismatchedRatio: this.allowableMismatchedRatio,\n pixelmatchThreshold: this.pixelmatchThreshold,\n timeoutBeforeScreenshot: this.waitBeforeScreenshot,\n pixelmatchModulePath: this.pixelmatchModulePath,\n };\n return JSON.stringify(screenshotBuild);\n }\n sortScreenshots(screenshots) {\n return screenshots.sort((a, b) => {\n if (a.desc && b.desc) {\n if (a.desc.toLowerCase() < b.desc.toLowerCase())\n return -1;\n if (a.desc.toLowerCase() > b.desc.toLowerCase())\n return 1;\n }\n if (a.device && b.device) {\n if (a.device.toLowerCase() < b.device.toLowerCase())\n return -1;\n if (a.device.toLowerCase() > b.device.toLowerCase())\n return 1;\n }\n if (a.userAgent && b.userAgent) {\n if (a.userAgent.toLowerCase() < b.userAgent.toLowerCase())\n return -1;\n if (a.userAgent.toLowerCase() > b.userAgent.toLowerCase())\n return 1;\n }\n if (a.width < b.width)\n return -1;\n if (a.width > b.width)\n return 1;\n if (a.height < b.height)\n return -1;\n if (a.height > b.height)\n return 1;\n if (a.id < b.id)\n return -1;\n if (a.id > b.id)\n return 1;\n return 0;\n });\n }\n sortCompares(compares) {\n return compares.sort((a, b) => {\n if (a.allowableMismatchedPixels > b.allowableMismatchedPixels)\n return -1;\n if (a.allowableMismatchedPixels < b.allowableMismatchedPixels)\n return 1;\n if (a.allowableMismatchedRatio > b.allowableMismatchedRatio)\n return -1;\n if (a.allowableMismatchedRatio < b.allowableMismatchedRatio)\n return 1;\n if (a.desc && b.desc) {\n if (a.desc.toLowerCase() < b.desc.toLowerCase())\n return -1;\n if (a.desc.toLowerCase() > b.desc.toLowerCase())\n return 1;\n }\n if (a.device && b.device) {\n if (a.device.toLowerCase() < b.device.toLowerCase())\n return -1;\n if (a.device.toLowerCase() > b.device.toLowerCase())\n return 1;\n }\n if (a.userAgent && b.userAgent) {\n if (a.userAgent.toLowerCase() < b.userAgent.toLowerCase())\n return -1;\n if (a.userAgent.toLowerCase() > b.userAgent.toLowerCase())\n return 1;\n }\n if (a.width < b.width)\n return -1;\n if (a.width > b.width)\n return 1;\n if (a.height < b.height)\n return -1;\n if (a.height > b.height)\n return 1;\n if (a.id < b.id)\n return -1;\n if (a.id > b.id)\n return 1;\n return 0;\n });\n }\n}\n","/**\n * Convert Windows backslash paths to slash paths: foo\\\\bar ➔ foo/bar\n * Forward-slash paths can be used in Windows as long as they're not\n * extended-length paths and don't contain any non-ascii characters.\n * This was created since the path methods in Node.js outputs \\\\ paths on Windows.\n */\nexport const normalizePath = (path) => {\n if (typeof path !== 'string') {\n throw new Error(`invalid path to normalize`);\n }\n path = normalizeSlashes(path.trim());\n const components = pathComponents(path, getRootLength(path));\n const reducedComponents = reducePathComponents(components);\n const rootPart = reducedComponents[0];\n const secondPart = reducedComponents[1];\n const normalized = rootPart + reducedComponents.slice(1).join('/');\n if (normalized === '') {\n return '.';\n }\n if (rootPart === '' &&\n secondPart &&\n path.includes('/') &&\n !secondPart.startsWith('.') &&\n !secondPart.startsWith('@')) {\n return './' + normalized;\n }\n return normalized;\n};\nconst normalizeSlashes = (path) => path.replace(backslashRegExp, '/');\nconst altDirectorySeparator = '\\\\';\nconst urlSchemeSeparator = '://';\nconst backslashRegExp = /\\\\/g;\nconst reducePathComponents = (components) => {\n if (!Array.isArray(components) || components.length === 0) {\n return [];\n }\n const reduced = [components[0]];\n for (let i = 1; i < components.length; i++) {\n const component = components[i];\n if (!component)\n continue;\n if (component === '.')\n continue;\n if (component === '..') {\n if (reduced.length > 1) {\n if (reduced[reduced.length - 1] !== '..') {\n reduced.pop();\n continue;\n }\n }\n else if (reduced[0])\n continue;\n }\n reduced.push(component);\n }\n return reduced;\n};\nconst getRootLength = (path) => {\n const rootLength = getEncodedRootLength(path);\n return rootLength < 0 ? ~rootLength : rootLength;\n};\nconst getEncodedRootLength = (path) => {\n if (!path)\n return 0;\n const ch0 = path.charCodeAt(0);\n // POSIX or UNC\n if (ch0 === 47 /* slash */ || ch0 === 92 /* backslash */) {\n if (path.charCodeAt(1) !== ch0)\n return 1; // POSIX: \"/\" (or non-normalized \"\\\")\n const p1 = path.indexOf(ch0 === 47 /* slash */ ? '/' : altDirectorySeparator, 2);\n if (p1 < 0)\n return path.length; // UNC: \"//server\" or \"\\\\server\"\n return p1 + 1; // UNC: \"//server/\" or \"\\\\server\\\"\n }\n // DOS\n if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58 /* colon */) {\n const ch2 = path.charCodeAt(2);\n if (ch2 === 47 /* slash */ || ch2 === 92 /* backslash */)\n return 3; // DOS: \"c:/\" or \"c:\\\"\n if (path.length === 2)\n return 2; // DOS: \"c:\" (but not \"c:d\")\n }\n // URL\n const schemeEnd = path.indexOf(urlSchemeSeparator);\n if (schemeEnd !== -1) {\n const authorityStart = schemeEnd + urlSchemeSeparator.length;\n const authorityEnd = path.indexOf('/', authorityStart);\n if (authorityEnd !== -1) {\n // URL: \"file:///\", \"file://server/\", \"file://server/path\"\n // For local \"file\" URLs, include the leading DOS volume (if present).\n // Per https://www.ietf.org/rfc/rfc1738.txt, a host of \"\" or \"localhost\" is a\n // special case interpreted as \"the machine from which the URL is being interpreted\".\n const scheme = path.slice(0, schemeEnd);\n const authority = path.slice(authorityStart, authorityEnd);\n if (scheme === 'file' &&\n (authority === '' || authority === 'localhost') &&\n isVolumeCharacter(path.charCodeAt(authorityEnd + 1))) {\n const volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2);\n if (volumeSeparatorEnd !== -1) {\n if (path.charCodeAt(volumeSeparatorEnd) === 47 /* slash */) {\n // URL: \"file:///c:/\", \"file://localhost/c:/\", \"file:///c%3a/\", \"file://localhost/c%3a/\"\n return ~(volumeSeparatorEnd + 1);\n }\n if (volumeSeparatorEnd === path.length) {\n // URL: \"file:///c:\", \"file://localhost/c:\", \"file:///c$3a\", \"file://localhost/c%3a\"\n // but not \"file:///c:d\" or \"file:///c%3ad\"\n return ~volumeSeparatorEnd;\n }\n }\n }\n return ~(authorityEnd + 1); // URL: \"file://server/\", \"http://server/\"\n }\n return ~path.length; // URL: \"file://server\", \"http://server\"\n }\n // relative\n return 0;\n};\nconst isVolumeCharacter = (charCode) => (charCode >= 97 /* a */ && charCode <= 122 /* z */) ||\n (charCode >= 65 /* A */ && charCode <= 90 /* Z */);\nconst getFileUrlVolumeSeparatorEnd = (url, start) => {\n const ch0 = url.charCodeAt(start);\n if (ch0 === 58 /* colon */)\n return start + 1;\n if (ch0 === 37 /* percent */ && url.charCodeAt(start + 1) === 51 /* _3 */) {\n const ch2 = url.charCodeAt(start + 2);\n if (ch2 === 97 /* a */ || ch2 === 65 /* A */)\n return start + 3;\n }\n return -1;\n};\nconst pathComponents = (path, rootLength) => {\n const root = path.substring(0, rootLength);\n const rest = path.substring(rootLength).split('/');\n const restLen = rest.length;\n if (restLen > 0 && !rest[restLen - 1]) {\n rest.pop();\n }\n return [root, ...rest];\n};\n/**\n * Same as normalizePath(), expect it'll also strip any querystrings\n * from the path name. So /dir/file.css?tag=cmp-a becomes /dir/file.css\n */\nexport const normalizeFsPath = (p) => normalizePath(p.split('?')[0].replace(/\\0/g, ''));\nexport const normalizeFsPathQuery = (importPath) => {\n const pathParts = importPath.split('?');\n const filePath = normalizePath(pathParts[0]);\n const ext = filePath.split('.').pop().toLowerCase();\n const params = pathParts.length > 1 ? new URLSearchParams(pathParts[1]) : null;\n const format = params ? params.get('format') : null;\n return {\n filePath,\n ext,\n params,\n format,\n };\n};\n","import { fileExists, readFile, writeFile } from './screenshot-fs';\nimport { join, relative } from 'path';\nimport { normalizePath } from '@utils';\nimport { ScreenshotConnector } from './connector-base';\nexport class ScreenshotLocalConnector extends ScreenshotConnector {\n async publishBuild(results) {\n if (this.updateMaster || !results.masterBuild) {\n results.masterBuild = {\n id: 'master',\n message: 'Master',\n appNamespace: this.appNamespace,\n timestamp: Date.now(),\n screenshots: [],\n };\n }\n results.currentBuild.screenshots.forEach((currentScreenshot) => {\n const masterHasScreenshot = results.masterBuild.screenshots.some((masterScreenshot) => {\n return currentScreenshot.id === masterScreenshot.id;\n });\n if (!masterHasScreenshot) {\n results.masterBuild.screenshots.push(Object.assign({}, currentScreenshot));\n }\n });\n this.sortScreenshots(results.masterBuild.screenshots);\n await writeFile(this.masterBuildFilePath, JSON.stringify(results.masterBuild, null, 2));\n await this.generateJsonpDataUris(results.currentBuild);\n const compareAppSourceDir = join(this.packageDir, 'screenshot', 'compare');\n const appSrcUrl = normalizePath(relative(this.screenshotDir, compareAppSourceDir));\n const imagesUrl = normalizePath(relative(this.screenshotDir, this.imagesDir));\n const jsonpUrl = normalizePath(relative(this.screenshotDir, this.cacheDir));\n const compareAppHtml = createLocalCompareApp(this.appNamespace, appSrcUrl, imagesUrl, jsonpUrl, results.masterBuild, results.currentBuild);\n const compareAppFileName = 'compare.html';\n const compareAppFilePath = join(this.screenshotDir, compareAppFileName);\n await writeFile(compareAppFilePath, compareAppHtml);\n const gitIgnorePath = join(this.screenshotDir, '.gitignore');\n const gitIgnoreExists = await fileExists(gitIgnorePath);\n if (!gitIgnoreExists) {\n const content = [this.imagesDirName, this.buildsDirName, compareAppFileName];\n await writeFile(gitIgnorePath, content.join('\\n'));\n }\n const url = new URL(`file://${compareAppFilePath}`);\n results.compare.url = url.href;\n return results;\n }\n async getScreenshotCache() {\n let screenshotCache = null;\n try {\n screenshotCache = JSON.parse(await readFile(this.screenshotCacheFilePath));\n }\n catch (e) { }\n return screenshotCache;\n }\n async updateScreenshotCache(cache, buildResults) {\n cache = await super.updateScreenshotCache(cache, buildResults);\n await writeFile(this.screenshotCacheFilePath, JSON.stringify(cache, null, 2));\n return cache;\n }\n}\nfunction createLocalCompareApp(namespace, appSrcUrl, imagesUrl, jsonpUrl, a, b) {\n return `<!doctype html>\n<html dir=\"ltr\" lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <title>Local ${namespace || ''} - Stencil Screenshot Visual Diff</title>\n <meta name=\"viewport\" content=\"viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n <meta http-equiv=\"x-ua-compatible\" content=\"IE=Edge\">\n <link href=\"${appSrcUrl}/build/app.css\" rel=\"stylesheet\">\n <script type=\"module\" src=\"${appSrcUrl}/build/app.esm.js\"></script>\n <script nomodule src=\"${appSrcUrl}/build/app.js\"></script> \n <link rel=\"icon\" type=\"image/x-icon\" href=\"${appSrcUrl}/assets/favicon.ico\">\n</head>\n<body>\n <script>\n (function() {\n var app = document.createElement('screenshot-compare');\n app.appSrcUrl = '${appSrcUrl}';\n app.imagesUrl = '${imagesUrl}/';\n app.jsonpUrl = '${jsonpUrl}/';\n app.a = ${JSON.stringify(a)};\n app.b = ${JSON.stringify(b)};\n document.body.appendChild(app);\n })();\n </script>\n</body>\n</html>`;\n}\n"],"names":["fs","path","join","tmpdir","relative"],"mappings":"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"}
|