@freegamestore/compliance 0.8.1 → 0.8.2
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 +3 -13
- package/dist/checks/deploy-workflow.d.ts +0 -7
- package/dist/checks/deploy-workflow.d.ts.map +1 -1
- package/dist/checks/deploy-workflow.js +1 -8
- package/dist/checks/deploy-workflow.js.map +1 -1
- package/dist/checks/game-naming.d.ts.map +1 -1
- package/dist/checks/game-naming.js +1 -3
- package/dist/checks/game-naming.js.map +1 -1
- package/dist/checks/gitignore-complete.d.ts.map +1 -1
- package/dist/checks/gitignore-complete.js +1 -2
- package/dist/checks/gitignore-complete.js.map +1 -1
- package/dist/checks/html-meta.d.ts +9 -5
- package/dist/checks/html-meta.d.ts.map +1 -1
- package/dist/checks/html-meta.js +29 -8
- package/dist/checks/html-meta.js.map +1 -1
- package/dist/checks/no-external-fetch.d.ts.map +1 -1
- package/dist/checks/no-external-fetch.js +1 -6
- package/dist/checks/no-external-fetch.js.map +1 -1
- package/dist/checks/no-payment-sdk.d.ts.map +1 -1
- package/dist/checks/no-payment-sdk.js +2 -11
- package/dist/checks/no-payment-sdk.js.map +1 -1
- package/dist/checks/pwa-maskable-icon.js +2 -4
- package/dist/checks/pwa-maskable-icon.js.map +1 -1
- package/dist/checks/sdk-version.d.ts.map +1 -1
- package/dist/checks/sdk-version.js +3 -1
- package/dist/checks/sdk-version.js.map +1 -1
- package/dist/checks/tech-versions.d.ts.map +1 -1
- package/dist/checks/tech-versions.js +13 -6
- package/dist/checks/tech-versions.js.map +1 -1
- package/dist/checks/typescript-strict.d.ts +2 -7
- package/dist/checks/typescript-strict.d.ts.map +1 -1
- package/dist/checks/typescript-strict.js +17 -45
- package/dist/checks/typescript-strict.js.map +1 -1
- package/dist/checks/uses-game-sdk.d.ts.map +1 -1
- package/dist/checks/uses-game-sdk.js +1 -1
- package/dist/checks/uses-game-sdk.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @freegamestore/compliance
|
|
2
2
|
|
|
3
|
-
Compliance checks for
|
|
3
|
+
Compliance checks for games published on **freegamestore.online**. Same checks the CLI runs locally and the template's CI runs on every push.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
|
-
import { runChecks } from '@
|
|
6
|
+
import { runChecks } from '@freegamestore/compliance';
|
|
7
7
|
|
|
8
8
|
const results = await runChecks(process.cwd());
|
|
9
9
|
for (const r of results) {
|
|
@@ -12,16 +12,6 @@ for (const r of results) {
|
|
|
12
12
|
}
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
## Checks (v0.1.0)
|
|
16
|
-
|
|
17
|
-
| Name | What it checks | Status on fail |
|
|
18
|
-
|---|---|---|
|
|
19
|
-
| `No template placeholders` | No file still contains `APPNAME` | **fail** |
|
|
20
|
-
| `Analytics routed through platform loader` | No direct install of google-analytics / gtag / amplitude / mixpanel / segment / hotjar / plausible / posthog — analytics must flow through `api.freegamestore.online/v1/analytics.js?app=<id>` | **fail** |
|
|
21
|
-
| `Brand fonts present` | Manrope + Fraunces referenced in CSS or HTML | **fail** |
|
|
22
|
-
| `PWA manifest` | `web/public/manifest.json` exists and has name / short_name / start_url / display | warn |
|
|
23
|
-
| `Bundle size` | Largest JS in `web/dist/assets/` is ≤ 300 KB gzipped | **fail** if too big; warn if not built yet |
|
|
24
|
-
|
|
25
15
|
## License
|
|
26
16
|
|
|
27
17
|
MIT.
|
|
@@ -4,13 +4,6 @@ import type { CheckResult } from '../types.js';
|
|
|
4
4
|
* Games auto-deploy to R2 via GitHub Actions on push to main. Without
|
|
5
5
|
* `.github/workflows/deploy.yml`, pushes won't trigger a deploy and
|
|
6
6
|
* the game stays stale on the storefront.
|
|
7
|
-
*
|
|
8
|
-
* Simple existence check — the deploy workflow template is provided
|
|
9
|
-
* by `fgs create` and rarely needs customisation.
|
|
10
|
-
*
|
|
11
|
-
* WARN level — some games might use an alternative deploy mechanism
|
|
12
|
-
* (e.g. deploy.yaml, a different workflow name, or manual deploys
|
|
13
|
-
* during early development).
|
|
14
7
|
*/
|
|
15
8
|
export declare function checkDeployWorkflow(source: FileSource): Promise<CheckResult>;
|
|
16
9
|
//# sourceMappingURL=deploy-workflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-workflow.d.ts","sourceRoot":"","sources":["../../src/checks/deploy-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C
|
|
1
|
+
{"version":3,"file":"deploy-workflow.d.ts","sourceRoot":"","sources":["../../src/checks/deploy-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAkBlF"}
|
|
@@ -3,13 +3,6 @@ const DEPLOY_YML = '.github/workflows/deploy.yml';
|
|
|
3
3
|
* Games auto-deploy to R2 via GitHub Actions on push to main. Without
|
|
4
4
|
* `.github/workflows/deploy.yml`, pushes won't trigger a deploy and
|
|
5
5
|
* the game stays stale on the storefront.
|
|
6
|
-
*
|
|
7
|
-
* Simple existence check — the deploy workflow template is provided
|
|
8
|
-
* by `fgs create` and rarely needs customisation.
|
|
9
|
-
*
|
|
10
|
-
* WARN level — some games might use an alternative deploy mechanism
|
|
11
|
-
* (e.g. deploy.yaml, a different workflow name, or manual deploys
|
|
12
|
-
* during early development).
|
|
13
6
|
*/
|
|
14
7
|
export async function checkDeployWorkflow(source) {
|
|
15
8
|
const content = await source.read(DEPLOY_YML);
|
|
@@ -26,7 +19,7 @@ export async function checkDeployWorkflow(source) {
|
|
|
26
19
|
detail: `${DEPLOY_YML} not found`,
|
|
27
20
|
suggestions: [
|
|
28
21
|
'Add a deploy workflow so pushes to main auto-deploy to the storefront.',
|
|
29
|
-
'Run `fgs
|
|
22
|
+
'Run `fgs init` to scaffold a game with the standard deploy workflow, or copy one from an existing game repo.',
|
|
30
23
|
],
|
|
31
24
|
};
|
|
32
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-workflow.js","sourceRoot":"","sources":["../../src/checks/deploy-workflow.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"deploy-workflow.js","sourceRoot":"","sources":["../../src/checks/deploy-workflow.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,GAAG,8BAA8B,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAkB;IAC1D,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,UAAU,SAAS;SAC/B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,UAAU,YAAY;QACjC,WAAW,EAAE;YACX,wEAAwE;YACxE,8GAA8G;SAC/G;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-naming.d.ts","sourceRoot":"","sources":["../../src/checks/game-naming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA2D/C,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"game-naming.d.ts","sourceRoot":"","sources":["../../src/checks/game-naming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA2D/C,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAqD9E"}
|
|
@@ -86,9 +86,7 @@ export async function checkGameNaming(source) {
|
|
|
86
86
|
return {
|
|
87
87
|
name: 'Game naming conventions',
|
|
88
88
|
status: 'warn',
|
|
89
|
-
detail: issues
|
|
90
|
-
.map((i) => `${i.field}: "${i.value}" — ${i.problem}`)
|
|
91
|
-
.join('; '),
|
|
89
|
+
detail: issues.map((i) => `${i.field}: "${i.value}" — ${i.problem}`).join('; '),
|
|
92
90
|
suggestions: [
|
|
93
91
|
'Package names should be lowercase, hyphen-separated, without reserved prefixes (free*, pro*).',
|
|
94
92
|
'The publish flow derives the subdomain and GitHub repo name from the package name — clean names prevent issues.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-naming.js","sourceRoot":"","sources":["../../src/checks/game-naming.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAQ1C,SAAS,SAAS,CAAC,IAAY,EAAE,MAAc;IAC7C,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,kCAAkC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,IAAI,MAAM,iCAAiC;aACrD,CAAC,CAAC;YACH,MAAM;QACR,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,8CAA8C;IAC9C,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,uCAAuC;SACjD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAkB;IACtD,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,+DAA+D;IAC/D,gEAAgE;IAChE,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;QAC/C,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7E,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAE,CAAC;YACrC,sEAAsE;YACtE,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,qBAAqB;oBAC5B,KAAK,EAAE,GAAG,SAAS,uBAAuB;oBAC1C,OAAO,EAAE,sEAAsE;iBAChF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,yBAAyB;YAC/B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,kDAAkD;SAC3D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"game-naming.js","sourceRoot":"","sources":["../../src/checks/game-naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore-complete.d.ts","sourceRoot":"","sources":["../../src/checks/gitignore-complete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gitignore-complete.d.ts","sourceRoot":"","sources":["../../src/checks/gitignore-complete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB/C,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAoCrF"}
|
|
@@ -21,11 +21,10 @@ export async function checkGitignoreComplete(source) {
|
|
|
21
21
|
detail: 'no .gitignore file at repo root',
|
|
22
22
|
suggestions: [
|
|
23
23
|
'Add a .gitignore that covers at least: node_modules, dist, .env.',
|
|
24
|
-
'Run `fgs
|
|
24
|
+
'Run `fgs init` to scaffold a game with a standard .gitignore.',
|
|
25
25
|
],
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
// Parse non-empty, non-comment lines.
|
|
29
28
|
const lines = raw
|
|
30
29
|
.split('\n')
|
|
31
30
|
.map((l) => l.trim())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore-complete.js","sourceRoot":"","sources":["../../src/checks/gitignore-complete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gitignore-complete.js","sourceRoot":"","sources":["../../src/checks/gitignore-complete.ts"],"names":[],"mappings":"AAGA,MAAM,QAAQ,GAAG;IACf;QACE,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,iBAAiB;KACrF;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CACrB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS;KAC9E;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;KAC5C;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAkB;IAC7D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,iCAAiC;YACzC,WAAW,EAAE;gBACX,kEAAkE;gBAClE,+DAA+D;aAChE;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,GAAG;SACd,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,gDAAgD;SACzD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,uCAAuC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACtF,WAAW,EAAE;YACX,2CAA2C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACnF,+EAA+E;SAChF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -2,15 +2,19 @@ import type { FileSource } from '../lib/file-source.js';
|
|
|
2
2
|
import type { CheckResult } from '../types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Verifies `web/index.html` declares the basics: a `lang` attribute, a
|
|
5
|
-
* viewport meta, and a non-empty
|
|
5
|
+
* viewport meta (that disables pinch/double-tap zoom), and a non-empty
|
|
6
|
+
* `<title>`. These cover:
|
|
6
7
|
*
|
|
7
8
|
* - lang → screen readers + auto-translate work correctly
|
|
8
|
-
* - viewport → mobile rendering is sized to device, not desktop default
|
|
9
|
+
* - viewport → mobile rendering is sized to device, not desktop default,
|
|
10
|
+
* AND zoom is disabled so taps during gameplay don't
|
|
11
|
+
* accidentally pinch/double-tap-zoom the board
|
|
9
12
|
* - title → the only thing visible in tabs, history, search results
|
|
10
13
|
*
|
|
11
|
-
* All
|
|
12
|
-
* to catch creators who edited index.html and
|
|
13
|
-
* something they needed.
|
|
14
|
+
* All of these are baked into the canonical templates — this check exists
|
|
15
|
+
* to catch creators (and the VibeCode agent) who edited index.html and
|
|
16
|
+
* accidentally stripped something they needed. Both creation paths run
|
|
17
|
+
* this check: `runChecks` (CLI/CI) and `runChecksFromFiles` (VibeCode).
|
|
14
18
|
*/
|
|
15
19
|
export declare function checkHtmlMeta(source: FileSource): Promise<CheckResult>;
|
|
16
20
|
//# sourceMappingURL=html-meta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-meta.d.ts","sourceRoot":"","sources":["../../src/checks/html-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C
|
|
1
|
+
{"version":3,"file":"html-meta.d.ts","sourceRoot":"","sources":["../../src/checks/html-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA8C5E"}
|
package/dist/checks/html-meta.js
CHANGED
|
@@ -2,15 +2,19 @@ import { stripHtmlComments } from '../lib/strip.js';
|
|
|
2
2
|
const HTML_PATH = 'web/index.html';
|
|
3
3
|
/**
|
|
4
4
|
* Verifies `web/index.html` declares the basics: a `lang` attribute, a
|
|
5
|
-
* viewport meta, and a non-empty
|
|
5
|
+
* viewport meta (that disables pinch/double-tap zoom), and a non-empty
|
|
6
|
+
* `<title>`. These cover:
|
|
6
7
|
*
|
|
7
8
|
* - lang → screen readers + auto-translate work correctly
|
|
8
|
-
* - viewport → mobile rendering is sized to device, not desktop default
|
|
9
|
+
* - viewport → mobile rendering is sized to device, not desktop default,
|
|
10
|
+
* AND zoom is disabled so taps during gameplay don't
|
|
11
|
+
* accidentally pinch/double-tap-zoom the board
|
|
9
12
|
* - title → the only thing visible in tabs, history, search results
|
|
10
13
|
*
|
|
11
|
-
* All
|
|
12
|
-
* to catch creators who edited index.html and
|
|
13
|
-
* something they needed.
|
|
14
|
+
* All of these are baked into the canonical templates — this check exists
|
|
15
|
+
* to catch creators (and the VibeCode agent) who edited index.html and
|
|
16
|
+
* accidentally stripped something they needed. Both creation paths run
|
|
17
|
+
* this check: `runChecks` (CLI/CI) and `runChecksFromFiles` (VibeCode).
|
|
14
18
|
*/
|
|
15
19
|
export async function checkHtmlMeta(source) {
|
|
16
20
|
const rawHtml = await source.read(HTML_PATH);
|
|
@@ -28,8 +32,16 @@ export async function checkHtmlMeta(source) {
|
|
|
28
32
|
const missing = [];
|
|
29
33
|
if (!/<html[^>]*\blang\s*=/i.test(html))
|
|
30
34
|
missing.push('lang attribute on <html>');
|
|
31
|
-
|
|
35
|
+
// Grab the whole viewport tag so we can inspect its `content` too.
|
|
36
|
+
const viewportTag = html.match(/<meta[^>]*\bname\s*=\s*["']viewport["'][^>]*>/i)?.[0];
|
|
37
|
+
if (!viewportTag) {
|
|
32
38
|
missing.push('viewport meta');
|
|
39
|
+
}
|
|
40
|
+
else if (!disablesZoom(viewportTag)) {
|
|
41
|
+
// Either form disables pinch/double-tap zoom; `user-scalable=no` is
|
|
42
|
+
// the canonical one used across the storefront.
|
|
43
|
+
missing.push('viewport must disable zoom (add user-scalable=no)');
|
|
44
|
+
}
|
|
33
45
|
// Extract the <title> body (multiline-safe), trim, and require it
|
|
34
46
|
// be non-empty. Avoids rejecting valid titles like `<title> Hello</title>`
|
|
35
47
|
// where the body has leading whitespace.
|
|
@@ -37,15 +49,24 @@ export async function checkHtmlMeta(source) {
|
|
|
37
49
|
if (!titleMatch || titleMatch[1].trim() === '')
|
|
38
50
|
missing.push('non-empty <title>');
|
|
39
51
|
if (missing.length === 0) {
|
|
40
|
-
return {
|
|
52
|
+
return {
|
|
53
|
+
name: 'HTML meta tags',
|
|
54
|
+
status: 'pass',
|
|
55
|
+
detail: 'lang + viewport (zoom disabled) + title present',
|
|
56
|
+
};
|
|
41
57
|
}
|
|
42
58
|
return {
|
|
43
59
|
name: 'HTML meta tags',
|
|
44
60
|
status: 'fail',
|
|
45
61
|
detail: `missing: ${missing.join(', ')}`,
|
|
46
62
|
suggestions: [
|
|
47
|
-
'Restore the canonical <head>: `<html lang="en">`, `<meta name="viewport" content="width=device-width, initial-scale=1" />`, `<title>App name</title>`.',
|
|
63
|
+
'Restore the canonical <head>: `<html lang="en">`, `<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />`, `<title>App name</title>`.',
|
|
48
64
|
],
|
|
49
65
|
};
|
|
50
66
|
}
|
|
67
|
+
/** True if a viewport meta tag disables pinch/double-tap zoom. */
|
|
68
|
+
function disablesZoom(viewportTag) {
|
|
69
|
+
return (/user-scalable\s*=\s*(no|0)/i.test(viewportTag) ||
|
|
70
|
+
/maximum-scale\s*=\s*1(\.0+)?\b/i.test(viewportTag));
|
|
71
|
+
}
|
|
51
72
|
//# sourceMappingURL=html-meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-meta.js","sourceRoot":"","sources":["../../src/checks/html-meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"html-meta.js","sourceRoot":"","sources":["../../src/checks/html-meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEnC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAkB;IACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,SAAS,YAAY;SACjC,CAAC;IACJ,CAAC;IACD,gEAAgE;IAChE,qEAAqE;IACrE,wCAAwC;IACxC,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAClF,mEAAmE;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,oEAAoE;QACpE,gDAAgD;QAChD,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACpE,CAAC;IACD,kEAAkE;IAClE,2EAA2E;IAC3E,yCAAyC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAEnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,iDAAiD;SAC1D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxC,WAAW,EAAE;YACX,4KAA4K;SAC7K;KACF,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,CACL,6BAA6B,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C,iCAAiC,CAAC,IAAI,CAAC,WAAW,CAAC,CACpD,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-external-fetch.d.ts","sourceRoot":"","sources":["../../src/checks/no-external-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"no-external-fetch.d.ts","sourceRoot":"","sources":["../../src/checks/no-external-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8C/C,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA4DnF"}
|
|
@@ -19,12 +19,7 @@ import { stripCommentsOnly } from '../lib/strip.js';
|
|
|
19
19
|
* ERROR level — external fetches are a hard compliance gate.
|
|
20
20
|
*/
|
|
21
21
|
const SCAN_EXTS = new Set(['.ts', '.tsx']);
|
|
22
|
-
const ALLOWED_DOMAINS = [
|
|
23
|
-
'freegamestore.online',
|
|
24
|
-
'freeappstore.online',
|
|
25
|
-
'localhost',
|
|
26
|
-
'127.0.0.1',
|
|
27
|
-
];
|
|
22
|
+
const ALLOWED_DOMAINS = ['freegamestore.online', 'freeappstore.online', 'localhost', '127.0.0.1'];
|
|
28
23
|
/** Check if a URL string points to an allowed domain. */
|
|
29
24
|
function isAllowedUrl(url) {
|
|
30
25
|
let hostname;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-external-fetch.js","sourceRoot":"","sources":["../../src/checks/no-external-fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3C,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"no-external-fetch.js","sourceRoot":"","sources":["../../src/checks/no-external-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-payment-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"no-payment-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAsE/C;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAqChF"}
|
|
@@ -13,12 +13,7 @@ const PAYMENT_SDKS = [
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
name: 'paypal',
|
|
16
|
-
patterns: [
|
|
17
|
-
/@paypal\//i,
|
|
18
|
-
/paypal\.com\/sdk/i,
|
|
19
|
-
/paypalobjects\.com/i,
|
|
20
|
-
/from\s+['"]@paypal\//i,
|
|
21
|
-
],
|
|
16
|
+
patterns: [/@paypal\//i, /paypal\.com\/sdk/i, /paypalobjects\.com/i, /from\s+['"]@paypal\//i],
|
|
22
17
|
},
|
|
23
18
|
{
|
|
24
19
|
name: 'braintree',
|
|
@@ -49,11 +44,7 @@ const PAYMENT_SDKS = [
|
|
|
49
44
|
},
|
|
50
45
|
{
|
|
51
46
|
name: 'lemonsqueezy',
|
|
52
|
-
patterns: [
|
|
53
|
-
/@lemonsqueezy\//i,
|
|
54
|
-
/lemonsqueezy\.com/i,
|
|
55
|
-
/from\s+['"]@lemonsqueezy\//i,
|
|
56
|
-
],
|
|
47
|
+
patterns: [/@lemonsqueezy\//i, /lemonsqueezy\.com/i, /from\s+['"]@lemonsqueezy\//i],
|
|
57
48
|
},
|
|
58
49
|
{
|
|
59
50
|
name: 'revenuecat',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-payment-sdk.js","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAWtD,MAAM,YAAY,GAAkB;IAClC;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE;YACR,YAAY;YACZ,cAAc;YACd,wBAAwB;YACxB,4BAA4B;YAC5B,gBAAgB;YAChB,iBAAiB;SAClB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"no-payment-sdk.js","sourceRoot":"","sources":["../../src/checks/no-payment-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,14 +56,12 @@ function validateStatic(raw) {
|
|
|
56
56
|
}
|
|
57
57
|
function validateInline(viteConfig) {
|
|
58
58
|
const inline = extractInlineManifest(viteConfig);
|
|
59
|
-
if (!inline
|
|
59
|
+
if (!inline?.iconsRaw) {
|
|
60
60
|
return {
|
|
61
61
|
name: 'PWA maskable icon',
|
|
62
62
|
status: 'fail',
|
|
63
63
|
detail: `inline manifest in ${VITE_CONFIG_PATH} has no parsable icons array`,
|
|
64
|
-
suggestions: [
|
|
65
|
-
'Add an icons array to the manifest:{...} block in VitePWA({...}).',
|
|
66
|
-
],
|
|
64
|
+
suggestions: ['Add an icons array to the manifest:{...} block in VitePWA({...}).'],
|
|
67
65
|
};
|
|
68
66
|
}
|
|
69
67
|
// Lenient string-level check — see the doc-comment on `checkMaskableIcon`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pwa-maskable-icon.js","sourceRoot":"","sources":["../../src/checks/pwa-maskable-icon.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AACxD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAkB;IACxD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC1D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,IAAI,UAAU,KAAK,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,kEAAkE;IAClE,oEAAoE;IACpE,8BAA8B;IAC9B,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,6DAA6D;KACtE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,MAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,oBAAoB,oBAAoB;SACpD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,OAAO,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CACjF,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,SAAS,CAAC,oBAAoB,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB;IACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"pwa-maskable-icon.js","sourceRoot":"","sources":["../../src/checks/pwa-maskable-icon.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-version.d.ts","sourceRoot":"","sources":["../../src/checks/sdk-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B/C,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"sdk-version.d.ts","sourceRoot":"","sources":["../../src/checks/sdk-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA0B/C,wBAAsB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAgE9E"}
|
|
@@ -41,7 +41,9 @@ export async function checkSdkVersion(source) {
|
|
|
41
41
|
}
|
|
42
42
|
const deps = {
|
|
43
43
|
...(typeof pkg.dependencies === 'object' && pkg.dependencies !== null ? pkg.dependencies : {}),
|
|
44
|
-
...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
|
|
44
|
+
...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
|
|
45
|
+
? pkg.devDependencies
|
|
46
|
+
: {}),
|
|
45
47
|
};
|
|
46
48
|
const range = deps[SDK_PKG];
|
|
47
49
|
if (!range) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../../src/checks/sdk-version.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,OAAO,GAAG,sBAAsB,CAAC;AACvC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,SAAS;AAE/B;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAkB;IACtD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,+DAA+D;SACxE,CAAC;IACJ,CAAC;IAED,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,oCAAoC;SAC7C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../../src/checks/sdk-version.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,OAAO,GAAG,sBAAsB,CAAC;AACvC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,SAAS;AAE/B;;;GAGG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAkB;IACtD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,+DAA+D;SACxE,CAAC;IACJ,CAAC;IAED,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,oCAAoC;SAC7C,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG;QACX,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,KAAK,IAAI;YACzE,CAAC,CAAC,GAAG,CAAC,eAAe;YACrB,CAAC,CAAC,EAAE,CAAC;KACkB,CAAC;IAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,OAAO,yDAAyD;SAC5E,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,qEAAqE;QACrE,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,+CAA+C;SAC5E,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,EAAE;SAC/B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,OAAO,KAAK,KAAK,gCAAgC,SAAS,IAAI;QACzE,WAAW,EAAE;YACX,qBAAqB,OAAO,gGAAgG;YAC5H,oEAAoE;SACrE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tech-versions.d.ts","sourceRoot":"","sources":["../../src/checks/tech-versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tech-versions.d.ts","sourceRoot":"","sources":["../../src/checks/tech-versions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyD/C,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAoFhF"}
|
|
@@ -2,7 +2,12 @@ const EXPECTATIONS = [
|
|
|
2
2
|
{ packages: ['react'], label: 'React', minMajor: 19 },
|
|
3
3
|
{ packages: ['vite'], label: 'Vite', minMajor: 6 },
|
|
4
4
|
{ packages: ['typescript'], label: 'TypeScript', minMajor: 5, minMinor: 7 },
|
|
5
|
-
{
|
|
5
|
+
{
|
|
6
|
+
packages: ['tailwindcss', '@tailwindcss/vite'],
|
|
7
|
+
label: 'Tailwind CSS',
|
|
8
|
+
minMajor: 4,
|
|
9
|
+
optional: true,
|
|
10
|
+
},
|
|
6
11
|
];
|
|
7
12
|
/**
|
|
8
13
|
* Extract the major (and optionally minor) version from a semver range
|
|
@@ -42,7 +47,9 @@ export async function checkTechVersions(source) {
|
|
|
42
47
|
}
|
|
43
48
|
const deps = {
|
|
44
49
|
...(typeof pkg.dependencies === 'object' && pkg.dependencies !== null ? pkg.dependencies : {}),
|
|
45
|
-
...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
|
|
50
|
+
...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
|
|
51
|
+
? pkg.devDependencies
|
|
52
|
+
: {}),
|
|
46
53
|
};
|
|
47
54
|
const outdated = [];
|
|
48
55
|
const missing = [];
|
|
@@ -60,13 +67,13 @@ export async function checkTechVersions(source) {
|
|
|
60
67
|
if (ver.major < exp.minMajor) {
|
|
61
68
|
isOutdated = true;
|
|
62
69
|
}
|
|
63
|
-
else if (ver.major === exp.minMajor &&
|
|
70
|
+
else if (ver.major === exp.minMajor &&
|
|
71
|
+
exp.minMinor !== undefined &&
|
|
72
|
+
ver.minor < exp.minMinor) {
|
|
64
73
|
isOutdated = true;
|
|
65
74
|
}
|
|
66
75
|
if (isOutdated) {
|
|
67
|
-
const minStr = exp.minMinor !== undefined
|
|
68
|
-
? `^${exp.minMajor}.${exp.minMinor}`
|
|
69
|
-
: `^${exp.minMajor}`;
|
|
76
|
+
const minStr = exp.minMinor !== undefined ? `^${exp.minMajor}.${exp.minMinor}` : `^${exp.minMajor}`;
|
|
70
77
|
outdated.push(`${exp.label}: ${range} (expected ${minStr}+)`);
|
|
71
78
|
}
|
|
72
79
|
break; // first matching package wins
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tech-versions.js","sourceRoot":"","sources":["../../src/checks/tech-versions.ts"],"names":[],"mappings":"AA8BA,MAAM,YAAY,GAAyB;IACzC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrD,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAClD,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC3E,
|
|
1
|
+
{"version":3,"file":"tech-versions.js","sourceRoot":"","sources":["../../src/checks/tech-versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import type { FileSource } from '../lib/file-source.js';
|
|
2
2
|
import type { CheckResult } from '../types.js';
|
|
3
3
|
/**
|
|
4
|
-
* Every game must compile under TypeScript strict mode.
|
|
4
|
+
* Every game must compile under TypeScript strict mode. Checks
|
|
5
5
|
* `web/tsconfig.json` and `web/tsconfig.app.json`, follows `extends`
|
|
6
|
-
*
|
|
7
|
-
* — either directly or via the extended base config.
|
|
8
|
-
*
|
|
9
|
-
* The individual strict flags (`strictNullChecks`, `noImplicitAny`, etc.)
|
|
10
|
-
* are also accepted as a collective substitute for `"strict": true`, but
|
|
11
|
-
* only if all of them are present.
|
|
6
|
+
* one level deep, and verifies `"strict": true` is set.
|
|
12
7
|
*/
|
|
13
8
|
export declare function checkTypescriptStrict(source: FileSource): Promise<CheckResult>;
|
|
14
9
|
//# sourceMappingURL=typescript-strict.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-strict.d.ts","sourceRoot":"","sources":["../../src/checks/typescript-strict.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"typescript-strict.d.ts","sourceRoot":"","sources":["../../src/checks/typescript-strict.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAe/C;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CA2FpF"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
const TSCONFIG_PATHS = ['web/tsconfig.json', 'web/tsconfig.app.json'];
|
|
2
|
+
/** The individual flags that `"strict": true` enables. */
|
|
3
|
+
const STRICT_FLAGS = [
|
|
4
|
+
'strictNullChecks',
|
|
5
|
+
'strictFunctionTypes',
|
|
6
|
+
'strictBindCallApply',
|
|
7
|
+
'strictPropertyInitialization',
|
|
8
|
+
'noImplicitAny',
|
|
9
|
+
'noImplicitThis',
|
|
10
|
+
'alwaysStrict',
|
|
11
|
+
];
|
|
2
12
|
/**
|
|
3
|
-
* Every game must compile under TypeScript strict mode.
|
|
13
|
+
* Every game must compile under TypeScript strict mode. Checks
|
|
4
14
|
* `web/tsconfig.json` and `web/tsconfig.app.json`, follows `extends`
|
|
5
|
-
*
|
|
6
|
-
* — either directly or via the extended base config.
|
|
7
|
-
*
|
|
8
|
-
* The individual strict flags (`strictNullChecks`, `noImplicitAny`, etc.)
|
|
9
|
-
* are also accepted as a collective substitute for `"strict": true`, but
|
|
10
|
-
* only if all of them are present.
|
|
15
|
+
* one level deep, and verifies `"strict": true` is set.
|
|
11
16
|
*/
|
|
12
17
|
export async function checkTypescriptStrict(source) {
|
|
13
|
-
// Try each candidate config in order. The first one that exists and
|
|
14
|
-
// has strict mode wins. tsconfig.app.json typically extends
|
|
15
|
-
// tsconfig.json, so check it first (it's the more specific one Vite
|
|
16
|
-
// actually uses).
|
|
17
18
|
for (const path of TSCONFIG_PATHS) {
|
|
18
19
|
const raw = await source.read(path);
|
|
19
20
|
if (raw === null)
|
|
@@ -29,12 +30,8 @@ export async function checkTypescriptStrict(source) {
|
|
|
29
30
|
}
|
|
30
31
|
const compilerOptions = config.compilerOptions;
|
|
31
32
|
// Solution-style tsconfig (only `references`, no `compilerOptions`).
|
|
32
|
-
|
|
33
|
-
// referenced files (typically tsconfig.app.json).
|
|
34
|
-
if (!compilerOptions && config.references) {
|
|
33
|
+
if (!compilerOptions && config.references)
|
|
35
34
|
continue;
|
|
36
|
-
}
|
|
37
|
-
// Direct "strict": true in this file.
|
|
38
35
|
if (compilerOptions?.strict === true) {
|
|
39
36
|
return {
|
|
40
37
|
name: 'TypeScript strict mode',
|
|
@@ -42,7 +39,6 @@ export async function checkTypescriptStrict(source) {
|
|
|
42
39
|
detail: `${path} has "strict": true`,
|
|
43
40
|
};
|
|
44
41
|
}
|
|
45
|
-
// Check if all individual strict flags are enabled.
|
|
46
42
|
if (hasAllStrictFlags(compilerOptions)) {
|
|
47
43
|
return {
|
|
48
44
|
name: 'TypeScript strict mode',
|
|
@@ -58,9 +54,8 @@ export async function checkTypescriptStrict(source) {
|
|
|
58
54
|
if (baseRaw !== null) {
|
|
59
55
|
const baseConfig = tryParseJson(baseRaw);
|
|
60
56
|
if (baseConfig !== null) {
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
// Base has strict, but check if this config explicitly overrides it.
|
|
57
|
+
const baseOpts = baseConfig.compilerOptions;
|
|
58
|
+
if (baseOpts?.strict === true) {
|
|
64
59
|
if (compilerOptions?.strict === false) {
|
|
65
60
|
return {
|
|
66
61
|
name: 'TypeScript strict mode',
|
|
@@ -75,7 +70,7 @@ export async function checkTypescriptStrict(source) {
|
|
|
75
70
|
detail: `${path} inherits "strict": true from ${basePath}`,
|
|
76
71
|
};
|
|
77
72
|
}
|
|
78
|
-
if (hasAllStrictFlags(
|
|
73
|
+
if (hasAllStrictFlags(baseOpts)) {
|
|
79
74
|
return {
|
|
80
75
|
name: 'TypeScript strict mode',
|
|
81
76
|
status: 'pass',
|
|
@@ -85,7 +80,6 @@ export async function checkTypescriptStrict(source) {
|
|
|
85
80
|
}
|
|
86
81
|
}
|
|
87
82
|
}
|
|
88
|
-
// Found a tsconfig but strict is not enabled.
|
|
89
83
|
return {
|
|
90
84
|
name: 'TypeScript strict mode',
|
|
91
85
|
status: 'fail',
|
|
@@ -96,54 +90,32 @@ export async function checkTypescriptStrict(source) {
|
|
|
96
90
|
],
|
|
97
91
|
};
|
|
98
92
|
}
|
|
99
|
-
// No tsconfig found at all.
|
|
100
93
|
return {
|
|
101
94
|
name: 'TypeScript strict mode',
|
|
102
95
|
status: 'fail',
|
|
103
96
|
detail: 'no web/tsconfig.json or web/tsconfig.app.json found',
|
|
104
97
|
suggestions: [
|
|
105
98
|
'Create a tsconfig.json in web/ with `"strict": true` in compilerOptions.',
|
|
106
|
-
'The game template includes a pre-configured tsconfig — run `fgs
|
|
99
|
+
'The game template includes a pre-configured tsconfig — run `fgs init` to scaffold one.',
|
|
107
100
|
],
|
|
108
101
|
};
|
|
109
102
|
}
|
|
110
|
-
/** The individual flags that `"strict": true` enables. */
|
|
111
|
-
const STRICT_FLAGS = [
|
|
112
|
-
'strictNullChecks',
|
|
113
|
-
'strictFunctionTypes',
|
|
114
|
-
'strictBindCallApply',
|
|
115
|
-
'strictPropertyInitialization',
|
|
116
|
-
'noImplicitAny',
|
|
117
|
-
'noImplicitThis',
|
|
118
|
-
'alwaysStrict',
|
|
119
|
-
];
|
|
120
103
|
function hasAllStrictFlags(compilerOptions) {
|
|
121
104
|
if (!compilerOptions)
|
|
122
105
|
return false;
|
|
123
106
|
return STRICT_FLAGS.every((flag) => compilerOptions[flag] === true);
|
|
124
107
|
}
|
|
125
|
-
/**
|
|
126
|
-
* Resolve an `extends` path relative to the directory of the tsconfig
|
|
127
|
-
* that contains it. Handles relative paths and bare package names that
|
|
128
|
-
* point into node_modules.
|
|
129
|
-
*/
|
|
130
108
|
function resolveExtends(tsconfigPath, extendsValue) {
|
|
131
109
|
const dir = tsconfigPath.slice(0, tsconfigPath.lastIndexOf('/') + 1);
|
|
132
110
|
if (extendsValue.startsWith('.')) {
|
|
133
|
-
// Relative path — resolve against the tsconfig's directory.
|
|
134
111
|
const combined = dir + extendsValue;
|
|
135
|
-
// Append .json if not already present (tsc resolves it automatically).
|
|
136
112
|
return combined.endsWith('.json') ? combined : `${combined}.json`;
|
|
137
113
|
}
|
|
138
|
-
// Bare specifier like "@tsconfig/strictest" — resolve into node_modules.
|
|
139
|
-
// Try with and without .json extension.
|
|
140
114
|
const candidate = `web/node_modules/${extendsValue}`;
|
|
141
115
|
return candidate.endsWith('.json') ? candidate : `${candidate}/tsconfig.json`;
|
|
142
116
|
}
|
|
143
117
|
function tryParseJson(raw) {
|
|
144
118
|
try {
|
|
145
|
-
// Strip JSON comments (tsconfig allows them) — simplistic removal
|
|
146
|
-
// of // and /* */ style comments outside strings.
|
|
147
119
|
const cleaned = raw.replace(/\/\/.*$/gm, '').replace(/\/\*[\s\S]*?\*\//g, '');
|
|
148
120
|
const parsed = JSON.parse(cleaned);
|
|
149
121
|
return typeof parsed === 'object' && parsed !== null ? parsed : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-strict.js","sourceRoot":"","sources":["../../src/checks/typescript-strict.ts"],"names":[],"mappings":"AAGA,MAAM,cAAc,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC;AAEtE
|
|
1
|
+
{"version":3,"file":"typescript-strict.js","sourceRoot":"","sources":["../../src/checks/typescript-strict.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uses-game-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/uses-game-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"uses-game-sdk.d.ts","sourceRoot":"","sources":["../../src/checks/uses-game-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAmE/E"}
|
|
@@ -64,7 +64,7 @@ export async function checkUsesGameSdk(source) {
|
|
|
64
64
|
}
|
|
65
65
|
if (!hasGameShellImport) {
|
|
66
66
|
issues.push('no GameShell import found in web/src/');
|
|
67
|
-
suggestions.push(
|
|
67
|
+
suggestions.push("Import and use GameShell in your entry point: `import { GameShell } from '@freegamestore/games';`");
|
|
68
68
|
suggestions.push('GameShell provides the standard game chrome (back, fullscreen, mute), lifecycle hooks, and platform integration.');
|
|
69
69
|
}
|
|
70
70
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uses-game-sdk.js","sourceRoot":"","sources":["../../src/checks/uses-game-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAE3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAkB;IACvD,6CAA6C;IAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/C,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/B,aAAa;gBACX,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,WAAW,IAAI,GAAG,CAAC,YAAY,CAAC;oBACzE,CAAC,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,IAAI,WAAW,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QACpF,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,SAAS;QAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,0DAA0D;QAC1D,+DAA+D;QAC/D,+DAA+D;QAC/D,IACE,8EAA8E,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"uses-game-sdk.js","sourceRoot":"","sources":["../../src/checks/uses-game-sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ import { checkGitignoreComplete } from './checks/gitignore-complete.js';
|
|
|
10
10
|
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
11
11
|
import { checkLicenseMit } from './checks/license-mit.js';
|
|
12
12
|
import { checkManifest } from './checks/manifest.js';
|
|
13
|
-
import { checkMaskableIcon } from './checks/pwa-maskable-icon.js';
|
|
14
13
|
import { checkNoAnyTypes } from './checks/no-any-types.js';
|
|
15
14
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
16
15
|
import { checkNoConsoleLog } from './checks/no-console-log.js';
|
|
@@ -25,6 +24,7 @@ import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
|
25
24
|
import { checkNoScroll } from './checks/no-scroll.js';
|
|
26
25
|
import { checkNoTracking } from './checks/no-tracking.js';
|
|
27
26
|
import { checkPwaIcons } from './checks/pwa-icons.js';
|
|
27
|
+
import { checkMaskableIcon } from './checks/pwa-maskable-icon.js';
|
|
28
28
|
import { checkPwaMeta } from './checks/pwa-meta.js';
|
|
29
29
|
import { checkPwaOffline } from './checks/pwa-offline.js';
|
|
30
30
|
import { checkReactStrictMode } from './checks/react-strict-mode.js';
|
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,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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,6 @@ import { checkGitignoreComplete } from './checks/gitignore-complete.js';
|
|
|
10
10
|
import { checkHtmlMeta } from './checks/html-meta.js';
|
|
11
11
|
import { checkLicenseMit } from './checks/license-mit.js';
|
|
12
12
|
import { checkManifest } from './checks/manifest.js';
|
|
13
|
-
import { checkMaskableIcon } from './checks/pwa-maskable-icon.js';
|
|
14
13
|
import { checkNoAnyTypes } from './checks/no-any-types.js';
|
|
15
14
|
import { checkNoBrandOverrides } from './checks/no-brand-overrides.js';
|
|
16
15
|
import { checkNoConsoleLog } from './checks/no-console-log.js';
|
|
@@ -25,6 +24,7 @@ import { checkNoPlaceholders } from './checks/no-placeholders.js';
|
|
|
25
24
|
import { checkNoScroll } from './checks/no-scroll.js';
|
|
26
25
|
import { checkNoTracking } from './checks/no-tracking.js';
|
|
27
26
|
import { checkPwaIcons } from './checks/pwa-icons.js';
|
|
27
|
+
import { checkMaskableIcon } from './checks/pwa-maskable-icon.js';
|
|
28
28
|
import { checkPwaMeta } from './checks/pwa-meta.js';
|
|
29
29
|
import { checkPwaOffline } from './checks/pwa-offline.js';
|
|
30
30
|
import { checkReactStrictMode } from './checks/react-strict-mode.js';
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@freegamestore/compliance",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "Compliance checks for games published on freegamestore.online — used by the CLI for local feedback and by CI for gating.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -37,11 +37,13 @@
|
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.0.0",
|
|
40
|
-
"typescript": "^5.7.0"
|
|
40
|
+
"typescript": "^5.7.0",
|
|
41
|
+
"vitest": "^4.1.5"
|
|
41
42
|
},
|
|
42
43
|
"sideEffects": false,
|
|
43
44
|
"scripts": {
|
|
44
45
|
"build": "tsc",
|
|
45
|
-
"typecheck": "tsc --noEmit"
|
|
46
|
+
"typecheck": "tsc --noEmit",
|
|
47
|
+
"test": "vitest run"
|
|
46
48
|
}
|
|
47
49
|
}
|