@freeappstore/compliance 0.3.0 → 0.5.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/dist/checks/brand-fonts.d.ts +2 -1
- package/dist/checks/brand-fonts.d.ts.map +1 -1
- package/dist/checks/brand-fonts.js +11 -7
- package/dist/checks/brand-fonts.js.map +1 -1
- package/dist/checks/brand-tokens.d.ts +22 -0
- package/dist/checks/brand-tokens.d.ts.map +1 -0
- package/dist/checks/brand-tokens.js +53 -0
- package/dist/checks/brand-tokens.js.map +1 -0
- package/dist/checks/bundle-size.d.ts +7 -1
- package/dist/checks/bundle-size.d.ts.map +1 -1
- package/dist/checks/bundle-size.js +35 -15
- package/dist/checks/bundle-size.js.map +1 -1
- package/dist/checks/dark-mode.d.ts +20 -0
- package/dist/checks/dark-mode.d.ts.map +1 -0
- package/dist/checks/dark-mode.js +48 -0
- package/dist/checks/dark-mode.js.map +1 -0
- package/dist/checks/html-meta.d.ts +16 -0
- package/dist/checks/html-meta.d.ts.map +1 -0
- package/dist/checks/html-meta.js +46 -0
- package/dist/checks/html-meta.js.map +1 -0
- package/dist/checks/license-mit.d.ts +13 -0
- package/dist/checks/license-mit.d.ts.map +1 -0
- package/dist/checks/license-mit.js +38 -0
- package/dist/checks/license-mit.js.map +1 -0
- package/dist/checks/manifest.d.ts +2 -1
- package/dist/checks/manifest.d.ts.map +1 -1
- package/dist/checks/manifest.js +7 -12
- package/dist/checks/manifest.js.map +1 -1
- package/dist/checks/no-brand-overrides.d.ts +2 -1
- package/dist/checks/no-brand-overrides.d.ts.map +1 -1
- package/dist/checks/no-brand-overrides.js +13 -18
- package/dist/checks/no-brand-overrides.js.map +1 -1
- package/dist/checks/no-env-production.d.ts +16 -0
- package/dist/checks/no-env-production.d.ts.map +1 -0
- package/dist/checks/no-env-production.js +33 -0
- package/dist/checks/no-env-production.js.map +1 -0
- package/dist/checks/no-placeholders.d.ts +2 -1
- package/dist/checks/no-placeholders.d.ts.map +1 -1
- package/dist/checks/no-placeholders.js +13 -24
- package/dist/checks/no-placeholders.js.map +1 -1
- package/dist/checks/no-scroll.d.ts +2 -1
- package/dist/checks/no-scroll.d.ts.map +1 -1
- package/dist/checks/no-scroll.js +12 -44
- package/dist/checks/no-scroll.js.map +1 -1
- package/dist/checks/no-tracking.d.ts +2 -1
- package/dist/checks/no-tracking.d.ts.map +1 -1
- package/dist/checks/no-tracking.js +12 -8
- package/dist/checks/no-tracking.js.map +1 -1
- package/dist/checks/pwa-meta.d.ts +19 -0
- package/dist/checks/pwa-meta.d.ts.map +1 -0
- package/dist/checks/pwa-meta.js +38 -0
- package/dist/checks/pwa-meta.js.map +1 -0
- package/dist/checks/store-link.d.ts +17 -0
- package/dist/checks/store-link.d.ts.map +1 -0
- package/dist/checks/store-link.js +36 -0
- package/dist/checks/store-link.js.map +1 -0
- package/dist/checks/unsafe-vh.d.ts +2 -1
- package/dist/checks/unsafe-vh.d.ts.map +1 -1
- package/dist/checks/unsafe-vh.js +10 -12
- package/dist/checks/unsafe-vh.js.map +1 -1
- package/dist/checks/viewport-support.d.ts +2 -1
- package/dist/checks/viewport-support.d.ts.map +1 -1
- package/dist/checks/viewport-support.js +11 -6
- package/dist/checks/viewport-support.js.map +1 -1
- package/dist/index.d.ts +25 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -18
- package/dist/index.js.map +1 -1
- package/dist/lib/file-source.d.ts +52 -0
- package/dist/lib/file-source.d.ts.map +1 -0
- package/dist/lib/file-source.js +148 -0
- package/dist/lib/file-source.js.map +1 -0
- package/dist/lib/gzip.d.ts +8 -0
- package/dist/lib/gzip.d.ts.map +1 -0
- package/dist/lib/gzip.js +26 -0
- package/dist/lib/gzip.js.map +1 -0
- package/dist/lib/project-type.d.ts +18 -0
- package/dist/lib/project-type.d.ts.map +1 -0
- package/dist/lib/project-type.js +34 -0
- package/dist/lib/project-type.js.map +1 -0
- package/dist/live/index.d.ts.map +1 -1
- package/dist/live/index.js +9 -7
- package/dist/live/index.js.map +1 -1
- package/package.json +1 -1
- package/LICENSE +0 -21
- package/dist/checks/brand-fonts.test.d.ts +0 -2
- package/dist/checks/brand-fonts.test.d.ts.map +0 -1
- package/dist/checks/brand-fonts.test.js +0 -45
- package/dist/checks/brand-fonts.test.js.map +0 -1
- package/dist/checks/bundle-size.test.d.ts +0 -2
- package/dist/checks/bundle-size.test.d.ts.map +0 -1
- package/dist/checks/bundle-size.test.js +0 -57
- package/dist/checks/bundle-size.test.js.map +0 -1
- package/dist/checks/manifest.test.d.ts +0 -2
- package/dist/checks/manifest.test.d.ts.map +0 -1
- package/dist/checks/manifest.test.js +0 -53
- package/dist/checks/manifest.test.js.map +0 -1
- package/dist/checks/no-brand-overrides.test.d.ts +0 -2
- package/dist/checks/no-brand-overrides.test.d.ts.map +0 -1
- package/dist/checks/no-brand-overrides.test.js +0 -102
- package/dist/checks/no-brand-overrides.test.js.map +0 -1
- package/dist/checks/no-placeholders.test.d.ts +0 -2
- package/dist/checks/no-placeholders.test.d.ts.map +0 -1
- package/dist/checks/no-placeholders.test.js +0 -46
- package/dist/checks/no-placeholders.test.js.map +0 -1
- package/dist/checks/no-scroll.test.d.ts +0 -2
- package/dist/checks/no-scroll.test.d.ts.map +0 -1
- package/dist/checks/no-scroll.test.js +0 -105
- package/dist/checks/no-scroll.test.js.map +0 -1
- package/dist/checks/no-tracking.test.d.ts +0 -2
- package/dist/checks/no-tracking.test.d.ts.map +0 -1
- package/dist/checks/no-tracking.test.js +0 -42
- package/dist/checks/no-tracking.test.js.map +0 -1
- package/dist/checks/unsafe-vh.test.d.ts +0 -2
- package/dist/checks/unsafe-vh.test.d.ts.map +0 -1
- package/dist/checks/unsafe-vh.test.js +0 -115
- package/dist/checks/unsafe-vh.test.js.map +0 -1
- package/dist/checks/viewport-support.test.d.ts +0 -2
- package/dist/checks/viewport-support.test.d.ts.map +0 -1
- package/dist/checks/viewport-support.test.js +0 -63
- package/dist/checks/viewport-support.test.js.map +0 -1
- package/dist/lib/walk.d.ts +0 -6
- package/dist/lib/walk.d.ts.map +0 -1
- package/dist/lib/walk.js +0 -35
- package/dist/lib/walk.js.map +0 -1
- package/dist/live/index.test.d.ts +0 -2
- package/dist/live/index.test.d.ts.map +0 -1
- package/dist/live/index.test.js +0 -259
- package/dist/live/index.test.js.map +0 -1
package/dist/checks/unsafe-vh.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { extname, relative } from 'node:path';
|
|
3
|
-
import { walk } from '../lib/walk.js';
|
|
4
1
|
/**
|
|
5
2
|
* Flag `100vh` (and Tailwind shortcuts that compile to it) in source.
|
|
6
3
|
*
|
|
@@ -22,16 +19,14 @@ import { walk } from '../lib/walk.js';
|
|
|
22
19
|
* sections that should stay constant as URL bar moves). Creators can
|
|
23
20
|
* acknowledge by leaving an `// allow-100vh` comment on the same line.
|
|
24
21
|
*/
|
|
25
|
-
export async function checkUnsafeVh(
|
|
22
|
+
export async function checkUnsafeVh(source) {
|
|
26
23
|
const issues = [];
|
|
27
|
-
for await (const
|
|
28
|
-
|
|
29
|
-
if (!SCAN_EXTS.has(ext))
|
|
24
|
+
for await (const path of source.list()) {
|
|
25
|
+
if (!SCAN_EXTS.has(extOf(path)))
|
|
30
26
|
continue;
|
|
31
|
-
const content = await
|
|
27
|
+
const content = await source.read(path);
|
|
32
28
|
if (!content)
|
|
33
29
|
continue;
|
|
34
|
-
const rel = relative(repoDir, file);
|
|
35
30
|
for (const { re, label } of PATTERNS) {
|
|
36
31
|
// Reset lastIndex defensively; we use `g` to find all matches.
|
|
37
32
|
re.lastIndex = 0;
|
|
@@ -41,7 +36,7 @@ export async function checkUnsafeVh(repoDir) {
|
|
|
41
36
|
// Allow opt-out via an inline `allow-100vh` comment on the same line.
|
|
42
37
|
if (lineHasAllowComment(content, m.index))
|
|
43
38
|
continue;
|
|
44
|
-
issues.push(`${
|
|
39
|
+
issues.push(`${path}:${line} ${label} — use 100svh or 100dvh`);
|
|
45
40
|
}
|
|
46
41
|
}
|
|
47
42
|
}
|
|
@@ -84,6 +79,11 @@ const PATTERNS = [
|
|
|
84
79
|
{ re: /(?<![\w-])min-h-screen(?![\w-])/g, label: 'min-h-screen (Tailwind: → min-height: 100vh)' },
|
|
85
80
|
{ re: /(?<![\w-])max-h-screen(?![\w-])/g, label: 'max-h-screen (Tailwind: → max-height: 100vh)' },
|
|
86
81
|
];
|
|
82
|
+
function extOf(path) {
|
|
83
|
+
const dot = path.lastIndexOf('.');
|
|
84
|
+
const slash = path.lastIndexOf('/');
|
|
85
|
+
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
86
|
+
}
|
|
87
87
|
function lineNumberAt(content, index) {
|
|
88
88
|
let n = 1;
|
|
89
89
|
for (let i = 0; i < index; i++)
|
|
@@ -97,11 +97,9 @@ function lineNumberAt(content, index) {
|
|
|
97
97
|
* — doesn't validate comment syntax, just trusts the marker.
|
|
98
98
|
*/
|
|
99
99
|
function lineHasAllowComment(content, index) {
|
|
100
|
-
// Find end of the current line.
|
|
101
100
|
let end = content.indexOf('\n', index);
|
|
102
101
|
if (end === -1)
|
|
103
102
|
end = content.length;
|
|
104
|
-
// Walk back to the start of the line for full context.
|
|
105
103
|
let start = content.lastIndexOf('\n', index);
|
|
106
104
|
if (start === -1)
|
|
107
105
|
start = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsafe-vh.js","sourceRoot":"","sources":["../../src/checks/unsafe-vh.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"unsafe-vh.js","sourceRoot":"","sources":["../../src/checks/unsafe-vh.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FileSource } from '../lib/file-source.js';
|
|
1
2
|
import type { CheckResult } from '../types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Apps and games must declare which screens and orientations they
|
|
@@ -19,5 +20,5 @@ import type { CheckResult } from '../types.js';
|
|
|
19
20
|
* If you genuinely don't care about orientation, set `"any"`. Don't
|
|
20
21
|
* leave it off — that's the only value that returns a fail.
|
|
21
22
|
*/
|
|
22
|
-
export declare function checkViewportSupport(
|
|
23
|
+
export declare function checkViewportSupport(source: FileSource): Promise<CheckResult>;
|
|
23
24
|
//# sourceMappingURL=viewport-support.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport-support.d.ts","sourceRoot":"","sources":["../../src/checks/viewport-support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewport-support.d.ts","sourceRoot":"","sources":["../../src/checks/viewport-support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAqEnF"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { join } from 'node:path';
|
|
1
|
+
const MANIFEST_PATH = 'web/public/manifest.json';
|
|
3
2
|
/**
|
|
4
3
|
* Apps and games must declare which screens and orientations they
|
|
5
4
|
* support, so the storefront can render a coverage badge ("works on
|
|
@@ -20,18 +19,24 @@ import { join } from 'node:path';
|
|
|
20
19
|
* If you genuinely don't care about orientation, set `"any"`. Don't
|
|
21
20
|
* leave it off — that's the only value that returns a fail.
|
|
22
21
|
*/
|
|
23
|
-
export async function checkViewportSupport(
|
|
24
|
-
const
|
|
22
|
+
export async function checkViewportSupport(source) {
|
|
23
|
+
const raw = await source.read(MANIFEST_PATH);
|
|
24
|
+
if (raw === null) {
|
|
25
|
+
return {
|
|
26
|
+
name: 'Viewport support',
|
|
27
|
+
status: 'fail',
|
|
28
|
+
detail: `${MANIFEST_PATH} not found`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
25
31
|
let manifest;
|
|
26
32
|
try {
|
|
27
|
-
const raw = await readFile(manifestPath, 'utf8');
|
|
28
33
|
manifest = JSON.parse(raw);
|
|
29
34
|
}
|
|
30
35
|
catch {
|
|
31
36
|
return {
|
|
32
37
|
name: 'Viewport support',
|
|
33
38
|
status: 'fail',
|
|
34
|
-
detail:
|
|
39
|
+
detail: `${MANIFEST_PATH} unparseable`,
|
|
35
40
|
};
|
|
36
41
|
}
|
|
37
42
|
const orientation = manifest['orientation'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewport-support.js","sourceRoot":"","sources":["../../src/checks/viewport-support.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewport-support.js","sourceRoot":"","sources":["../../src/checks/viewport-support.ts"],"names":[],"mappings":"AAGA,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAkB;IAC3D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,aAAa,YAAY;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,QAAiC,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,aAAa,cAAc;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,CACT,4BAA4B,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3G,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CACX,qEAAqE;YACnE,gGAAgG,CACnG,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,6BAA6B,CAAC,CAAC;IACpF,CAAC;SAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CACX,+BAA+B,QAAQ,qCAAqC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5G,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,8BAA8B,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACtF,WAAW,EAAE;gBACX,GAAG,MAAM;gBACT,gHAAgH;aACjH;SACF,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAE;YACpB,WAAW,EAAE,QAAQ;SACtB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,eAAe,WAAqB,UAAU,QAAQ,IAAI;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,KAAK;IACL,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,mBAAmB;CACpB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,21 +1,37 @@
|
|
|
1
|
-
import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
2
|
-
import { checkNoTracking } from './checks/no-tracking.js';
|
|
3
1
|
import { checkBrandFonts } from './checks/brand-fonts.js';
|
|
2
|
+
import { checkBrandTokens } from './checks/brand-tokens.js';
|
|
3
|
+
import { checkBundleSize } from './checks/bundle-size.js';
|
|
4
|
+
import { checkDarkMode } from './checks/dark-mode.js';
|
|
5
|
+
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
6
|
+
import { checkLicenseMit } from './checks/license-mit.js';
|
|
7
|
+
import { checkManifest } from './checks/manifest.js';
|
|
4
8
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
9
|
+
import { checkNoEnvProduction } from './checks/no-env-production.js';
|
|
10
|
+
import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
5
11
|
import { checkNoScroll } from './checks/no-scroll.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
12
|
+
import { checkNoTracking } from './checks/no-tracking.js';
|
|
13
|
+
import { checkPwaMeta } from './checks/pwa-meta.js';
|
|
14
|
+
import { checkStoreLink } from './checks/store-link.js';
|
|
9
15
|
import { checkUnsafeVh } from './checks/unsafe-vh.js';
|
|
16
|
+
import { checkViewportSupport } from './checks/viewport-support.js';
|
|
17
|
+
import { fsFileSource, mapFileSource } from './lib/file-source.js';
|
|
18
|
+
import { isGameProject } from './lib/project-type.js';
|
|
10
19
|
import type { CheckResult } from './types.js';
|
|
11
20
|
export type { CheckStatus, CheckResult } from './types.js';
|
|
12
|
-
export {
|
|
21
|
+
export type { FileSource } from './lib/file-source.js';
|
|
22
|
+
export { fsFileSource, mapFileSource, isGameProject };
|
|
23
|
+
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkNoBrandOverrides, checkNoEnvProduction, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPwaMeta, checkStoreLink, checkUnsafeVh, checkViewportSupport, };
|
|
13
24
|
export { auditLive, checkNoTrackingLive, checkBrandFontsLive, checkManifestLive, checkBundleSizeLive, checkUnsafeVhLive, } from './live/index.js';
|
|
14
25
|
export type { LiveAuditInput, LiveAuditReport } from './live/index.js';
|
|
15
26
|
/**
|
|
16
|
-
* Runs every compliance check against
|
|
17
|
-
*
|
|
18
|
-
*
|
|
27
|
+
* Runs every compliance check against the source. Two front doors:
|
|
28
|
+
* - `runChecks(repoDir)` — CLI / CI; reads from disk.
|
|
29
|
+
* - `runChecksFromFiles(map)` — VibeCode agent; reads from a Map.
|
|
30
|
+
*
|
|
31
|
+
* Both call the same underlying check functions via the FileSource
|
|
32
|
+
* abstraction, so rules stay in one place. Results are returned in a
|
|
33
|
+
* stable order so callers can render predictable output.
|
|
19
34
|
*/
|
|
20
35
|
export declare function runChecks(repoDir: string): Promise<CheckResult[]>;
|
|
36
|
+
export declare function runChecksFromFiles(files: Map<string, string>): Promise<CheckResult[]>;
|
|
21
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","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,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,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,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,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,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,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,GACrB,CAAC;AAKF,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEvE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAE3F"}
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,60 @@
|
|
|
1
|
-
import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
2
|
-
import { checkNoTracking } from './checks/no-tracking.js';
|
|
3
1
|
import { checkBrandFonts } from './checks/brand-fonts.js';
|
|
2
|
+
import { checkBrandTokens } from './checks/brand-tokens.js';
|
|
3
|
+
import { checkBundleSize } from './checks/bundle-size.js';
|
|
4
|
+
import { checkDarkMode } from './checks/dark-mode.js';
|
|
5
|
+
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
6
|
+
import { checkLicenseMit } from './checks/license-mit.js';
|
|
7
|
+
import { checkManifest } from './checks/manifest.js';
|
|
4
8
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
9
|
+
import { checkNoEnvProduction } from './checks/no-env-production.js';
|
|
10
|
+
import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
5
11
|
import { checkNoScroll } from './checks/no-scroll.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
12
|
+
import { checkNoTracking } from './checks/no-tracking.js';
|
|
13
|
+
import { checkPwaMeta } from './checks/pwa-meta.js';
|
|
14
|
+
import { checkStoreLink } from './checks/store-link.js';
|
|
9
15
|
import { checkUnsafeVh } from './checks/unsafe-vh.js';
|
|
10
|
-
|
|
16
|
+
import { checkViewportSupport } from './checks/viewport-support.js';
|
|
17
|
+
import { fsFileSource, mapFileSource } from './lib/file-source.js';
|
|
18
|
+
import { isGameProject } from './lib/project-type.js';
|
|
19
|
+
export { fsFileSource, mapFileSource, isGameProject };
|
|
20
|
+
export { checkBrandFonts, checkBrandTokens, checkBundleSize, checkDarkMode, checkHtmlMeta, checkLicenseMit, checkManifest, checkNoBrandOverrides, checkNoEnvProduction, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPwaMeta, checkStoreLink, checkUnsafeVh, checkViewportSupport, };
|
|
11
21
|
// Live-URL audit (used by the compliance audit Worker; runs in
|
|
12
22
|
// browser/Workers env, no filesystem). Separate export path so callers
|
|
13
23
|
// don't accidentally pull node:fs in via the file-walking checks.
|
|
14
24
|
export { auditLive, checkNoTrackingLive, checkBrandFontsLive, checkManifestLive, checkBundleSizeLive, checkUnsafeVhLive, } from './live/index.js';
|
|
15
25
|
/**
|
|
16
|
-
* Runs every compliance check against
|
|
17
|
-
*
|
|
18
|
-
*
|
|
26
|
+
* Runs every compliance check against the source. Two front doors:
|
|
27
|
+
* - `runChecks(repoDir)` — CLI / CI; reads from disk.
|
|
28
|
+
* - `runChecksFromFiles(map)` — VibeCode agent; reads from a Map.
|
|
29
|
+
*
|
|
30
|
+
* Both call the same underlying check functions via the FileSource
|
|
31
|
+
* abstraction, so rules stay in one place. Results are returned in a
|
|
32
|
+
* stable order so callers can render predictable output.
|
|
19
33
|
*/
|
|
20
34
|
export async function runChecks(repoDir) {
|
|
35
|
+
return runChecksOn(fsFileSource(repoDir));
|
|
36
|
+
}
|
|
37
|
+
export async function runChecksFromFiles(files) {
|
|
38
|
+
return runChecksOn(mapFileSource(files));
|
|
39
|
+
}
|
|
40
|
+
async function runChecksOn(source) {
|
|
21
41
|
return Promise.all([
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
42
|
+
checkLicenseMit(source),
|
|
43
|
+
checkNoEnvProduction(source),
|
|
44
|
+
checkNoPlaceholders(source),
|
|
45
|
+
checkNoTracking(source),
|
|
46
|
+
checkBrandFonts(source),
|
|
47
|
+
checkBrandTokens(source),
|
|
48
|
+
checkNoBrandOverrides(source),
|
|
49
|
+
checkNoScroll(source),
|
|
50
|
+
checkViewportSupport(source),
|
|
51
|
+
checkUnsafeVh(source),
|
|
52
|
+
checkHtmlMeta(source),
|
|
53
|
+
checkPwaMeta(source),
|
|
54
|
+
checkManifest(source),
|
|
55
|
+
checkStoreLink(source),
|
|
56
|
+
checkDarkMode(source),
|
|
57
|
+
checkBundleSize(source),
|
|
31
58
|
]);
|
|
32
59
|
}
|
|
33
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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,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,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,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,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,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,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACtD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,GACrB,CAAC;AAEF,+DAA+D;AAC/D,uEAAuE;AACvE,kEAAkE;AAClE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB;;;;;;;;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,oBAAoB,CAAC,MAAM,CAAC;QAC5B,mBAAmB,CAAC,MAAM,CAAC;QAC3B,eAAe,CAAC,MAAM,CAAC;QACvB,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,aAAa,CAAC,MAAM,CAAC;QACrB,cAAc,CAAC,MAAM,CAAC;QACtB,aAAa,CAAC,MAAM,CAAC;QACrB,eAAe,CAAC,MAAM,CAAC;KACxB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-agnostic file access for compliance checks.
|
|
3
|
+
*
|
|
4
|
+
* Why: the CLI scans a real directory on disk; the VibeCode agent runs
|
|
5
|
+
* in a Cloudflare Worker (no node:fs) and holds files in a Map. Both
|
|
6
|
+
* call the same checks via this interface so rules stay in one place.
|
|
7
|
+
*
|
|
8
|
+
* Conventions:
|
|
9
|
+
* - Paths are POSIX-style and relative to the repo root
|
|
10
|
+
* (e.g. `web/src/App.tsx`).
|
|
11
|
+
* - `read` returns null for missing files — checks decide whether
|
|
12
|
+
* missing == fail or missing == not-applicable.
|
|
13
|
+
* - `list()` already excludes noise dirs (.git, node_modules, dist,
|
|
14
|
+
* etc.). Implementations are responsible for that filtering.
|
|
15
|
+
*/
|
|
16
|
+
export interface FileSource {
|
|
17
|
+
/** Yield every relevant file path. Implementations skip noise dirs. */
|
|
18
|
+
list(): AsyncIterable<string>;
|
|
19
|
+
/** UTF-8 text. Returns null if the path doesn't exist. */
|
|
20
|
+
read(path: string): Promise<string | null>;
|
|
21
|
+
/** Raw bytes. Returns null if the path doesn't exist. Optional — only
|
|
22
|
+
* bundle-size needs binary access today. */
|
|
23
|
+
readBytes?(path: string): Promise<Uint8Array | null>;
|
|
24
|
+
/** Names of direct children of `dir`. Returns null if dir missing.
|
|
25
|
+
* Optional — only bundle-size needs directory enumeration. */
|
|
26
|
+
listDir?(dir: string): Promise<string[] | null>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Filesystem-backed FileSource — used by the CLI and CI. Walks the
|
|
30
|
+
* directory tree once on first list() iteration; uses node:fs for
|
|
31
|
+
* read/readBytes/listDir.
|
|
32
|
+
*
|
|
33
|
+
* Paths containing `..` segments are rejected — every read returns
|
|
34
|
+
* null. Defense in depth: today's checks only pass paths that came
|
|
35
|
+
* from `list()` (which stays inside the root), but a future buggy or
|
|
36
|
+
* malicious check could try `source.read('../etc/passwd')`. We refuse
|
|
37
|
+
* rather than letting `path.join` resolve outside repoDir.
|
|
38
|
+
*/
|
|
39
|
+
export declare function fsFileSource(repoDir: string): FileSource;
|
|
40
|
+
/**
|
|
41
|
+
* Map-backed FileSource — used by the VibeCode agent (Workers env).
|
|
42
|
+
* The agent's session DO holds the virtual filesystem as a Map; this
|
|
43
|
+
* adapter exposes it through the same interface as the on-disk CLI.
|
|
44
|
+
*
|
|
45
|
+
* `readBytes` decodes the stored UTF-8 string back to bytes — fine for
|
|
46
|
+
* text-only checks. The agent has no built artefacts (it runs pre-
|
|
47
|
+
* deploy), so bundle-size will return its "not built yet" warn anyway.
|
|
48
|
+
*
|
|
49
|
+
* `listDir` synthesises directory listings from the Map keys.
|
|
50
|
+
*/
|
|
51
|
+
export declare function mapFileSource(files: Map<string, string>): FileSource;
|
|
52
|
+
//# sourceMappingURL=file-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B,0DAA0D;IAC1D,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C;iDAC6C;IAC7C,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACrD;mEAC+D;IAC/D,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;CACjD;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA+BxD;AA4BD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CA8BpE"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-agnostic file access for compliance checks.
|
|
3
|
+
*
|
|
4
|
+
* Why: the CLI scans a real directory on disk; the VibeCode agent runs
|
|
5
|
+
* in a Cloudflare Worker (no node:fs) and holds files in a Map. Both
|
|
6
|
+
* call the same checks via this interface so rules stay in one place.
|
|
7
|
+
*
|
|
8
|
+
* Conventions:
|
|
9
|
+
* - Paths are POSIX-style and relative to the repo root
|
|
10
|
+
* (e.g. `web/src/App.tsx`).
|
|
11
|
+
* - `read` returns null for missing files — checks decide whether
|
|
12
|
+
* missing == fail or missing == not-applicable.
|
|
13
|
+
* - `list()` already excludes noise dirs (.git, node_modules, dist,
|
|
14
|
+
* etc.). Implementations are responsible for that filtering.
|
|
15
|
+
*/
|
|
16
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
17
|
+
import { join, relative, sep } from 'node:path';
|
|
18
|
+
const SKIP_DIRS = new Set(['.git', 'node_modules', 'dist', '.next', '.cache', '.wrangler', '.turbo']);
|
|
19
|
+
/**
|
|
20
|
+
* Filesystem-backed FileSource — used by the CLI and CI. Walks the
|
|
21
|
+
* directory tree once on first list() iteration; uses node:fs for
|
|
22
|
+
* read/readBytes/listDir.
|
|
23
|
+
*
|
|
24
|
+
* Paths containing `..` segments are rejected — every read returns
|
|
25
|
+
* null. Defense in depth: today's checks only pass paths that came
|
|
26
|
+
* from `list()` (which stays inside the root), but a future buggy or
|
|
27
|
+
* malicious check could try `source.read('../etc/passwd')`. We refuse
|
|
28
|
+
* rather than letting `path.join` resolve outside repoDir.
|
|
29
|
+
*/
|
|
30
|
+
export function fsFileSource(repoDir) {
|
|
31
|
+
return {
|
|
32
|
+
async *list() {
|
|
33
|
+
yield* walk(repoDir, repoDir);
|
|
34
|
+
},
|
|
35
|
+
async read(path) {
|
|
36
|
+
if (hasTraversal(path))
|
|
37
|
+
return null;
|
|
38
|
+
try {
|
|
39
|
+
return await readFile(join(repoDir, path), 'utf8');
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
async readBytes(path) {
|
|
46
|
+
if (hasTraversal(path))
|
|
47
|
+
return null;
|
|
48
|
+
try {
|
|
49
|
+
const buf = await readFile(join(repoDir, path));
|
|
50
|
+
return new Uint8Array(buf);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
async listDir(dir) {
|
|
57
|
+
if (hasTraversal(dir))
|
|
58
|
+
return null;
|
|
59
|
+
try {
|
|
60
|
+
return await readdir(join(repoDir, dir));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** True if `path` contains a `..` segment or is absolute. */
|
|
69
|
+
function hasTraversal(path) {
|
|
70
|
+
if (path.startsWith('/') || /^[a-zA-Z]:/.test(path))
|
|
71
|
+
return true; // absolute
|
|
72
|
+
return path.split(/[/\\]/).some((seg) => seg === '..');
|
|
73
|
+
}
|
|
74
|
+
async function* walk(dir, root) {
|
|
75
|
+
let entries;
|
|
76
|
+
try {
|
|
77
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const entry of entries) {
|
|
83
|
+
const full = join(dir, entry.name);
|
|
84
|
+
if (entry.isDirectory()) {
|
|
85
|
+
if (SKIP_DIRS.has(entry.name))
|
|
86
|
+
continue;
|
|
87
|
+
yield* walk(full, root);
|
|
88
|
+
}
|
|
89
|
+
else if (entry.isFile()) {
|
|
90
|
+
// Always emit POSIX-style paths so checks can rely on consistent
|
|
91
|
+
// separators across platforms.
|
|
92
|
+
yield relative(root, full).split(sep).join('/');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Map-backed FileSource — used by the VibeCode agent (Workers env).
|
|
98
|
+
* The agent's session DO holds the virtual filesystem as a Map; this
|
|
99
|
+
* adapter exposes it through the same interface as the on-disk CLI.
|
|
100
|
+
*
|
|
101
|
+
* `readBytes` decodes the stored UTF-8 string back to bytes — fine for
|
|
102
|
+
* text-only checks. The agent has no built artefacts (it runs pre-
|
|
103
|
+
* deploy), so bundle-size will return its "not built yet" warn anyway.
|
|
104
|
+
*
|
|
105
|
+
* `listDir` synthesises directory listings from the Map keys.
|
|
106
|
+
*/
|
|
107
|
+
export function mapFileSource(files) {
|
|
108
|
+
return {
|
|
109
|
+
async *list() {
|
|
110
|
+
for (const path of files.keys()) {
|
|
111
|
+
if (isSkippedPath(path))
|
|
112
|
+
continue;
|
|
113
|
+
yield path;
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
async read(path) {
|
|
117
|
+
return files.get(path) ?? null;
|
|
118
|
+
},
|
|
119
|
+
async readBytes(path) {
|
|
120
|
+
const text = files.get(path);
|
|
121
|
+
if (text === undefined)
|
|
122
|
+
return null;
|
|
123
|
+
return new TextEncoder().encode(text);
|
|
124
|
+
},
|
|
125
|
+
async listDir(dir) {
|
|
126
|
+
const prefix = dir.endsWith('/') ? dir : `${dir}/`;
|
|
127
|
+
const children = new Set();
|
|
128
|
+
let saw = false;
|
|
129
|
+
for (const path of files.keys()) {
|
|
130
|
+
if (!path.startsWith(prefix))
|
|
131
|
+
continue;
|
|
132
|
+
saw = true;
|
|
133
|
+
const rest = path.slice(prefix.length);
|
|
134
|
+
const slash = rest.indexOf('/');
|
|
135
|
+
children.add(slash === -1 ? rest : rest.slice(0, slash));
|
|
136
|
+
}
|
|
137
|
+
return saw ? [...children] : null;
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function isSkippedPath(path) {
|
|
142
|
+
for (const seg of path.split('/')) {
|
|
143
|
+
if (SKIP_DIRS.has(seg))
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=file-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gzip via the Web Streams API. Available in Node 18+ and Cloudflare
|
|
3
|
+
* Workers, so the same helper works in both the CLI's filesystem
|
|
4
|
+
* checks and the audit Worker's live checks. Avoids divergence
|
|
5
|
+
* between source-side and live measurements of bundle size.
|
|
6
|
+
*/
|
|
7
|
+
export declare function gzipByteLength(input: Uint8Array): Promise<number>;
|
|
8
|
+
//# sourceMappingURL=gzip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gzip.d.ts","sourceRoot":"","sources":["../../src/lib/gzip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBvE"}
|
package/dist/lib/gzip.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gzip via the Web Streams API. Available in Node 18+ and Cloudflare
|
|
3
|
+
* Workers, so the same helper works in both the CLI's filesystem
|
|
4
|
+
* checks and the audit Worker's live checks. Avoids divergence
|
|
5
|
+
* between source-side and live measurements of bundle size.
|
|
6
|
+
*/
|
|
7
|
+
export async function gzipByteLength(input) {
|
|
8
|
+
const readable = new ReadableStream({
|
|
9
|
+
start(controller) {
|
|
10
|
+
controller.enqueue(input);
|
|
11
|
+
controller.close();
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
const compressed = readable.pipeThrough(new CompressionStream('gzip'));
|
|
15
|
+
const reader = compressed.getReader();
|
|
16
|
+
let total = 0;
|
|
17
|
+
for (;;) {
|
|
18
|
+
const { value, done } = await reader.read();
|
|
19
|
+
if (done)
|
|
20
|
+
break;
|
|
21
|
+
if (value)
|
|
22
|
+
total += value.byteLength;
|
|
23
|
+
}
|
|
24
|
+
return total;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=gzip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gzip.js","sourceRoot":"","sources":["../../src/lib/gzip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAiB;IACpD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAa;QAC9C,KAAK,CAAC,UAAU;YACd,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KACF,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,SAAS,CAAC;QACR,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI;YAAE,MAAM;QAChB,IAAI,KAAK;YAAE,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FileSource } from './file-source.js';
|
|
2
|
+
/**
|
|
3
|
+
* "Is this a game project?" — used by checks that diverge between apps
|
|
4
|
+
* (FreeAppStore) and games (FreeGameStore). Apps run inside a sidebar+
|
|
5
|
+
* scrolling Shell; games run inside a viewport-locked GameShell with
|
|
6
|
+
* different brand tokens. Several rules need to know which they're
|
|
7
|
+
* looking at.
|
|
8
|
+
*
|
|
9
|
+
* Detection signals (any one is sufficient):
|
|
10
|
+
* - `@freeappstore/games` listed in any package.json
|
|
11
|
+
* - A TS/JS source file imports from `@freeappstore/games`
|
|
12
|
+
*
|
|
13
|
+
* Both signals exist because workspace hoisting can put the dep in the
|
|
14
|
+
* root package.json (where a per-app scan would miss it) and template
|
|
15
|
+
* scaffolds put the import in app source.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isGameProject(source: FileSource): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=project-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-type.d.ts","sourceRoot":"","sources":["../../src/lib/project-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAaxE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Is this a game project?" — used by checks that diverge between apps
|
|
3
|
+
* (FreeAppStore) and games (FreeGameStore). Apps run inside a sidebar+
|
|
4
|
+
* scrolling Shell; games run inside a viewport-locked GameShell with
|
|
5
|
+
* different brand tokens. Several rules need to know which they're
|
|
6
|
+
* looking at.
|
|
7
|
+
*
|
|
8
|
+
* Detection signals (any one is sufficient):
|
|
9
|
+
* - `@freeappstore/games` listed in any package.json
|
|
10
|
+
* - A TS/JS source file imports from `@freeappstore/games`
|
|
11
|
+
*
|
|
12
|
+
* Both signals exist because workspace hoisting can put the dep in the
|
|
13
|
+
* root package.json (where a per-app scan would miss it) and template
|
|
14
|
+
* scaffolds put the import in app source.
|
|
15
|
+
*/
|
|
16
|
+
export async function isGameProject(source) {
|
|
17
|
+
for await (const path of source.list()) {
|
|
18
|
+
const base = path.split('/').pop() ?? '';
|
|
19
|
+
if (base !== 'package.json')
|
|
20
|
+
continue;
|
|
21
|
+
const content = await source.read(path);
|
|
22
|
+
if (content && /@freeappstore\/games/.test(content))
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
for await (const path of source.list()) {
|
|
26
|
+
if (!path.endsWith('.ts') && !path.endsWith('.tsx'))
|
|
27
|
+
continue;
|
|
28
|
+
const content = await source.read(path);
|
|
29
|
+
if (content && /from\s+['"]@freeappstore\/games['"]/.test(content))
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=project-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-type.js","sourceRoot":"","sources":["../../src/lib/project-type.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAkB;IACpD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACzC,IAAI,IAAI,KAAK,cAAc;YAAE,SAAS;QACtC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACnE,CAAC;IACD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC9D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,OAAO,IAAI,qCAAqC,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
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;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/live/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc/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,CA2D/E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAa7D;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,CA8C3F;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD7F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgD3F"}
|