@terraware/web-components 5.0.18 → 5.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/license-report.html +1 -1
- package/package.json +1 -1
- package/strings/export.d.ts +26 -0
- package/strings/export.d.ts.map +1 -1
- package/strings/export.js +73 -3
package/license-report.html
CHANGED
|
@@ -48,6 +48,6 @@ td {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
</style>
|
|
51
|
-
<table><thead><tr><th class="string">department</th><th class="string">related to</th><th class="string">name</th><th class="string">license period</th><th class="string">material / not material</th><th class="string">license type</th><th class="string">link</th><th class="string">remote version</th><th class="string">installed version</th><th class="string">defined version</th><th class="string">author</th></tr></thead><tbody><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/core</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">6.3.1</td><td class="string">6.3.1</td><td class="string">^6.0.7</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/sortable</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">10.0.0</td><td class="string">10.0.0</td><td class="string">^10.0.0</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.0</td><td class="string">11.14.0</td><td class="string">^11.11.3</td><td class="string">Emotion Contributors</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/styled</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.1</td><td class="string">11.14.1</td><td class="string">^11.11.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/icons-material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/lab</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.0.1-beta.36</td><td class="string">6.0.1-beta.36</td><td class="string">^6.0.1-beta.36</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/x-date-pickers</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/mui-x.git</td><td class="string">7.29.4</td><td class="string">7.29.4</td><td class="string">^7.22.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@playcanvas/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/playcanvas/react.git</td><td class="string">0.11.5</td><td class="string">0.11.5</td><td class="string">0.11.5</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">classnames</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/JedWatson/classnames.git</td><td class="string">2.5.1</td><td class="string">2.5.1</td><td class="string">^2.3.2</td><td class="string">Jed Watson</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">csv-parse</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/adaltas/node-csv.git</td><td class="string">7.0.3</td><td class="string">7.0.2</td><td class="string">^7.0.0</td><td class="string">David Worms <david@adaltas.com> (https://www.adaltas.com)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">embla-carousel-react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/davidjerleke/embla-carousel</td><td class="string">8.6.0</td><td class="string">8.6.0</td><td class="string">^8.6.0</td><td class="string">David Jerleke</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">geojson</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">http://github.com/caseycesari/geojson.js.git</td><td class="string">0.5.0</td><td class="string">0.5.0</td><td class="string">^0.5.0</td><td class="string">Casey Cesari</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">luxon</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/moment/luxon.git</td><td class="string">3.7.2</td><td class="string">3.7.2</td><td class="string">^3.3.0</td><td class="string">Isaac Cambron</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">marked</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/markedjs/marked.git</td><td class="string">16.4.2</td><td class="string">16.4.2</td><td class="string">^16.2.1</td><td class="string">Christopher Jeffrey</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">material-react-table</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/KevinVandy/material-react-table.git</td><td class="string">3.2.1</td><td class="string">3.2.1</td><td class="string">^3.2.1</td><td class="string">KevinVandy</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">playcanvas</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/playcanvas/engine.git</td><td class="string">2.21.3</td><td class="string">2.21.3</td><td class="string">2.21.3</td><td class="string">PlayCanvas <support@playcanvas.com></td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">prettier</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/prettier/prettier.git</td><td class="string">3.9.9</td><td class="string">3.8.1</td><td class="string">^3.8.1</td><td class="string">James Long</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-intersection-observer</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/thebuilder/react-intersection-observer.git</td><td class="string">11.0.1</td><td class="string">11.0.1</td><td class="string">^11.0.0</td><td class="string">Daniel Schmidt</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-responsive</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/contra/react-responsive.git</td><td class="string">9.0.2</td><td class="string">9.0.2</td><td class="string">^9.0.2</td><td class="string">Contra <yo@contra.io> (https://contra.io)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">sass</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/sass/dart-sass.git</td><td class="string">1.105.
|
|
51
|
+
<table><thead><tr><th class="string">department</th><th class="string">related to</th><th class="string">name</th><th class="string">license period</th><th class="string">material / not material</th><th class="string">license type</th><th class="string">link</th><th class="string">remote version</th><th class="string">installed version</th><th class="string">defined version</th><th class="string">author</th></tr></thead><tbody><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/core</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">6.3.1</td><td class="string">6.3.1</td><td class="string">^6.0.7</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/sortable</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">10.0.0</td><td class="string">10.0.0</td><td class="string">^10.0.0</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.0</td><td class="string">11.14.0</td><td class="string">^11.11.3</td><td class="string">Emotion Contributors</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/styled</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.1</td><td class="string">11.14.1</td><td class="string">^11.11.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/icons-material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/lab</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.0.1-beta.36</td><td class="string">6.0.1-beta.36</td><td class="string">^6.0.1-beta.36</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/x-date-pickers</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/mui-x.git</td><td class="string">7.29.4</td><td class="string">7.29.4</td><td class="string">^7.22.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@playcanvas/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/playcanvas/react.git</td><td class="string">0.11.5</td><td class="string">0.11.5</td><td class="string">0.11.5</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">classnames</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/JedWatson/classnames.git</td><td class="string">2.5.1</td><td class="string">2.5.1</td><td class="string">^2.3.2</td><td class="string">Jed Watson</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">csv-parse</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/adaltas/node-csv.git</td><td class="string">7.0.3</td><td class="string">7.0.2</td><td class="string">^7.0.0</td><td class="string">David Worms <david@adaltas.com> (https://www.adaltas.com)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">embla-carousel-react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/davidjerleke/embla-carousel</td><td class="string">8.6.0</td><td class="string">8.6.0</td><td class="string">^8.6.0</td><td class="string">David Jerleke</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">geojson</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">http://github.com/caseycesari/geojson.js.git</td><td class="string">0.5.0</td><td class="string">0.5.0</td><td class="string">^0.5.0</td><td class="string">Casey Cesari</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">luxon</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/moment/luxon.git</td><td class="string">3.7.2</td><td class="string">3.7.2</td><td class="string">^3.3.0</td><td class="string">Isaac Cambron</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">marked</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/markedjs/marked.git</td><td class="string">16.4.2</td><td class="string">16.4.2</td><td class="string">^16.2.1</td><td class="string">Christopher Jeffrey</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">material-react-table</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/KevinVandy/material-react-table.git</td><td class="string">3.2.1</td><td class="string">3.2.1</td><td class="string">^3.2.1</td><td class="string">KevinVandy</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">playcanvas</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/playcanvas/engine.git</td><td class="string">2.21.3</td><td class="string">2.21.3</td><td class="string">2.21.3</td><td class="string">PlayCanvas <support@playcanvas.com></td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">prettier</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/prettier/prettier.git</td><td class="string">3.9.9</td><td class="string">3.8.1</td><td class="string">^3.8.1</td><td class="string">James Long</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-intersection-observer</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/thebuilder/react-intersection-observer.git</td><td class="string">11.0.1</td><td class="string">11.0.1</td><td class="string">^11.0.0</td><td class="string">Daniel Schmidt</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-responsive</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/contra/react-responsive.git</td><td class="string">9.0.2</td><td class="string">9.0.2</td><td class="string">^9.0.2</td><td class="string">Contra <yo@contra.io> (https://contra.io)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">sass</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/sass/dart-sass.git</td><td class="string">1.105.1</td><td class="string">1.97.2</td><td class="string">^1.75.0</td><td class="string">Natalie Weizenbaum nweiz@google.com https://github.com/nex3</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">tinycolor2</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/bgrins/TinyColor.git</td><td class="string">1.6.0</td><td class="string">1.6.0</td><td class="string">^1.6.0</td><td class="string">Brian Grinstead <briangrinstead@gmail.com> (http://briangrinstead.com)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">web-vitals</td><td class="string">perpetual</td><td class="string">material</td><td class="string">Apache-2.0</td><td class="string">git+https://github.com/GoogleChrome/web-vitals.git</td><td class="string">3.5.2</td><td class="string">3.5.2</td><td class="string">^3.5.2</td><td class="string">Philip Walton philip@philipwalton.com http://philipwalton.com</td></tr></tbody></table>
|
|
52
52
|
</body>
|
|
53
53
|
</html>
|
package/package.json
CHANGED
package/strings/export.d.ts
CHANGED
|
@@ -33,4 +33,30 @@ export declare const convertCsvFile: (csvPath: string, targetDir: string, defaul
|
|
|
33
33
|
* determined by the presence of CSV files.
|
|
34
34
|
*/
|
|
35
35
|
export declare const convertAllLocales: (csvDir: string, stringsDir: string, defaultToEnglish?: boolean) => Promise<string[]>;
|
|
36
|
+
export type UnusedStrings = {
|
|
37
|
+
/** Keys that are never read from the strings table and don't appear anywhere else either. */
|
|
38
|
+
unused: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Keys that are never read from the strings table but whose name appears elsewhere in the source,
|
|
41
|
+
* e.g. as an unrelated enum value, or as a key held in a variable and looked up with
|
|
42
|
+
* strings[variable]. They need a manual check.
|
|
43
|
+
*/
|
|
44
|
+
possiblyUnused: string[];
|
|
45
|
+
};
|
|
46
|
+
export type FindUnusedStringsOptions = {
|
|
47
|
+
csvPath: string;
|
|
48
|
+
sourceDir: string;
|
|
49
|
+
extensions?: string[];
|
|
50
|
+
/** Directory names to skip at any depth. Defaults to "strings", where the generated tables live. */
|
|
51
|
+
excludedDirectories?: string[];
|
|
52
|
+
};
|
|
53
|
+
export declare const findSourceFiles: (directory: string, extensions?: string[], excludedDirectories?: string[]) => Promise<string[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the keys a source file reads from the strings table, either as properties
|
|
56
|
+
* (strings.SAVE) or as quoted keys inside an index expression (strings[isRead ? 'READ' : 'UNREAD']).
|
|
57
|
+
*/
|
|
58
|
+
export declare const findAccessedKeys: (source: string) => string[];
|
|
59
|
+
export declare const classifyKeys: (keys: string[], sources: string[]) => UnusedStrings;
|
|
60
|
+
export declare const findUnusedStrings: ({ csvPath, sourceDir, extensions, excludedDirectories, }: FindUnusedStringsOptions) => Promise<UnusedStrings>;
|
|
61
|
+
export declare const formatUnusedStrings: ({ unused, possiblyUnused }: UnusedStrings) => string;
|
|
36
62
|
//# sourceMappingURL=export.d.ts.map
|
package/strings/export.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/strings/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/strings/export.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAIhD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,UAe9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAU,YAAY,UAAU,EAAE,YAAY,MAAM,KAAG,OAAO,CAAC,MAAM,CAKpG,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,UAAU,KAAG,UAUrD,CAAC;AA2BJ;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,EAAE,0BAAuB,KAAG,OAAO,CAAC,IAAI,CAqB9G,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,0BAAuB,KACtB,OAAO,CAAC,MAAM,EAAE,CAQlB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,6FAA6F;IAC7F,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;OAIG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,oGAAoG;IACpG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAKF,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,aAAY,MAAM,EAAuB,EACzC,sBAAqB,MAAM,EAAiC,KAC3D,OAAO,CAAC,MAAM,EAAE,CAgBlB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAAM,EAKvD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,EAAE,SAAS,MAAM,EAAE,KAAG,aAkBhE,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,0DAKrC,wBAAwB,KAAG,OAAO,CAAC,aAAa,CAMlD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,4BAA4B,aAAa,KAAG,MAY/E,CAAC"}
|
package/strings/export.js
CHANGED
|
@@ -4,11 +4,12 @@ import path from 'node:path';
|
|
|
4
4
|
import { resolveConfig, format } from 'prettier';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Renders the CSV string tables as TypeScript source
|
|
7
|
+
* Renders the CSV string tables as TypeScript source, and finds keys in them that no source file
|
|
8
|
+
* references.
|
|
8
9
|
*
|
|
9
10
|
* This runs at build time, not at runtime. Nothing in the component runtime imports it, so its Node
|
|
10
11
|
* and CSV dependencies never reach a browser bundle. It's published rather than kept in scripts/ so
|
|
11
|
-
* that applications sharing these string tables can drive the same conversion.
|
|
12
|
+
* that applications sharing these string tables can drive the same conversion and checks.
|
|
12
13
|
*/
|
|
13
14
|
const GENERATED_HEADER = '/* Generated from the CSV files in csv/ by `yarn generate-strings`. Do not edit. */';
|
|
14
15
|
|
|
@@ -112,5 +113,74 @@ const convertAllLocales = async (csvDir, stringsDir, defaultToEnglish = true) =>
|
|
|
112
113
|
await Promise.all(csvFiles.map(filename => convertCsvFile(path.join(csvDir, filename), stringsDir, defaultToEnglish)));
|
|
113
114
|
return csvFiles;
|
|
114
115
|
};
|
|
116
|
+
const DEFAULT_EXTENSIONS = ['.ts', '.js', '.tsx', '.jsx'];
|
|
117
|
+
const DEFAULT_EXCLUDED_DIRECTORIES = ['strings'];
|
|
118
|
+
const findSourceFiles = async (directory, extensions = DEFAULT_EXTENSIONS, excludedDirectories = DEFAULT_EXCLUDED_DIRECTORIES) => {
|
|
119
|
+
const entries = await readdir(directory, {
|
|
120
|
+
withFileTypes: true
|
|
121
|
+
});
|
|
122
|
+
const nested = await Promise.all(entries.map(async entry => {
|
|
123
|
+
const entryPath = path.join(directory, entry.name);
|
|
124
|
+
if (entry.isDirectory()) {
|
|
125
|
+
return excludedDirectories.includes(entry.name) ? [] : findSourceFiles(entryPath, extensions, excludedDirectories);
|
|
126
|
+
}
|
|
127
|
+
return extensions.includes(path.extname(entry.name)) ? [entryPath] : [];
|
|
128
|
+
}));
|
|
129
|
+
return nested.flat().sort();
|
|
130
|
+
};
|
|
131
|
+
const STRINGS_PROPERTY_ACCESS = /\bstrings\s*\??\.\s*(\w+)/g;
|
|
132
|
+
const STRINGS_INDEX_ACCESS = /\bstrings\s*(?:\?\.)?\s*\[([^\]]*)\]/g;
|
|
133
|
+
const QUOTED_KEY = /(['"`])(\w+)\1/g;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Returns the keys a source file reads from the strings table, either as properties
|
|
137
|
+
* (strings.SAVE) or as quoted keys inside an index expression (strings[isRead ? 'READ' : 'UNREAD']).
|
|
138
|
+
*/
|
|
139
|
+
const findAccessedKeys = source => [...Array.from(source.matchAll(STRINGS_PROPERTY_ACCESS), match => match[1]), ...Array.from(source.matchAll(STRINGS_INDEX_ACCESS)).flatMap(match => Array.from(match[1].matchAll(QUOTED_KEY), literal => literal[2]))];
|
|
140
|
+
const classifyKeys = (keys, sources) => {
|
|
141
|
+
const accessedKeys = new Set(sources.flatMap(findAccessedKeys));
|
|
142
|
+
const identifiers = new Set(sources.flatMap(source => source.match(/\w+/g) ?? []));
|
|
143
|
+
const unused = [];
|
|
144
|
+
const possiblyUnused = [];
|
|
145
|
+
keys.forEach(key => {
|
|
146
|
+
if (accessedKeys.has(key)) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (identifiers.has(key)) {
|
|
150
|
+
possiblyUnused.push(key);
|
|
151
|
+
} else {
|
|
152
|
+
unused.push(key);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
unused,
|
|
157
|
+
possiblyUnused
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
const findUnusedStrings = async ({
|
|
161
|
+
csvPath,
|
|
162
|
+
sourceDir,
|
|
163
|
+
extensions,
|
|
164
|
+
excludedDirectories
|
|
165
|
+
}) => {
|
|
166
|
+
const keys = Object.keys(csvToStrings(await readFile(csvPath, {
|
|
167
|
+
encoding: 'utf-8'
|
|
168
|
+
})));
|
|
169
|
+
const files = await findSourceFiles(sourceDir, extensions, excludedDirectories);
|
|
170
|
+
const sources = await Promise.all(files.map(file => readFile(file, {
|
|
171
|
+
encoding: 'utf-8'
|
|
172
|
+
})));
|
|
173
|
+
return classifyKeys(keys, sources);
|
|
174
|
+
};
|
|
175
|
+
const formatUnusedStrings = ({
|
|
176
|
+
unused,
|
|
177
|
+
possiblyUnused
|
|
178
|
+
}) => {
|
|
179
|
+
const lines = unused.length === 0 ? ['No unused entries found.'] : ['Unused entries found:', ...unused];
|
|
180
|
+
if (possiblyUnused.length > 0) {
|
|
181
|
+
lines.push('', 'Possibly unused entries (never read from strings, but the name appears elsewhere; check manually):', ...possiblyUnused);
|
|
182
|
+
}
|
|
183
|
+
return `${lines.join('\n')}\n`;
|
|
184
|
+
};
|
|
115
185
|
|
|
116
|
-
export { convertAllLocales, convertCsvFile, csvToStrings, generateGibberish, stringsToTypeScript };
|
|
186
|
+
export { classifyKeys, convertAllLocales, convertCsvFile, csvToStrings, findAccessedKeys, findSourceFiles, findUnusedStrings, formatUnusedStrings, generateGibberish, stringsToTypeScript };
|