@freeappstore/compliance 0.7.17 → 0.7.19
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 +2 -0
- package/dist/checks/no-ads.d.ts +12 -0
- package/dist/checks/no-ads.d.ts.map +1 -0
- package/dist/checks/no-ads.js +153 -0
- package/dist/checks/no-ads.js.map +1 -0
- package/dist/checks/no-brand-overrides.d.ts +2 -0
- package/dist/checks/no-brand-overrides.d.ts.map +1 -1
- package/dist/checks/no-brand-overrides.js +17 -4
- package/dist/checks/no-brand-overrides.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/font-variables.d.ts +8 -0
- package/dist/lib/font-variables.d.ts.map +1 -0
- package/dist/lib/font-variables.js +202 -0
- package/dist/lib/font-variables.js.map +1 -0
- package/dist/live/index.d.ts +8 -0
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +24 -2
- package/dist/live/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,6 +18,8 @@ for (const r of results) {
|
|
|
18
18
|
|---|---|---|
|
|
19
19
|
| `No template placeholders` | No file still contains `APPNAME` | **fail** |
|
|
20
20
|
| `Analytics routed through platform loader` | No direct install of google-analytics / gtag / amplitude / mixpanel / segment / hotjar / plausible / posthog — analytics must flow through `api.freeappstore.online/v1/analytics.js?app=<id>` | **fail** |
|
|
21
|
+
| `No payments (free tier)` | No Payment Request API, Apple Pay, checkout SDKs / links (Stripe, PayPal, Paddle, Lemon Squeezy, Gumroad, Google Pay) or payment manifest members | **fail** |
|
|
22
|
+
| `No ads` | No ad network scripts, SDKs or packages (AdSense, Ad Manager / GPT, IMA, H5 Games Ads / AdMob, Amazon APS, Prebid, Media.net, Carbon Ads, BuySellAds, EthicalAds, Ezoic, PropellerAds, Adsterra, Taboola, Outbrain, Poki / CrazyGames / GameDistribution / GameMonetize ad SDKs). `checkNoAdsLive` runs the same patterns over published HTML in the weekly audit | **fail** |
|
|
21
23
|
| `Brand fonts present` | Manrope + Fraunces referenced in CSS or HTML | **fail** |
|
|
22
24
|
| `PWA manifest` | `web/public/manifest.json` exists and has name / short_name / start_url / display | warn |
|
|
23
25
|
| `Bundle size` | Initial-load JS (entry + static imports) ≤ 300 KB gzipped; lazy wasm/workers/dynamic chunks ≤ 25 MB each | **fail** if either cap is exceeded; warn if not built yet |
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FileSource } from '../lib/file-source.js';
|
|
2
|
+
import type { CheckResult } from '../types.js';
|
|
3
|
+
export type AdNetworkSpec = {
|
|
4
|
+
name: string;
|
|
5
|
+
patterns: RegExp[];
|
|
6
|
+
};
|
|
7
|
+
export declare const AD_NETWORKS: AdNetworkSpec[];
|
|
8
|
+
/** Names of ad networks whose patterns match `content` (already comment-stripped). */
|
|
9
|
+
export declare function matchAdNetworks(content: string): string[];
|
|
10
|
+
export declare const NO_ADS_SUGGESTIONS: string[];
|
|
11
|
+
export declare function checkNoAds(source: FileSource): Promise<CheckResult>;
|
|
12
|
+
//# sourceMappingURL=no-ads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-ads.d.ts","sourceRoot":"","sources":["../../src/checks/no-ads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAYjE,eAAO,MAAM,WAAW,EAAE,aAAa,EA+FtC,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzD;AAED,eAAO,MAAM,kBAAkB,UAG9B,CAAC;AAYF,wBAAsB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA8BzE"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { stripCommentsForExt } from '../lib/strip.js';
|
|
2
|
+
// An ad SDK package referenced as a package: imported, required, or listed as
|
|
3
|
+
// a package.json dependency. A plain string that happens to hold the name
|
|
4
|
+
// (a keyword list, a label) doesn't count. `name` is a regex source.
|
|
5
|
+
function pkg(name) {
|
|
6
|
+
const quoted = `['"](?:${name})(?:\\/[\\w./-]*)?['"]`;
|
|
7
|
+
return new RegExp(`(?:\\bfrom\\s*|\\brequire\\s*\\(\\s*|\\bimport\\s*\\(?\\s*)${quoted}|${quoted}\\s*:\\s*['"](?:[~^<>=]*\\s*\\d|workspace:|npm:|latest)`);
|
|
8
|
+
}
|
|
9
|
+
export const AD_NETWORKS = [
|
|
10
|
+
{
|
|
11
|
+
name: 'Google AdSense',
|
|
12
|
+
patterns: [
|
|
13
|
+
/pagead2\.googlesyndication\.com/i,
|
|
14
|
+
/\btpc\.googlesyndication\.com/i,
|
|
15
|
+
/\badservice\.google\.[a-z.]+\//i,
|
|
16
|
+
/\badsbygoogle\b/,
|
|
17
|
+
/\bdata-ad-client\s*=\s*['"]ca-pub-/i,
|
|
18
|
+
/\bca-pub-\d{10,}\b/,
|
|
19
|
+
// Wrapper packages: react-adsense, vue-google-adsense, @ctrl/ngx-adsense…
|
|
20
|
+
pkg('(?:@[\\w-]+\\/)?[\\w-]*adsense[\\w-]*'),
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Google Ad Manager (GPT)',
|
|
25
|
+
patterns: [
|
|
26
|
+
/securepubads\.g\.doubleclick\.net/i,
|
|
27
|
+
/\b(?:ad|pubads\.g|googleads\.g|static)\.doubleclick\.net/i,
|
|
28
|
+
/googletagservices\.com\/tag\/js\/gpt\.js/i,
|
|
29
|
+
/\bgoogletag\s*\.\s*(?:pubads|defineSlot|defineOutOfPageSlot|enableServices)\s*\(/,
|
|
30
|
+
pkg('@guardian\\/commercial(?:-core)?|@adslot\\/react-gpt'),
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Google IMA SDK',
|
|
35
|
+
patterns: [
|
|
36
|
+
/imasdk\.googleapis\.com/i,
|
|
37
|
+
/\bgoogle\s*\.\s*ima\s*\.\s*(?:AdsLoader|AdDisplayContainer|AdsRequest|AdsManager|ImaSdkSettings|AdsManagerLoadedEvent)\b/,
|
|
38
|
+
pkg('videojs-ima|@dailymotion\\/vast-client'),
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
// H5 Games Ads / AdMob for web games: `adBreak({ type: 'next', … })` and
|
|
43
|
+
// `adConfig({ preloadAdBreaks: … })`. A function merely named adBreak passes.
|
|
44
|
+
name: 'Google H5 Games Ads / AdMob',
|
|
45
|
+
patterns: [
|
|
46
|
+
/\badBreak\s*\(\s*\{[^}]*\btype\s*:\s*['"`](?:start|pause|next|browse|reward|preroll)['"`]/,
|
|
47
|
+
/\badConfig\s*\(\s*\{[^}]*\bpreloadAdBreaks\s*:/,
|
|
48
|
+
pkg('@capacitor-community\\/admob|cordova-plugin-admob(?:-free|-plus)?|(?:@[\\w-]+\\/)?(?:react-native-)?google-mobile-ads'),
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Amazon Publisher Services',
|
|
53
|
+
patterns: [
|
|
54
|
+
/amazon-adsystem\.com/i,
|
|
55
|
+
/\bapstag\s*\.\s*(?:init|fetchBids|setDisplayBids|targetingKeys)\s*\(/,
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Prebid.js',
|
|
60
|
+
patterns: [
|
|
61
|
+
/\bpbjs\s*\.\s*(?:requestBids|addAdUnits|setConfig|setTargetingForGPTAsync)\s*\(/,
|
|
62
|
+
/\bprebid(?:\.min)?\.js\b/i,
|
|
63
|
+
pkg('prebid\\.js'),
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{ name: 'Media.net', patterns: [/\b(?:contextual|static|warp)\.media\.net\b/i] },
|
|
67
|
+
{
|
|
68
|
+
name: 'Carbon Ads',
|
|
69
|
+
patterns: [
|
|
70
|
+
/\bcarbonads\.(?:com|net)\b/i,
|
|
71
|
+
pkg('vue-carbonads|react-carbonads|svelte-carbonads'),
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
{ name: 'BuySellAds', patterns: [/buysellads\.(?:com|net)\b/i, /\b_bsa\s*\.\s*init\s*\(/] },
|
|
75
|
+
{
|
|
76
|
+
name: 'EthicalAds',
|
|
77
|
+
patterns: [/\bethicalads\.io\b/i, /\bdata-ea-publisher\s*=/i, /\bethicalads\s*\.\s*load/i],
|
|
78
|
+
},
|
|
79
|
+
{ name: 'Ezoic', patterns: [/\bezoic\.(?:net|com)\b/i, /\bezojs\.com\b/i, /\bezstandalone\b/] },
|
|
80
|
+
{ name: 'PropellerAds', patterns: [/\bpropellerads\.com\b/i] },
|
|
81
|
+
{ name: 'Adsterra', patterns: [/\badsterra\.com\b/i, /\bhighperformanceformat\.com\b/i] },
|
|
82
|
+
{
|
|
83
|
+
name: 'Taboola',
|
|
84
|
+
patterns: [/\btaboola\.com\b/i, /\bwindow\._taboola\b|\b_taboola\s*\.\s*push\s*\(/],
|
|
85
|
+
},
|
|
86
|
+
{ name: 'Outbrain', patterns: [/\boutbrain\.com\b/i, /\bOBR\s*\.\s*extern\b/] },
|
|
87
|
+
// Web-game portal ad SDKs. Shipping one of these turns on interstitial and
|
|
88
|
+
// rewarded ads inside the game.
|
|
89
|
+
{
|
|
90
|
+
name: 'Poki SDK ads',
|
|
91
|
+
patterns: [/game-cdn\.poki\.com/i, /\bPokiSDK\s*\.\s*(?:commercialBreak|rewardedBreak)\s*\(/],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'CrazyGames SDK ads',
|
|
95
|
+
patterns: [/sdk\.crazygames\.com/i, /\bCrazyGames\s*\.\s*SDK\s*\.\s*ad\b/],
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'GameDistribution SDK',
|
|
99
|
+
patterns: [/\bgamedistribution\.com\b/i, /\bgdsdk\s*\.\s*showAd\s*\(/],
|
|
100
|
+
},
|
|
101
|
+
{ name: 'GameMonetize SDK', patterns: [/\bgamemonetize\.com\b/i] },
|
|
102
|
+
];
|
|
103
|
+
/** Names of ad networks whose patterns match `content` (already comment-stripped). */
|
|
104
|
+
export function matchAdNetworks(content) {
|
|
105
|
+
return AD_NETWORKS.filter((n) => n.patterns.some((re) => re.test(content))).map((n) => n.name);
|
|
106
|
+
}
|
|
107
|
+
export const NO_ADS_SUGGESTIONS = [
|
|
108
|
+
'FreeAppStore apps show no ads: remove the ad network script, SDK or package.',
|
|
109
|
+
'To earn from an app, publish it on ProAppStore (https://proappstore.online), which handles subscriptions and creator payouts.',
|
|
110
|
+
];
|
|
111
|
+
const SCAN_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.html', '.json']);
|
|
112
|
+
// Tests and e2e specs may name the networks they assert are absent.
|
|
113
|
+
function isTestFile(path) {
|
|
114
|
+
return (/(?:^|\/)(?:test|tests|__tests__|e2e)\//.test(path) ||
|
|
115
|
+
/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(path));
|
|
116
|
+
}
|
|
117
|
+
export async function checkNoAds(source) {
|
|
118
|
+
const hits = [];
|
|
119
|
+
for await (const path of source.list()) {
|
|
120
|
+
const ext = extOf(path);
|
|
121
|
+
if (!SCAN_EXTS.has(ext) || isTestFile(path))
|
|
122
|
+
continue;
|
|
123
|
+
const raw = await source.read(path);
|
|
124
|
+
if (!raw)
|
|
125
|
+
continue;
|
|
126
|
+
// Comments only, not strings: ad tags live inside string literals.
|
|
127
|
+
const matches = matchAdNetworks(stripCommentsForExt(raw, ext));
|
|
128
|
+
if (matches.length > 0)
|
|
129
|
+
hits.push({ file: path, matches });
|
|
130
|
+
}
|
|
131
|
+
if (hits.length === 0) {
|
|
132
|
+
return {
|
|
133
|
+
name: 'No ads',
|
|
134
|
+
status: 'pass',
|
|
135
|
+
detail: 'no ad network scripts, SDKs or packages found',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
name: 'No ads',
|
|
140
|
+
status: 'fail',
|
|
141
|
+
detail: `${hits.length} file(s) load ad networks: ${hits
|
|
142
|
+
.slice(0, 3)
|
|
143
|
+
.map((h) => `${h.file} (${h.matches.join(', ')})`)
|
|
144
|
+
.join('; ')}${hits.length > 3 ? '…' : ''}`,
|
|
145
|
+
suggestions: NO_ADS_SUGGESTIONS,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function extOf(path) {
|
|
149
|
+
const dot = path.lastIndexOf('.');
|
|
150
|
+
const slash = path.lastIndexOf('/');
|
|
151
|
+
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=no-ads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-ads.js","sourceRoot":"","sources":["../../src/checks/no-ads.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FileSource } from '../lib/file-source.js';
|
|
2
|
+
import { type FontVariables } from '../lib/font-variables.js';
|
|
2
3
|
import type { CheckResult } from '../types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Apps and games on the platform must look consistent with the storefront
|
|
@@ -21,5 +22,6 @@ import type { CheckResult } from '../types.js';
|
|
|
21
22
|
export declare function checkNoBrandOverrides(source: FileSource): Promise<CheckResult>;
|
|
22
23
|
export declare function scanContent(filename: string, content: string, opts?: {
|
|
23
24
|
skipVarRedefs?: boolean;
|
|
25
|
+
fontVariables?: FontVariables;
|
|
24
26
|
}): string[];
|
|
25
27
|
//# sourceMappingURL=no-brand-overrides.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-brand-overrides.d.ts","sourceRoot":"","sources":["../../src/checks/no-brand-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"no-brand-overrides.d.ts","sourceRoot":"","sources":["../../src/checks/no-brand-overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAmDpF;AA2DD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,CAAA;CAAO,GACpE,MAAM,EAAE,CA0EV"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { collectFontVariables, resolveFontVariables, splitFontStack, } from '../lib/font-variables.js';
|
|
1
2
|
import { stripCommentsOnly, stripCssComments } from '../lib/strip.js';
|
|
2
3
|
/**
|
|
3
4
|
* Apps and games on the platform must look consistent with the storefront
|
|
@@ -19,6 +20,7 @@ import { stripCommentsOnly, stripCssComments } from '../lib/strip.js';
|
|
|
19
20
|
*/
|
|
20
21
|
export async function checkNoBrandOverrides(source) {
|
|
21
22
|
const issues = [];
|
|
23
|
+
const files = [];
|
|
22
24
|
for await (const path of source.list()) {
|
|
23
25
|
const ext = extOf(path);
|
|
24
26
|
if (!SCANNED_EXTS.has(ext))
|
|
@@ -32,13 +34,17 @@ export async function checkNoBrandOverrides(source) {
|
|
|
32
34
|
// we're auditing. For .css/.scss use the css-only stripper (no `//`
|
|
33
35
|
// syntax at the language level).
|
|
34
36
|
const content = ext === '.css' || ext === '.scss' ? stripCssComments(raw) : stripCommentsOnly(raw);
|
|
37
|
+
files.push({ path, content });
|
|
38
|
+
}
|
|
39
|
+
const fontVariables = collectFontVariables(files.map((file) => file.content));
|
|
40
|
+
for (const { path, content } of files) {
|
|
35
41
|
// Canonical theme file: the platform's CSS variables ARE defined here.
|
|
36
42
|
// Apps own this file post-scaffold (they can technically modify token
|
|
37
43
|
// values, and we accept the imperfection — the loud places where a
|
|
38
44
|
// brand override actually causes inconsistency are inline styles +
|
|
39
45
|
// per-component CSS, which this check still covers).
|
|
40
46
|
const isThemeFile = path === 'web/src/index.css' || path === 'web/src/main.css';
|
|
41
|
-
const fileIssues = scanContent(path, content, { skipVarRedefs: isThemeFile });
|
|
47
|
+
const fileIssues = scanContent(path, content, { skipVarRedefs: isThemeFile, fontVariables });
|
|
42
48
|
issues.push(...fileIssues);
|
|
43
49
|
// Cap at 10 — beyond that the user has bigger problems and we don't
|
|
44
50
|
// want a 200-line failure report.
|
|
@@ -151,6 +157,7 @@ export function scanContent(filename, content, opts = {}) {
|
|
|
151
157
|
// and false-positives. Real SVG-in-JSX with kebab fontFamily is rare
|
|
152
158
|
// enough to skip.
|
|
153
159
|
const fontHeadRe = /(font-family\s*:|fontFamily\s*[:=])/g;
|
|
160
|
+
const variables = opts.fontVariables ?? collectFontVariables([content]);
|
|
154
161
|
const quotedRe = /(['"`])([^'"`\n]+)\1/g;
|
|
155
162
|
let m;
|
|
156
163
|
while ((m = fontHeadRe.exec(content)) !== null) {
|
|
@@ -158,16 +165,22 @@ export function scanContent(filename, content, opts = {}) {
|
|
|
158
165
|
const start = m.index + m[0].length;
|
|
159
166
|
const value = sliceFontValue(content, start, isJsx);
|
|
160
167
|
const quotedStrings = [...value.matchAll(quotedRe)].map((x) => x[2]);
|
|
161
|
-
const candidates = quotedStrings.length > 0 ? quotedStrings : [value];
|
|
168
|
+
const candidates = isJsx && quotedStrings.length > 0 ? quotedStrings : [value];
|
|
162
169
|
let flagged = false;
|
|
163
170
|
for (const cand of candidates) {
|
|
164
|
-
const
|
|
165
|
-
|
|
171
|
+
const fontValue = isJsx ? cand : cand.replace(/\s*!important\s*$/i, '');
|
|
172
|
+
const resolved = resolveFontVariables(fontValue, variables) ?? [fontValue];
|
|
173
|
+
const tokens = resolved
|
|
174
|
+
.flatMap(splitFontStack)
|
|
166
175
|
.map((t) => t
|
|
167
176
|
.trim()
|
|
168
177
|
.replace(/^["']|["']$/g, '')
|
|
169
178
|
.toLowerCase())
|
|
170
179
|
.filter(Boolean);
|
|
180
|
+
if (tokens.length === 0 && /var\(/i.test(cand)) {
|
|
181
|
+
out.push(`${filename}:${lineNumberAt(content, m.index)} unresolved font "${cand.trim()}"`);
|
|
182
|
+
flagged = true;
|
|
183
|
+
}
|
|
171
184
|
for (const t of tokens) {
|
|
172
185
|
if (!ALLOWED_FONT_TOKENS.has(t)) {
|
|
173
186
|
const line = lineNumberAt(content, m.index);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-brand-overrides.js","sourceRoot":"","sources":["../../src/checks/no-brand-overrides.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAkB;IAC5D,MAAM,MAAM,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"no-brand-overrides.js","sourceRoot":"","sources":["../../src/checks/no-brand-overrides.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { checkDarkMode } from './checks/dark-mode.js';
|
|
|
6
6
|
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
7
7
|
import { checkLicenseMit } from './checks/license-mit.js';
|
|
8
8
|
import { checkManifest } from './checks/manifest.js';
|
|
9
|
+
import { checkNoAds } from './checks/no-ads.js';
|
|
9
10
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
10
11
|
import { checkNoCommittedArtifacts } from './checks/no-committed-artifacts.js';
|
|
11
12
|
import { checkNoEnvProduction } from './checks/no-env-production.js';
|
|
@@ -31,9 +32,9 @@ export { extractInlineManifest, type InlineManifest } from './lib/inline-manifes
|
|
|
31
32
|
export type { DeclaredPermission, PermissionId } from './lib/permissions.js';
|
|
32
33
|
export { detectPermissions, PERMISSION_IDS, readDeclaredPermissions, } from './lib/permissions.js';
|
|
33
34
|
export type { LiveAuditInput, LiveAuditReport } from './live/index.js';
|
|
34
|
-
export { auditLive, checkBrandFontsLive, checkBundleSizeLive, checkManifestLive, checkNoTrackingLive, checkUnsafeVhLive, } from './live/index.js';
|
|
35
|
+
export { auditLive, checkBrandFontsLive, checkBundleSizeLive, checkManifestLive, checkNoAdsLive, checkNoTrackingLive, checkUnsafeVhLive, } from './live/index.js';
|
|
35
36
|
export type { CheckResult, CheckStatus } from './types.js';
|
|
36
|
-
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkClaudeMdSlim, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkMaskableIcon, checkNoBrandOverrides, checkNoCommittedArtifacts, checkNoEnvProduction, checkNoPayments, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPermissions, checkPwaMeta, checkPwaOffline, checkStoreLink, checkTextSelectable, checkUnsafeVh, checkViewportSupport, fsFileSource, githubTreeSource, isGameProject, mapFileSource, };
|
|
37
|
+
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkClaudeMdSlim, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkMaskableIcon, checkNoAds, checkNoBrandOverrides, checkNoCommittedArtifacts, checkNoEnvProduction, checkNoPayments, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPermissions, checkPwaMeta, checkPwaOffline, checkStoreLink, checkTextSelectable, checkUnsafeVh, checkViewportSupport, fsFileSource, githubTreeSource, isGameProject, mapFileSource, };
|
|
37
38
|
/**
|
|
38
39
|
* Runs every compliance check against the source. Two front doors:
|
|
39
40
|
* - `runChecks(repoDir)` — CLI / CI; reads from disk.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { checkDarkMode } from './checks/dark-mode.js';
|
|
|
6
6
|
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
7
7
|
import { checkLicenseMit } from './checks/license-mit.js';
|
|
8
8
|
import { checkManifest } from './checks/manifest.js';
|
|
9
|
+
import { checkNoAds } from './checks/no-ads.js';
|
|
9
10
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
10
11
|
import { checkNoCommittedArtifacts } from './checks/no-committed-artifacts.js';
|
|
11
12
|
import { checkNoEnvProduction } from './checks/no-env-production.js';
|
|
@@ -30,8 +31,8 @@ export { detectPermissions, PERMISSION_IDS, readDeclaredPermissions, } from './l
|
|
|
30
31
|
// Live-URL audit (used by the compliance audit Worker; runs in
|
|
31
32
|
// browser/Workers env, no filesystem). Separate export path so callers
|
|
32
33
|
// don't accidentally pull node:fs in via the file-walking checks.
|
|
33
|
-
export { auditLive, checkBrandFontsLive, checkBundleSizeLive, checkManifestLive, checkNoTrackingLive, checkUnsafeVhLive, } from './live/index.js';
|
|
34
|
-
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkClaudeMdSlim, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkMaskableIcon, checkNoBrandOverrides, checkNoCommittedArtifacts, checkNoEnvProduction, checkNoPayments, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPermissions, checkPwaMeta, checkPwaOffline, checkStoreLink, checkTextSelectable, checkUnsafeVh, checkViewportSupport, fsFileSource, githubTreeSource, isGameProject, mapFileSource, };
|
|
34
|
+
export { auditLive, checkBrandFontsLive, checkBundleSizeLive, checkManifestLive, checkNoAdsLive, checkNoTrackingLive, checkUnsafeVhLive, } from './live/index.js';
|
|
35
|
+
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkClaudeMdSlim, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkMaskableIcon, checkNoAds, checkNoBrandOverrides, checkNoCommittedArtifacts, checkNoEnvProduction, checkNoPayments, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPermissions, checkPwaMeta, checkPwaOffline, checkStoreLink, checkTextSelectable, checkUnsafeVh, checkViewportSupport, fsFileSource, githubTreeSource, isGameProject, mapFileSource, };
|
|
35
36
|
/**
|
|
36
37
|
* Runs every compliance check against the source. Two front doors:
|
|
37
38
|
* - `runChecks(repoDir)` — CLI / CI; reads from disk.
|
|
@@ -55,6 +56,7 @@ async function runChecksOn(source) {
|
|
|
55
56
|
checkNoPlaceholders(source),
|
|
56
57
|
checkNoTracking(source),
|
|
57
58
|
checkNoPayments(source),
|
|
59
|
+
checkNoAds(source),
|
|
58
60
|
checkPermissions(source),
|
|
59
61
|
checkBrandFonts(source),
|
|
60
62
|
checkBrandTokens(source),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAmB,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE3F,OAAO,EAAE,qBAAqB,EAAuB,MAAM,0BAA0B,CAAC;AAEtF,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,+DAA+D;AAC/D,uEAAuE;AACvE,kEAAkE;AAClE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,OAAO,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAA0B;IACjE,OAAO,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAkB;IAC3C,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB,eAAe,CAAC,MAAM,CAAC;QACvB,yBAAyB,CAAC,MAAM,CAAC;QACjC,oBAAoB,CAAC,MAAM,CAAC;QAC5B,mBAAmB,CAAC,MAAM,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC;QACvB,eAAe,CAAC,MAAM,CAAC;QACvB,UAAU,CAAC,MAAM,CAAC;QAClB,gBAAgB,CAAC,MAAM,CAAC;QACxB,eAAe,CAAC,MAAM,CAAC;QACvB,gBAAgB,CAAC,MAAM,CAAC;QACxB,qBAAqB,CAAC,MAAM,CAAC;QAC7B,aAAa,CAAC,MAAM,CAAC;QACrB,oBAAoB,CAAC,MAAM,CAAC;QAC5B,aAAa,CAAC,MAAM,CAAC;QACrB,aAAa,CAAC,MAAM,CAAC;QACrB,YAAY,CAAC,MAAM,CAAC;QACpB,eAAe,CAAC,MAAM,CAAC;QACvB,aAAa,CAAC,MAAM,CAAC;QACrB,iBAAiB,CAAC,MAAM,CAAC;QACzB,cAAc,CAAC,MAAM,CAAC;QACtB,mBAAmB,CAAC,MAAM,CAAC;QAC3B,aAAa,CAAC,MAAM,CAAC;QACrB,eAAe,CAAC,MAAM,CAAC;QACvB,iBAAiB,CAAC,MAAM,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Keep every declaration: a different selector/file may shadow the theme. */
|
|
2
|
+
export type FontVariables = ReadonlyMap<string, ReadonlySet<string>>;
|
|
3
|
+
export declare function collectFontVariables(contents: Iterable<string>): FontVariables;
|
|
4
|
+
/** Split CSS lists without treating a var() fallback's commas as separators. */
|
|
5
|
+
export declare function splitFontStack(value: string): string[];
|
|
6
|
+
/** Null means unresolved/invalid, never an exemption from font validation. */
|
|
7
|
+
export declare function resolveFontVariables(value: string, variables: FontVariables): string[] | null;
|
|
8
|
+
//# sourceMappingURL=font-variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-variables.d.ts","sourceRoot":"","sources":["../../src/lib/font-variables.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAErE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAsC9E;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BtD;AA+CD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,GAAG,MAAM,EAAE,GAAG,IAAI,CAoE7F"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
export function collectFontVariables(contents) {
|
|
2
|
+
const variables = new Map();
|
|
3
|
+
for (const content of contents) {
|
|
4
|
+
const declarations = /(?:^|[;{\s])(--[\w-]+)\s*:/g;
|
|
5
|
+
for (const match of content.matchAll(declarations)) {
|
|
6
|
+
const start = match.index + match[0].length;
|
|
7
|
+
let end = start;
|
|
8
|
+
let quote = '';
|
|
9
|
+
let depth = 0;
|
|
10
|
+
for (; end < content.length; end++) {
|
|
11
|
+
const char = content[end];
|
|
12
|
+
if (char === '\\') {
|
|
13
|
+
end++;
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (quote) {
|
|
17
|
+
if (char === quote)
|
|
18
|
+
quote = '';
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (char === '"' || char === "'") {
|
|
22
|
+
quote = char;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (char === '(')
|
|
26
|
+
depth++;
|
|
27
|
+
if (char === ')')
|
|
28
|
+
depth--;
|
|
29
|
+
if (!depth && /[;{}]/.test(char))
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
const values = variables.get(match[1]) ?? new Set();
|
|
33
|
+
values.add(content
|
|
34
|
+
.slice(start, end)
|
|
35
|
+
.trim()
|
|
36
|
+
.replace(/\s*!important\s*$/i, ''));
|
|
37
|
+
variables.set(match[1], values);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return variables;
|
|
41
|
+
}
|
|
42
|
+
/** Split CSS lists without treating a var() fallback's commas as separators. */
|
|
43
|
+
export function splitFontStack(value) {
|
|
44
|
+
const parts = [];
|
|
45
|
+
let quote = '';
|
|
46
|
+
let depth = 0;
|
|
47
|
+
let start = 0;
|
|
48
|
+
for (let i = 0; i < value.length; i++) {
|
|
49
|
+
const char = value[i];
|
|
50
|
+
if (char === '\\') {
|
|
51
|
+
i++;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (quote) {
|
|
55
|
+
if (char === quote)
|
|
56
|
+
quote = '';
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (char === '"' || char === "'") {
|
|
60
|
+
quote = char;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (char === '(')
|
|
64
|
+
depth++;
|
|
65
|
+
if (char === ')')
|
|
66
|
+
depth--;
|
|
67
|
+
if (char === ',' && !depth) {
|
|
68
|
+
parts.push(value.slice(start, i));
|
|
69
|
+
start = i + 1;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
parts.push(value.slice(start));
|
|
73
|
+
return parts;
|
|
74
|
+
}
|
|
75
|
+
/** CSS dependency cycles invalidate every variable in the cycle, including fallbacks. */
|
|
76
|
+
function cyclicVariables(variables) {
|
|
77
|
+
const graph = new Map();
|
|
78
|
+
for (const [name, values] of variables) {
|
|
79
|
+
const references = new Set();
|
|
80
|
+
for (const value of values) {
|
|
81
|
+
const unquoted = value.replace(/"[^"\n]*"|'[^'\n]*'/g, '');
|
|
82
|
+
for (const reference of unquoted.matchAll(/var\(\s*(--[\w-]+)/gi))
|
|
83
|
+
references.add(reference[1]);
|
|
84
|
+
}
|
|
85
|
+
graph.set(name, references);
|
|
86
|
+
}
|
|
87
|
+
const cyclic = new Set();
|
|
88
|
+
const indices = new Map();
|
|
89
|
+
const lows = new Map();
|
|
90
|
+
const stack = [];
|
|
91
|
+
const active = new Set();
|
|
92
|
+
let index = 0;
|
|
93
|
+
// Strongly connected components include cycles reached through already visited branches.
|
|
94
|
+
function visit(name) {
|
|
95
|
+
indices.set(name, index);
|
|
96
|
+
lows.set(name, index++);
|
|
97
|
+
stack.push(name);
|
|
98
|
+
active.add(name);
|
|
99
|
+
for (const next of graph.get(name) ?? []) {
|
|
100
|
+
if (!indices.has(next)) {
|
|
101
|
+
visit(next);
|
|
102
|
+
lows.set(name, Math.min(lows.get(name), lows.get(next)));
|
|
103
|
+
}
|
|
104
|
+
else if (active.has(next))
|
|
105
|
+
lows.set(name, Math.min(lows.get(name), indices.get(next)));
|
|
106
|
+
}
|
|
107
|
+
if (lows.get(name) !== indices.get(name))
|
|
108
|
+
return;
|
|
109
|
+
const component = [];
|
|
110
|
+
let next;
|
|
111
|
+
do {
|
|
112
|
+
next = stack.pop();
|
|
113
|
+
active.delete(next);
|
|
114
|
+
component.push(next);
|
|
115
|
+
} while (next !== name);
|
|
116
|
+
if (component.length > 1 || graph.get(name)?.has(name))
|
|
117
|
+
for (const member of component)
|
|
118
|
+
cyclic.add(member);
|
|
119
|
+
}
|
|
120
|
+
for (const name of graph.keys())
|
|
121
|
+
if (!indices.has(name))
|
|
122
|
+
visit(name);
|
|
123
|
+
return cyclic;
|
|
124
|
+
}
|
|
125
|
+
/** Null means unresolved/invalid, never an exemption from font validation. */
|
|
126
|
+
export function resolveFontVariables(value, variables) {
|
|
127
|
+
const cyclic = cyclicVariables(variables);
|
|
128
|
+
function expand(input, trail, depth) {
|
|
129
|
+
if (depth > 32)
|
|
130
|
+
return null;
|
|
131
|
+
let quote = '';
|
|
132
|
+
for (let i = 0; i < input.length; i++) {
|
|
133
|
+
const char = input[i];
|
|
134
|
+
if (char === '\\') {
|
|
135
|
+
i++;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if (quote) {
|
|
139
|
+
if (char === quote)
|
|
140
|
+
quote = '';
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (char === '"' || char === "'") {
|
|
144
|
+
quote = char;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (input.slice(i, i + 4).toLowerCase() !== 'var(')
|
|
148
|
+
continue;
|
|
149
|
+
let end = i + 4;
|
|
150
|
+
let nesting = 1;
|
|
151
|
+
let innerQuote = '';
|
|
152
|
+
for (; end < input.length; end++) {
|
|
153
|
+
const inner = input[end];
|
|
154
|
+
if (inner === '\\') {
|
|
155
|
+
end++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (innerQuote) {
|
|
159
|
+
if (inner === innerQuote)
|
|
160
|
+
innerQuote = '';
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (inner === '"' || inner === "'") {
|
|
164
|
+
innerQuote = inner;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (inner === '(')
|
|
168
|
+
nesting++;
|
|
169
|
+
if (inner === ')' && --nesting === 0)
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
if (nesting)
|
|
173
|
+
return null;
|
|
174
|
+
const args = splitFontStack(input.slice(i + 4, end));
|
|
175
|
+
const name = args.shift().trim();
|
|
176
|
+
if (!/^--[\w-]+$/.test(name))
|
|
177
|
+
return null;
|
|
178
|
+
const fallback = args.length ? args.join(',') : null;
|
|
179
|
+
const nextTrail = new Set([...trail, name]);
|
|
180
|
+
const declarations = !trail.has(name) && !cyclic.has(name) ? variables.get(name) : undefined;
|
|
181
|
+
const choices = declarations?.size ? [...declarations] : [null];
|
|
182
|
+
const output = [];
|
|
183
|
+
for (const declaration of choices) {
|
|
184
|
+
let values = declaration === null ? null : expand(declaration, nextTrail, depth + 1);
|
|
185
|
+
if (values === null && fallback !== null)
|
|
186
|
+
values = expand(fallback, trail, depth + 1);
|
|
187
|
+
if (values === null)
|
|
188
|
+
return null;
|
|
189
|
+
for (const resolved of values) {
|
|
190
|
+
const rest = expand(input.slice(0, i) + resolved + input.slice(end + 1), trail, depth + 1);
|
|
191
|
+
if (rest === null || output.length + rest.length > 32)
|
|
192
|
+
return null;
|
|
193
|
+
output.push(...rest);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return output;
|
|
197
|
+
}
|
|
198
|
+
return [input];
|
|
199
|
+
}
|
|
200
|
+
return expand(value, new Set(), 0);
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=font-variables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font-variables.js","sourceRoot":"","sources":["../../src/lib/font-variables.ts"],"names":[],"mappings":"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"}
|
package/dist/live/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* What we can check from a live URL:
|
|
7
7
|
* - Tracking SDK injection (script src, inline scripts, fetched JS)
|
|
8
|
+
* - Ad network tags (script src, inline scripts) — FreeAppStore apps show no ads
|
|
8
9
|
* - Brand fonts presence (link href to fonts.googleapis.com)
|
|
9
10
|
* - PWA manifest reachable + valid
|
|
10
11
|
* - Initial-load JS size (entry script + modulepreload chunks)
|
|
@@ -31,6 +32,13 @@ export interface LiveAuditReport {
|
|
|
31
32
|
}
|
|
32
33
|
export declare function auditLive(input: LiveAuditInput): Promise<LiveAuditReport>;
|
|
33
34
|
export declare function checkNoTrackingLive(html: string): CheckResult;
|
|
35
|
+
/**
|
|
36
|
+
* Live counterpart to checkNoAds: the same ad-network patterns, run over the
|
|
37
|
+
* served HTML with HTML comments stripped. Catches the classic pasted ad tag
|
|
38
|
+
* (`<script async src="https://pagead2.googlesyndication.com/…">`, an inline
|
|
39
|
+
* `adsbygoogle.push`); an ad SDK bundled into the JS is the source check's job.
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkNoAdsLive(html: string): CheckResult;
|
|
34
42
|
export declare function checkBrandFontsLive(html: string): CheckResult;
|
|
35
43
|
export declare function checkManifestLive(html: string, liveUrl: string): Promise<CheckResult>;
|
|
36
44
|
export declare function checkBundleSizeLive(html: string, liveUrl: string): Promise<CheckResult>;
|
package/dist/live/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAmB/C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA2BD,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CA4D/E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAkB7D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAWxD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAe7D;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiD3F;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+D7F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD3F"}
|
package/dist/live/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* What we can check from a live URL:
|
|
7
7
|
* - Tracking SDK injection (script src, inline scripts, fetched JS)
|
|
8
|
+
* - Ad network tags (script src, inline scripts) — FreeAppStore apps show no ads
|
|
8
9
|
* - Brand fonts presence (link href to fonts.googleapis.com)
|
|
9
10
|
* - PWA manifest reachable + valid
|
|
10
11
|
* - Initial-load JS size (entry script + modulepreload chunks)
|
|
@@ -17,9 +18,11 @@
|
|
|
17
18
|
* results in D1 so creators (or platform admins) can see drift over
|
|
18
19
|
* time without leaving the storefront.
|
|
19
20
|
*/
|
|
21
|
+
import { matchAdNetworks, NO_ADS_SUGGESTIONS } from '../checks/no-ads.js';
|
|
20
22
|
import { INITIAL_LOAD_MAX_GZIP_BYTES } from '../lib/bundle-limits.js';
|
|
21
23
|
import { gzipByteLength } from '../lib/gzip.js';
|
|
22
24
|
import { collectInitialJsRefs, jsAssetFileName } from '../lib/html-initial-js.js';
|
|
25
|
+
import { stripHtmlComments } from '../lib/strip.js';
|
|
23
26
|
/** Cap live fetches of the initial graph so a page with many modulepreloads
|
|
24
27
|
* cannot blow the Worker subrequest budget. 6 is well above a typical
|
|
25
28
|
* Vite split (entry + 1–2 vendors). */
|
|
@@ -108,14 +111,15 @@ export async function auditLive(input) {
|
|
|
108
111
|
return report;
|
|
109
112
|
}
|
|
110
113
|
// Run all checks in parallel — each is independent.
|
|
111
|
-
const [tracking, fonts, manifest, bundle, vh] = await Promise.all([
|
|
114
|
+
const [tracking, ads, fonts, manifest, bundle, vh] = await Promise.all([
|
|
112
115
|
checkNoTrackingLive(html),
|
|
116
|
+
checkNoAdsLive(html),
|
|
113
117
|
checkBrandFontsLive(html),
|
|
114
118
|
checkManifestLive(html, input.liveUrl),
|
|
115
119
|
checkBundleSizeLive(html, input.liveUrl),
|
|
116
120
|
checkUnsafeVhLive(html, input.liveUrl),
|
|
117
121
|
]);
|
|
118
|
-
report.results.push(tracking, fonts, manifest, bundle, vh);
|
|
122
|
+
report.results.push(tracking, ads, fonts, manifest, bundle, vh);
|
|
119
123
|
return report;
|
|
120
124
|
}
|
|
121
125
|
export function checkNoTrackingLive(html) {
|
|
@@ -137,6 +141,24 @@ export function checkNoTrackingLive(html) {
|
|
|
137
141
|
],
|
|
138
142
|
};
|
|
139
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Live counterpart to checkNoAds: the same ad-network patterns, run over the
|
|
146
|
+
* served HTML with HTML comments stripped. Catches the classic pasted ad tag
|
|
147
|
+
* (`<script async src="https://pagead2.googlesyndication.com/…">`, an inline
|
|
148
|
+
* `adsbygoogle.push`); an ad SDK bundled into the JS is the source check's job.
|
|
149
|
+
*/
|
|
150
|
+
export function checkNoAdsLive(html) {
|
|
151
|
+
const found = matchAdNetworks(stripHtmlComments(html));
|
|
152
|
+
if (found.length === 0) {
|
|
153
|
+
return { name: 'No ads (live)', status: 'pass', detail: 'no ad network tags in live HTML' };
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
name: 'No ads (live)',
|
|
157
|
+
status: 'fail',
|
|
158
|
+
detail: `ad network tags in live HTML: ${found.join(', ')}`,
|
|
159
|
+
suggestions: NO_ADS_SUGGESTIONS,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
140
162
|
export function checkBrandFontsLive(html) {
|
|
141
163
|
const hasManrope = /manrope/i.test(html);
|
|
142
164
|
const hasFraunces = /fraunces/i.test(html);
|
package/dist/live/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED