@freegamestore/compliance 0.8.3 → 0.10.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/audio-mute-respect.d.ts.map +1 -1
- package/dist/checks/audio-mute-respect.js +1 -5
- package/dist/checks/audio-mute-respect.js.map +1 -1
- package/dist/checks/brand-fonts.d.ts.map +1 -1
- package/dist/checks/brand-fonts.js +1 -5
- package/dist/checks/brand-fonts.js.map +1 -1
- package/dist/checks/claude-md-slim.js +1 -1
- package/dist/checks/claude-md-slim.js.map +1 -1
- package/dist/checks/license-mit.d.ts.map +1 -1
- package/dist/checks/license-mit.js +8 -1
- package/dist/checks/license-mit.js.map +1 -1
- package/dist/checks/no-any-types.d.ts.map +1 -1
- package/dist/checks/no-any-types.js +1 -5
- package/dist/checks/no-any-types.js.map +1 -1
- package/dist/checks/no-brand-overrides.d.ts.map +1 -1
- package/dist/checks/no-brand-overrides.js +34 -8
- package/dist/checks/no-brand-overrides.js.map +1 -1
- package/dist/checks/no-console-log.d.ts.map +1 -1
- package/dist/checks/no-console-log.js +1 -5
- package/dist/checks/no-console-log.js.map +1 -1
- package/dist/checks/no-cookies.d.ts.map +1 -1
- package/dist/checks/no-cookies.js +1 -5
- package/dist/checks/no-cookies.js.map +1 -1
- package/dist/checks/no-excessive-inline-styles.d.ts.map +1 -1
- package/dist/checks/no-excessive-inline-styles.js +1 -5
- package/dist/checks/no-excessive-inline-styles.js.map +1 -1
- package/dist/checks/no-external-fetch.d.ts.map +1 -1
- package/dist/checks/no-external-fetch.js +1 -5
- package/dist/checks/no-external-fetch.js.map +1 -1
- package/dist/checks/no-external-scripts.d.ts +2 -2
- package/dist/checks/no-external-scripts.d.ts.map +1 -1
- package/dist/checks/no-external-scripts.js +26 -12
- package/dist/checks/no-external-scripts.js.map +1 -1
- package/dist/checks/no-hardcoded-colors.d.ts.map +1 -1
- package/dist/checks/no-hardcoded-colors.js +1 -5
- package/dist/checks/no-hardcoded-colors.js.map +1 -1
- package/dist/checks/no-page-policy.d.ts +17 -0
- package/dist/checks/no-page-policy.d.ts.map +1 -0
- package/dist/checks/no-page-policy.js +45 -0
- package/dist/checks/no-page-policy.js.map +1 -0
- package/dist/checks/no-payment-capabilities.d.ts +4 -0
- package/dist/checks/no-payment-capabilities.d.ts.map +1 -0
- package/dist/checks/no-payment-capabilities.js +129 -0
- package/dist/checks/no-payment-capabilities.js.map +1 -0
- package/dist/checks/no-payment-sdk.d.ts.map +1 -1
- package/dist/checks/no-payment-sdk.js +1 -5
- package/dist/checks/no-payment-sdk.js.map +1 -1
- package/dist/checks/no-placeholders.d.ts.map +1 -1
- package/dist/checks/no-placeholders.js +1 -5
- package/dist/checks/no-placeholders.js.map +1 -1
- package/dist/checks/no-scroll.d.ts.map +1 -1
- package/dist/checks/no-scroll.js +1 -5
- package/dist/checks/no-scroll.js.map +1 -1
- package/dist/checks/no-tracking.d.ts.map +1 -1
- package/dist/checks/no-tracking.js +19 -6
- package/dist/checks/no-tracking.js.map +1 -1
- package/dist/checks/permissions-declared.d.ts +13 -0
- package/dist/checks/permissions-declared.d.ts.map +1 -0
- package/dist/checks/permissions-declared.js +43 -0
- package/dist/checks/permissions-declared.js.map +1 -0
- package/dist/checks/pwa-offline.d.ts.map +1 -1
- package/dist/checks/pwa-offline.js +10 -4
- package/dist/checks/pwa-offline.js.map +1 -1
- package/dist/checks/seo-metadata.d.ts +5 -0
- package/dist/checks/seo-metadata.d.ts.map +1 -0
- package/dist/checks/seo-metadata.js +23 -0
- package/dist/checks/seo-metadata.js.map +1 -0
- package/dist/checks/unsafe-vh.d.ts.map +1 -1
- package/dist/checks/unsafe-vh.js +1 -5
- package/dist/checks/unsafe-vh.js.map +1 -1
- package/dist/checks/uses-game-sdk.d.ts.map +1 -1
- package/dist/checks/uses-game-sdk.js +1 -5
- package/dist/checks/uses-game-sdk.js.map +1 -1
- package/dist/checks/uses-localstorage.d.ts +7 -3
- package/dist/checks/uses-localstorage.d.ts.map +1 -1
- package/dist/checks/uses-localstorage.js +12 -14
- package/dist/checks/uses-localstorage.js.map +1 -1
- package/dist/game-deploy-workflow.d.ts +12 -0
- package/dist/game-deploy-workflow.d.ts.map +1 -0
- package/dist/game-deploy-workflow.js +34 -0
- package/dist/game-deploy-workflow.js.map +1 -0
- package/dist/game-metadata.d.ts +60 -0
- package/dist/game-metadata.d.ts.map +1 -0
- package/dist/game-metadata.js +194 -0
- package/dist/game-metadata.js.map +1 -0
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -60
- package/dist/index.js.map +1 -1
- package/dist/lib/file-source.d.ts +5 -10
- package/dist/lib/file-source.d.ts.map +1 -1
- package/dist/lib/file-source.js +7 -80
- package/dist/lib/file-source.js.map +1 -1
- package/dist/lib/fs-file-source.d.ts +21 -0
- package/dist/lib/fs-file-source.d.ts.map +1 -0
- package/dist/lib/fs-file-source.js +88 -0
- package/dist/lib/fs-file-source.js.map +1 -0
- package/dist/lib/inline-manifest.d.ts.map +1 -1
- package/dist/lib/inline-manifest.js +14 -59
- package/dist/lib/inline-manifest.js.map +1 -1
- package/dist/lib/path.d.ts +11 -0
- package/dist/lib/path.d.ts.map +1 -0
- package/dist/lib/path.js +15 -0
- package/dist/lib/path.js.map +1 -0
- package/dist/lib/permissions.d.ts +44 -0
- package/dist/lib/permissions.d.ts.map +1 -0
- package/dist/lib/permissions.js +132 -0
- package/dist/lib/permissions.js.map +1 -0
- package/dist/lib/strip.d.ts.map +1 -1
- package/dist/lib/strip.js +20 -26
- package/dist/lib/strip.js.map +1 -1
- package/dist/live/index.js +1 -1
- package/dist/live/index.js.map +1 -1
- package/dist/run-checks.d.ts +18 -0
- package/dist/run-checks.d.ts.map +1 -0
- package/dist/run-checks.js +112 -0
- package/dist/run-checks.js.map +1 -0
- package/dist/worker.d.ts +60 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +58 -0
- package/dist/worker.js.map +1 -0
- package/package.json +7 -2
package/dist/index.js
CHANGED
|
@@ -19,16 +19,20 @@ import { checkNoExcessiveInlineStyles } from './checks/no-excessive-inline-style
|
|
|
19
19
|
import { checkNoExternalFetch } from './checks/no-external-fetch.js';
|
|
20
20
|
import { checkNoExternalScripts } from './checks/no-external-scripts.js';
|
|
21
21
|
import { checkNoHardcodedColors } from './checks/no-hardcoded-colors.js';
|
|
22
|
+
import { checkNoPagePolicy } from './checks/no-page-policy.js';
|
|
23
|
+
import { checkNoPaymentCapabilities } from './checks/no-payment-capabilities.js';
|
|
22
24
|
import { checkNoPaymentSdk } from './checks/no-payment-sdk.js';
|
|
23
25
|
import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
24
26
|
import { checkNoScroll } from './checks/no-scroll.js';
|
|
25
27
|
import { checkNoTracking } from './checks/no-tracking.js';
|
|
28
|
+
import { checkPermissionsDeclared } from './checks/permissions-declared.js';
|
|
26
29
|
import { checkPwaIcons } from './checks/pwa-icons.js';
|
|
27
30
|
import { checkMaskableIcon } from './checks/pwa-maskable-icon.js';
|
|
28
31
|
import { checkPwaMeta } from './checks/pwa-meta.js';
|
|
29
32
|
import { checkPwaOffline } from './checks/pwa-offline.js';
|
|
30
33
|
import { checkReactStrictMode } from './checks/react-strict-mode.js';
|
|
31
34
|
import { checkSdkVersion } from './checks/sdk-version.js';
|
|
35
|
+
import { checkSeoMetadata } from './checks/seo-metadata.js';
|
|
32
36
|
import { checkStoreLink } from './checks/store-link.js';
|
|
33
37
|
import { checkTechVersions } from './checks/tech-versions.js';
|
|
34
38
|
import { checkTypescriptStrict } from './checks/typescript-strict.js';
|
|
@@ -36,74 +40,29 @@ import { checkUnsafeVh } from './checks/unsafe-vh.js';
|
|
|
36
40
|
import { checkUsesGameSdk } from './checks/uses-game-sdk.js';
|
|
37
41
|
import { checkUsesLocalStorage } from './checks/uses-localstorage.js';
|
|
38
42
|
import { checkViewportSupport } from './checks/viewport-support.js';
|
|
39
|
-
import {
|
|
43
|
+
import { mapFileSource } from './lib/file-source.js';
|
|
44
|
+
import { fsFileSource } from './lib/fs-file-source.js';
|
|
40
45
|
import { isGameProject } from './lib/project-type.js';
|
|
46
|
+
import { runChecksFromFiles, runChecksOn } from './run-checks.js';
|
|
47
|
+
export { GAME_CI_WORKFLOW, GAME_DEPLOY_WORKFLOW } from './game-deploy-workflow.js';
|
|
48
|
+
// Game metadata: shared categories and viewports across CLI, console, admin, auditor.
|
|
49
|
+
export { GAME_CATEGORIES, GAME_CATEGORY_LABELS, getCategoryByLabel, getCategoryBySlug, getCategorySlugs, isValidCategorySlug, normalizeCategorySlug, REFERENCE_VIEWPORTS, } from './game-metadata.js';
|
|
50
|
+
export { detectPermissions, detectPermissionsInText, PERMISSION_IDS, PERMISSIONS, parseDeclaredPermissions, } from './lib/permissions.js';
|
|
41
51
|
// Live-URL audit (used by the compliance audit Worker; runs in
|
|
42
52
|
// browser/Workers env, no filesystem). Separate export path so callers
|
|
43
53
|
// don't accidentally pull node:fs in via the file-walking checks.
|
|
44
54
|
export { auditLive, checkBrandFontsLive, checkBundleSizeLive, checkManifestLive, checkNoTrackingLive, checkUnsafeVhLive, } from './live/index.js';
|
|
45
|
-
|
|
55
|
+
// Check battery + the Map front door live in run-checks.ts (node-free,
|
|
56
|
+
// also re-exported from ./worker for Workers). Re-exported here so
|
|
57
|
+
// existing CLI/back-end importers keep their single import site.
|
|
58
|
+
export { checkAudioMuteRespect, checkBrandFonts, checkBrandTokens, checkBundleSize, checkClaudeMdSlim, checkDarkMode, checkDeployWorkflow, checkGameNaming, checkGitignoreComplete, checkHtmlMeta, checkLicenseMit, checkManifest, checkMaskableIcon, checkNoAnyTypes, checkNoBrandOverrides, checkNoConsoleLog, checkNoCookies, checkNoEnvProduction, checkNoExcessiveInlineStyles, checkNoExternalFetch, checkNoExternalScripts, checkNoHardcodedColors, checkNoPagePolicy, checkNoPaymentCapabilities, checkNoPaymentSdk, checkNoPlaceholders, checkNoScroll, checkNoTracking, checkPermissionsDeclared, checkPwaIcons, checkPwaMeta, checkPwaOffline, checkReactStrictMode, checkSdkVersion, checkSeoMetadata, checkStoreLink, checkTechVersions, checkTypescriptStrict, checkUnsafeVh, checkUsesGameSdk, checkUsesLocalStorage, checkViewportSupport, fsFileSource, isGameProject, mapFileSource, runChecksFromFiles, runChecksOn, };
|
|
46
59
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* Both call the same underlying check functions via the FileSource
|
|
52
|
-
* abstraction, so rules stay in one place. Results are returned in a
|
|
53
|
-
* stable order so callers can render predictable output.
|
|
60
|
+
* On-disk front door — CLI / CI. Reads from a real directory via
|
|
61
|
+
* fsFileSource (node:fs). The Map front door (`runChecksFromFiles`)
|
|
62
|
+
* shares the same check battery through the FileSource abstraction, so
|
|
63
|
+
* rules stay in one place regardless of where the files come from.
|
|
54
64
|
*/
|
|
55
65
|
export async function runChecks(repoDir) {
|
|
56
66
|
return runChecksOn(fsFileSource(repoDir));
|
|
57
67
|
}
|
|
58
|
-
export async function runChecksFromFiles(files) {
|
|
59
|
-
return runChecksOn(mapFileSource(files));
|
|
60
|
-
}
|
|
61
|
-
async function runChecksOn(source) {
|
|
62
|
-
return Promise.all([
|
|
63
|
-
// Platform rules (hard fail)
|
|
64
|
-
checkLicenseMit(source),
|
|
65
|
-
checkNoEnvProduction(source),
|
|
66
|
-
checkNoPlaceholders(source),
|
|
67
|
-
checkNoTracking(source),
|
|
68
|
-
checkNoPaymentSdk(source),
|
|
69
|
-
checkNoCookies(source),
|
|
70
|
-
checkNoExternalScripts(source),
|
|
71
|
-
checkNoExternalFetch(source),
|
|
72
|
-
// Brand & design
|
|
73
|
-
checkAudioMuteRespect(source),
|
|
74
|
-
checkBrandFonts(source),
|
|
75
|
-
checkBrandTokens(source),
|
|
76
|
-
checkNoBrandOverrides(source),
|
|
77
|
-
checkDarkMode(source),
|
|
78
|
-
// Layout & viewport
|
|
79
|
-
checkNoScroll(source),
|
|
80
|
-
checkViewportSupport(source),
|
|
81
|
-
checkUnsafeVh(source),
|
|
82
|
-
// HTML & PWA
|
|
83
|
-
checkHtmlMeta(source),
|
|
84
|
-
checkPwaMeta(source),
|
|
85
|
-
checkPwaOffline(source),
|
|
86
|
-
checkManifest(source),
|
|
87
|
-
checkMaskableIcon(source),
|
|
88
|
-
checkPwaIcons(source),
|
|
89
|
-
// SDK & code quality
|
|
90
|
-
checkUsesGameSdk(source),
|
|
91
|
-
checkTypescriptStrict(source),
|
|
92
|
-
checkStoreLink(source),
|
|
93
|
-
checkBundleSize(source),
|
|
94
|
-
checkClaudeMdSlim(source),
|
|
95
|
-
// Warnings (guidelines, not gates)
|
|
96
|
-
checkSdkVersion(source),
|
|
97
|
-
checkTechVersions(source),
|
|
98
|
-
checkNoAnyTypes(source),
|
|
99
|
-
checkNoConsoleLog(source),
|
|
100
|
-
checkUsesLocalStorage(source),
|
|
101
|
-
checkGameNaming(source),
|
|
102
|
-
checkNoHardcodedColors(source),
|
|
103
|
-
checkNoExcessiveInlineStyles(source),
|
|
104
|
-
checkDeployWorkflow(source),
|
|
105
|
-
checkGitignoreComplete(source),
|
|
106
|
-
checkReactStrictMode(source),
|
|
107
|
-
]);
|
|
108
|
-
}
|
|
109
68
|
//# 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,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,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,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,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,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,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,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,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,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,17 +26,12 @@ export interface FileSource {
|
|
|
26
26
|
listDir?(dir: string): Promise<string[] | null>;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
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.
|
|
29
|
+
* Noise dirs skipped by every FileSource. Exported so the on-disk
|
|
30
|
+
* walker (fs-file-source.ts) shares the same list as the Map adapter
|
|
31
|
+
* below. Kept in this node-free module so importing it (or mapFileSource)
|
|
32
|
+
* never drags node:fs into a Worker bundle.
|
|
38
33
|
*/
|
|
39
|
-
export declare
|
|
34
|
+
export declare const SKIP_DIRS: Set<string>;
|
|
40
35
|
/**
|
|
41
36
|
* Map-backed FileSource — used by the VibeCode agent (Workers env).
|
|
42
37
|
* The agent's session DO holds the virtual filesystem as a Map; this
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,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;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAQpB,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU,CA8BpE"}
|
package/dist/lib/file-source.js
CHANGED
|
@@ -13,9 +13,13 @@
|
|
|
13
13
|
* - `list()` already excludes noise dirs (.git, node_modules, dist,
|
|
14
14
|
* etc.). Implementations are responsible for that filtering.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Noise dirs skipped by every FileSource. Exported so the on-disk
|
|
18
|
+
* walker (fs-file-source.ts) shares the same list as the Map adapter
|
|
19
|
+
* below. Kept in this node-free module so importing it (or mapFileSource)
|
|
20
|
+
* never drags node:fs into a Worker bundle.
|
|
21
|
+
*/
|
|
22
|
+
export const SKIP_DIRS = new Set([
|
|
19
23
|
'.git',
|
|
20
24
|
'node_modules',
|
|
21
25
|
'dist',
|
|
@@ -24,83 +28,6 @@ const SKIP_DIRS = new Set([
|
|
|
24
28
|
'.wrangler',
|
|
25
29
|
'.turbo',
|
|
26
30
|
]);
|
|
27
|
-
/**
|
|
28
|
-
* Filesystem-backed FileSource — used by the CLI and CI. Walks the
|
|
29
|
-
* directory tree once on first list() iteration; uses node:fs for
|
|
30
|
-
* read/readBytes/listDir.
|
|
31
|
-
*
|
|
32
|
-
* Paths containing `..` segments are rejected — every read returns
|
|
33
|
-
* null. Defense in depth: today's checks only pass paths that came
|
|
34
|
-
* from `list()` (which stays inside the root), but a future buggy or
|
|
35
|
-
* malicious check could try `source.read('../etc/passwd')`. We refuse
|
|
36
|
-
* rather than letting `path.join` resolve outside repoDir.
|
|
37
|
-
*/
|
|
38
|
-
export function fsFileSource(repoDir) {
|
|
39
|
-
return {
|
|
40
|
-
async *list() {
|
|
41
|
-
yield* walk(repoDir, repoDir);
|
|
42
|
-
},
|
|
43
|
-
async read(path) {
|
|
44
|
-
if (hasTraversal(path))
|
|
45
|
-
return null;
|
|
46
|
-
try {
|
|
47
|
-
return await readFile(join(repoDir, path), 'utf8');
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
async readBytes(path) {
|
|
54
|
-
if (hasTraversal(path))
|
|
55
|
-
return null;
|
|
56
|
-
try {
|
|
57
|
-
const buf = await readFile(join(repoDir, path));
|
|
58
|
-
return new Uint8Array(buf);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
async listDir(dir) {
|
|
65
|
-
if (hasTraversal(dir))
|
|
66
|
-
return null;
|
|
67
|
-
try {
|
|
68
|
-
return await readdir(join(repoDir, dir));
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/** True if `path` contains a `..` segment or is absolute. */
|
|
77
|
-
function hasTraversal(path) {
|
|
78
|
-
if (path.startsWith('/') || /^[a-zA-Z]:/.test(path))
|
|
79
|
-
return true; // absolute
|
|
80
|
-
return path.split(/[/\\]/).some((seg) => seg === '..');
|
|
81
|
-
}
|
|
82
|
-
async function* walk(dir, root) {
|
|
83
|
-
let entries;
|
|
84
|
-
try {
|
|
85
|
-
entries = await readdir(dir, { withFileTypes: true });
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
for (const entry of entries) {
|
|
91
|
-
const full = join(dir, entry.name);
|
|
92
|
-
if (entry.isDirectory()) {
|
|
93
|
-
if (SKIP_DIRS.has(entry.name))
|
|
94
|
-
continue;
|
|
95
|
-
yield* walk(full, root);
|
|
96
|
-
}
|
|
97
|
-
else if (entry.isFile()) {
|
|
98
|
-
// Always emit POSIX-style paths so checks can rely on consistent
|
|
99
|
-
// separators across platforms.
|
|
100
|
-
yield relative(root, full).split(sep).join('/');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
31
|
/**
|
|
105
32
|
* Map-backed FileSource — used by the VibeCode agent (Workers env).
|
|
106
33
|
* The agent's session DO holds the virtual filesystem as a Map; this
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/lib/file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM;IACN,cAAc;IACd,MAAM;IACN,OAAO;IACP,QAAQ;IACR,WAAW;IACX,QAAQ;CACT,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,OAAO;QACL,KAAK,CAAC,CAAC,IAAI;YACT,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChC,IAAI,aAAa,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAClC,MAAM,IAAI,CAAC;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,IAAI;YAClB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACpC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAS;gBACvC,GAAG,GAAG,IAAI,CAAC;gBACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-backed FileSource — used by the CLI and CI.
|
|
3
|
+
*
|
|
4
|
+
* Split out of file-source.ts so the node:fs / node:path imports live
|
|
5
|
+
* in a module that only the CLI path pulls in. The Worker path (the
|
|
6
|
+
* VibeCode agent) imports mapFileSource + the checks, which stay
|
|
7
|
+
* node-free, so bundling for Cloudflare Workers never hits node:fs.
|
|
8
|
+
*/
|
|
9
|
+
import { type FileSource } from './file-source.js';
|
|
10
|
+
/**
|
|
11
|
+
* Walks the directory tree once on first list() iteration; uses node:fs
|
|
12
|
+
* for read/readBytes/listDir.
|
|
13
|
+
*
|
|
14
|
+
* Paths containing `..` segments are rejected — every read returns
|
|
15
|
+
* null. Defense in depth: today's checks only pass paths that came
|
|
16
|
+
* from `list()` (which stays inside the root), but a future buggy or
|
|
17
|
+
* malicious check could try `source.read('../etc/passwd')`. We refuse
|
|
18
|
+
* rather than letting `path.join` resolve outside repoDir.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fsFileSource(repoDir: string): FileSource;
|
|
21
|
+
//# sourceMappingURL=fs-file-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-file-source.d.ts","sourceRoot":"","sources":["../../src/lib/fs-file-source.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,KAAK,UAAU,EAAa,MAAM,kBAAkB,CAAC;AAE9D;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA+BxD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem-backed FileSource — used by the CLI and CI.
|
|
3
|
+
*
|
|
4
|
+
* Split out of file-source.ts so the node:fs / node:path imports live
|
|
5
|
+
* in a module that only the CLI path pulls in. The Worker path (the
|
|
6
|
+
* VibeCode agent) imports mapFileSource + the checks, which stay
|
|
7
|
+
* node-free, so bundling for Cloudflare Workers never hits node:fs.
|
|
8
|
+
*/
|
|
9
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
10
|
+
import { join, relative, sep } from 'node:path';
|
|
11
|
+
import { SKIP_DIRS } from './file-source.js';
|
|
12
|
+
/**
|
|
13
|
+
* Walks the directory tree once on first list() iteration; uses node:fs
|
|
14
|
+
* for read/readBytes/listDir.
|
|
15
|
+
*
|
|
16
|
+
* Paths containing `..` segments are rejected — every read returns
|
|
17
|
+
* null. Defense in depth: today's checks only pass paths that came
|
|
18
|
+
* from `list()` (which stays inside the root), but a future buggy or
|
|
19
|
+
* malicious check could try `source.read('../etc/passwd')`. We refuse
|
|
20
|
+
* rather than letting `path.join` resolve outside repoDir.
|
|
21
|
+
*/
|
|
22
|
+
export function fsFileSource(repoDir) {
|
|
23
|
+
return {
|
|
24
|
+
async *list() {
|
|
25
|
+
yield* walk(repoDir, repoDir);
|
|
26
|
+
},
|
|
27
|
+
async read(path) {
|
|
28
|
+
if (hasTraversal(path))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
return await readFile(join(repoDir, path), 'utf8');
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
async readBytes(path) {
|
|
38
|
+
if (hasTraversal(path))
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
const buf = await readFile(join(repoDir, path));
|
|
42
|
+
return new Uint8Array(buf);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
async listDir(dir) {
|
|
49
|
+
if (hasTraversal(dir))
|
|
50
|
+
return null;
|
|
51
|
+
try {
|
|
52
|
+
return await readdir(join(repoDir, dir));
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** True if `path` contains a `..` segment or is absolute. */
|
|
61
|
+
function hasTraversal(path) {
|
|
62
|
+
if (path.startsWith('/') || /^[a-zA-Z]:/.test(path))
|
|
63
|
+
return true; // absolute
|
|
64
|
+
return path.split(/[/\\]/).some((seg) => seg === '..');
|
|
65
|
+
}
|
|
66
|
+
async function* walk(dir, root) {
|
|
67
|
+
let entries;
|
|
68
|
+
try {
|
|
69
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
for (const entry of entries) {
|
|
75
|
+
const full = join(dir, entry.name);
|
|
76
|
+
if (entry.isDirectory()) {
|
|
77
|
+
if (SKIP_DIRS.has(entry.name))
|
|
78
|
+
continue;
|
|
79
|
+
yield* walk(full, root);
|
|
80
|
+
}
|
|
81
|
+
else if (entry.isFile()) {
|
|
82
|
+
// Always emit POSIX-style paths so checks can rely on consistent
|
|
83
|
+
// separators across platforms.
|
|
84
|
+
yield relative(root, full).split(sep).join('/');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=fs-file-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-file-source.js","sourceRoot":"","sources":["../../src/lib/fs-file-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-manifest.d.ts","sourceRoot":"","sources":["../../src/lib/inline-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;oEACgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"inline-manifest.d.ts","sourceRoot":"","sources":["../../src/lib/inline-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;oEACgE;IAChE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAqC/E"}
|
|
@@ -29,59 +29,7 @@ export function extractInlineManifest(viteConfig) {
|
|
|
29
29
|
// Balance braces to find the end of the manifest object literal.
|
|
30
30
|
// Handles nested objects (icons array entries) and quoted strings
|
|
31
31
|
// (so a `}` inside a quoted value isn't counted).
|
|
32
|
-
|
|
33
|
-
let inSingle = false;
|
|
34
|
-
let inDouble = false;
|
|
35
|
-
let inBacktick = false;
|
|
36
|
-
let escaped = false;
|
|
37
|
-
let endIdx = -1;
|
|
38
|
-
for (let i = openIdx; i < viteConfig.length; i++) {
|
|
39
|
-
const ch = viteConfig[i];
|
|
40
|
-
if (escaped) {
|
|
41
|
-
escaped = false;
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
if (ch === '\\') {
|
|
45
|
-
escaped = true;
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
if (inSingle) {
|
|
49
|
-
if (ch === "'")
|
|
50
|
-
inSingle = false;
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
if (inDouble) {
|
|
54
|
-
if (ch === '"')
|
|
55
|
-
inDouble = false;
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
if (inBacktick) {
|
|
59
|
-
if (ch === '`')
|
|
60
|
-
inBacktick = false;
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
if (ch === "'") {
|
|
64
|
-
inSingle = true;
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (ch === '"') {
|
|
68
|
-
inDouble = true;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (ch === '`') {
|
|
72
|
-
inBacktick = true;
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (ch === '{')
|
|
76
|
-
depth++;
|
|
77
|
-
else if (ch === '}') {
|
|
78
|
-
depth--;
|
|
79
|
-
if (depth === 0) {
|
|
80
|
-
endIdx = i;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
32
|
+
const endIdx = findClosing(viteConfig, openIdx, '{', '}');
|
|
85
33
|
if (endIdx < 0)
|
|
86
34
|
return null;
|
|
87
35
|
const block = viteConfig.slice(openIdx + 1, endIdx);
|
|
@@ -118,13 +66,20 @@ function extractIconsArray(block) {
|
|
|
118
66
|
const openIdx = block.indexOf('[', m.index);
|
|
119
67
|
if (openIdx < 0)
|
|
120
68
|
return undefined;
|
|
69
|
+
const closeIdx = findClosing(block, openIdx, '[', ']');
|
|
70
|
+
return closeIdx < 0 ? undefined : block.slice(openIdx, closeIdx + 1);
|
|
71
|
+
}
|
|
72
|
+
/** Index of the bracket that closes the one at `openIdx`, or -1. Skips quoted
|
|
73
|
+
* strings (single, double, backtick) and backslash escapes, so a bracket
|
|
74
|
+
* inside a value isn't counted. */
|
|
75
|
+
function findClosing(src, openIdx, open, close) {
|
|
121
76
|
let depth = 0;
|
|
122
77
|
let inSingle = false;
|
|
123
78
|
let inDouble = false;
|
|
124
79
|
let inBacktick = false;
|
|
125
80
|
let escaped = false;
|
|
126
|
-
for (let i = openIdx; i <
|
|
127
|
-
const ch =
|
|
81
|
+
for (let i = openIdx; i < src.length; i++) {
|
|
82
|
+
const ch = src[i];
|
|
128
83
|
if (escaped) {
|
|
129
84
|
escaped = false;
|
|
130
85
|
continue;
|
|
@@ -160,14 +115,14 @@ function extractIconsArray(block) {
|
|
|
160
115
|
inBacktick = true;
|
|
161
116
|
continue;
|
|
162
117
|
}
|
|
163
|
-
if (ch ===
|
|
118
|
+
if (ch === open)
|
|
164
119
|
depth++;
|
|
165
|
-
else if (ch ===
|
|
120
|
+
else if (ch === close) {
|
|
166
121
|
depth--;
|
|
167
122
|
if (depth === 0)
|
|
168
|
-
return
|
|
123
|
+
return i;
|
|
169
124
|
}
|
|
170
125
|
}
|
|
171
|
-
return
|
|
126
|
+
return -1;
|
|
172
127
|
}
|
|
173
128
|
//# sourceMappingURL=inline-manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-manifest.js","sourceRoot":"","sources":["../../src/lib/inline-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAeH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7B,iEAAiE;IACjE,kEAAkE;IAClE,kDAAkD;IAClD,
|
|
1
|
+
{"version":3,"file":"inline-manifest.js","sourceRoot":"","sources":["../../src/lib/inline-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lower-cased extension of a repo path, with its dot (`web/src/App.TSX` →
|
|
3
|
+
* `.tsx`), or '' when the last segment has none. A dot in a directory name
|
|
4
|
+
* doesn't count (`web/.vite/cache` → '').
|
|
5
|
+
*
|
|
6
|
+
* Shared by the checks that filter files by type (#368: it was copied into 15 of
|
|
7
|
+
* them). pwa-offline keeps its own variant, which returns the extension
|
|
8
|
+
* without the dot.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extOf(path: string): string;
|
|
11
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/lib/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1C"}
|
package/dist/lib/path.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lower-cased extension of a repo path, with its dot (`web/src/App.TSX` →
|
|
3
|
+
* `.tsx`), or '' when the last segment has none. A dot in a directory name
|
|
4
|
+
* doesn't count (`web/.vite/cache` → '').
|
|
5
|
+
*
|
|
6
|
+
* Shared by the checks that filter files by type (#368: it was copied into 15 of
|
|
7
|
+
* them). pwa-offline keeps its own variant, which returns the extension
|
|
8
|
+
* without the dot.
|
|
9
|
+
*/
|
|
10
|
+
export function extOf(path) {
|
|
11
|
+
const dot = path.lastIndexOf('.');
|
|
12
|
+
const slash = path.lastIndexOf('/');
|
|
13
|
+
return dot > slash ? path.slice(dot).toLowerCase() : '';
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/lib/path.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { FileSource } from './file-source.js';
|
|
2
|
+
/**
|
|
3
|
+
* Browser permissions a game may ask the player for, and how to spot them in
|
|
4
|
+
* source (#370). Shared by `fgs check` (warns on an undeclared one), the
|
|
5
|
+
* storefront listing scan (scripts/scan-game-permissions.mjs) and the listing
|
|
6
|
+
* itself, so the ids, names and icons stay in one place.
|
|
7
|
+
*
|
|
8
|
+
* Detection is static and deliberately simple: it reads the game's own source
|
|
9
|
+
* (`web/src/**` and `web/index.html`), never node_modules or a built bundle.
|
|
10
|
+
* Engine bundles (Phaser, Babylon…) carry gamepad, orientation and camera code
|
|
11
|
+
* whether a game uses it or not, so scanning them would tell players a game
|
|
12
|
+
* wants the microphone when it never asks.
|
|
13
|
+
*/
|
|
14
|
+
export interface PermissionInfo {
|
|
15
|
+
/** Stable id, used in `package.json` declarations and the listing data. */
|
|
16
|
+
id: string;
|
|
17
|
+
/** Plain name shown to players. */
|
|
18
|
+
name: string;
|
|
19
|
+
/** Emoji shown on the listing and on game cards. */
|
|
20
|
+
icon: string;
|
|
21
|
+
/** Whether the browser shows the player a prompt before granting it. */
|
|
22
|
+
prompts: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare const PERMISSIONS: readonly PermissionInfo[];
|
|
25
|
+
export declare const PERMISSION_IDS: Set<string>;
|
|
26
|
+
/** Permissions the given source text uses. */
|
|
27
|
+
export declare function detectPermissionsInText(raw: string): Set<string>;
|
|
28
|
+
/** Permissions used anywhere in the game's own source, sorted by catalog order. */
|
|
29
|
+
export declare function detectPermissions(source: FileSource): Promise<string[]>;
|
|
30
|
+
export interface DeclaredPermissions {
|
|
31
|
+
/** id → one-line reason ('' when none was given). Known ids only. */
|
|
32
|
+
declared: Record<string, string>;
|
|
33
|
+
/** Ids in the declaration that aren't in PERMISSIONS. */
|
|
34
|
+
unknown: string[];
|
|
35
|
+
/** Set when package.json exists but the declaration can't be read. */
|
|
36
|
+
error?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Reads `"freegamestore": { "permissions": … }` from the repo-root package.json.
|
|
40
|
+
* Accepts an object (`{ "motion": "Tilt to steer" }`) or an array of ids or
|
|
41
|
+
* `{ id, reason }` entries. Reasons are trimmed to one line of 120 chars.
|
|
42
|
+
*/
|
|
43
|
+
export declare function parseDeclaredPermissions(packageJson: string | null): DeclaredPermissions;
|
|
44
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/lib/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,cAAc,EAehD,CAAC;AAEF,eAAO,MAAM,cAAc,aAAwC,CAAC;AAgCpE,8CAA8C;AAC9C,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAgBhE;AAID,mFAAmF;AACnF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ7E;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yDAAyD;IACzD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,mBAAmB,CAuCxF"}
|