gatsby 3.12.0-next.3 → 3.12.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/CHANGELOG.md +12 -0
- package/cache-dir/commonjs/production-app.js +5 -1
- package/cache-dir/production-app.js +3 -1
- package/dist/services/create-pages.js +20 -2
- package/dist/services/create-pages.js.map +1 -1
- package/dist/utils/api-browser-docs.d.ts +3 -3
- package/dist/utils/api-browser-docs.js +3 -3
- package/dist/utils/api-browser-docs.js.map +1 -1
- package/dist/utils/flags.js +7 -1
- package/dist/utils/flags.js.map +1 -1
- package/dist/utils/page-data.d.ts +1 -1
- package/dist/utils/page-data.js +19 -14
- package/dist/utils/page-data.js.map +1 -1
- package/dist/utils/worker/child/queries.d.ts +1 -1
- package/dist/utils/worker/child/queries.js +6 -2
- package/dist/utils/worker/child/queries.js.map +1 -1
- package/gatsby-admin-public/app-433dff501e8fc3ddfa80.js +3 -0
- package/gatsby-admin-public/{app-7416363fd827487b167c.js.LICENSE.txt → app-433dff501e8fc3ddfa80.js.LICENSE.txt} +0 -0
- package/gatsby-admin-public/app-433dff501e8fc3ddfa80.js.map +1 -0
- package/gatsby-admin-public/chunk-map.json +1 -1
- package/gatsby-admin-public/component---src-pages-recipe-js-9e01f3d3434a2f348a2c.js.map +1 -1
- package/gatsby-admin-public/e2852b4470dcb2615e49edcd9de2a3c8119d4bec-4fc8e86d00876f47cb7d.js +2 -0
- package/gatsby-admin-public/e2852b4470dcb2615e49edcd9de2a3c8119d4bec-4fc8e86d00876f47cb7d.js.map +1 -0
- package/gatsby-admin-public/index.html +1 -1
- package/gatsby-admin-public/page-data/app-data.json +1 -1
- package/gatsby-admin-public/page-data/index/page-data.json +5 -1
- package/gatsby-admin-public/page-data/pages/page-data.json +5 -1
- package/gatsby-admin-public/page-data/plugins/page-data.json +6 -1
- package/gatsby-admin-public/page-data/recipe/page-data.json +5 -1
- package/gatsby-admin-public/page-data/recipes/page-data.json +5 -1
- package/gatsby-admin-public/pages/index.html +1 -1
- package/gatsby-admin-public/plugins/index.html +1 -1
- package/gatsby-admin-public/polyfill-08422f5bf802ee9b6cef.js +2 -0
- package/gatsby-admin-public/polyfill-08422f5bf802ee9b6cef.js.map +1 -0
- package/gatsby-admin-public/recipe/index.html +1 -1
- package/gatsby-admin-public/recipes/index.html +1 -1
- package/gatsby-admin-public/{webpack-runtime-dac0f1f2c394f9a910ba.js → webpack-runtime-a88e8fb9bdd306ace038.js} +2 -2
- package/gatsby-admin-public/{webpack-runtime-dac0f1f2c394f9a910ba.js.map → webpack-runtime-a88e8fb9bdd306ace038.js.map} +1 -1
- package/gatsby-admin-public/webpack.stats.json +1 -1
- package/package.json +16 -16
- package/gatsby-admin-public/app-7416363fd827487b167c.js +0 -3
- package/gatsby-admin-public/app-7416363fd827487b167c.js.map +0 -1
- package/gatsby-admin-public/e2852b4470dcb2615e49edcd9de2a3c8119d4bec-8bd93b1279f7c801579e.js +0 -2
- package/gatsby-admin-public/e2852b4470dcb2615e49edcd9de2a3c8119d4bec-8bd93b1279f7c801579e.js.map +0 -1
- package/gatsby-admin-public/polyfill-6a067988206c3d85ff5f.js +0 -2
- package/gatsby-admin-public/polyfill-6a067988206c3d85ff5f.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.12.0](https://github.com/gatsbyjs/gatsby/compare/gatsby@3.12.0-next.3...gatsby@3.12.0) (2021-08-18)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **gatsby:** reduce parse cost writing page-data ([#32763](https://github.com/gatsbyjs/gatsby/issues/32763)) ([b97782f](https://github.com/gatsbyjs/gatsby/commit/b97782f35c92a2c51fdd5c997a0ac3fe45cf2524))
|
|
11
|
+
- **gatsby:** Wrap performance mark in check ([#32778](https://github.com/gatsbyjs/gatsby/issues/32778)) ([365d00b](https://github.com/gatsbyjs/gatsby/commit/365d00b2ee413ef38f56ba4262304865ecd4256e))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- **gatsby:** measure how long GraphQL takes to run in createPages and warn if > 10s ([#32751](https://github.com/gatsbyjs/gatsby/issues/32751)) ([8bd7cf0](https://github.com/gatsbyjs/gatsby/commit/8bd7cf06a0f0bea14c376b8c0daca8856baf6db6))
|
|
16
|
+
- **gatsby:** Opt in 20% of users to webpack dev server caching ([#32829](https://github.com/gatsbyjs/gatsby/issues/32829)) ([#32839](https://github.com/gatsbyjs/gatsby/issues/32839)) ([a0e2a77](https://github.com/gatsbyjs/gatsby/commit/a0e2a77f07731bac63bb8b8a07a30ab422ed7c53))
|
|
17
|
+
|
|
6
18
|
# [3.12.0-next.3](https://github.com/gatsbyjs/gatsby/compare/gatsby@3.12.0-next.2...gatsby@3.12.0-next.3) (2021-08-09)
|
|
7
19
|
|
|
8
20
|
### Bug Fixes
|
|
@@ -162,7 +162,11 @@ window.___loader = _loader.publicLoader;
|
|
|
162
162
|
_react.default.useEffect(() => {
|
|
163
163
|
if (!onClientEntryRanRef.current) {
|
|
164
164
|
onClientEntryRanRef.current = true;
|
|
165
|
-
|
|
165
|
+
|
|
166
|
+
if (performance.mark) {
|
|
167
|
+
performance.mark(`onInitialClientRender`);
|
|
168
|
+
}
|
|
169
|
+
|
|
166
170
|
(0, _apiRunnerBrowser.apiRunner)(`onInitialClientRender`);
|
|
167
171
|
}
|
|
168
172
|
}, []);
|
|
@@ -180,7 +180,9 @@ apiRunnerAsync(`onClientEntry`).then(() => {
|
|
|
180
180
|
React.useEffect(() => {
|
|
181
181
|
if (!onClientEntryRanRef.current) {
|
|
182
182
|
onClientEntryRanRef.current = true
|
|
183
|
-
performance.mark
|
|
183
|
+
if (performance.mark) {
|
|
184
|
+
performance.mark(`onInitialClientRender`)
|
|
185
|
+
}
|
|
184
186
|
|
|
185
187
|
apiRunner(`onInitialClientRender`)
|
|
186
188
|
}
|
|
@@ -32,9 +32,27 @@ async function createPages({
|
|
|
32
32
|
|
|
33
33
|
activity.start();
|
|
34
34
|
const timestamp = Date.now();
|
|
35
|
-
const currentPages = new Map(store.getState().pages);
|
|
35
|
+
const currentPages = new Map(store.getState().pages); // Wrap the GraphQL function so we can measure how long it takes to run.
|
|
36
|
+
|
|
37
|
+
const originalGraphQL = gatsbyNodeGraphQLFunction; // eslint-disable-next-line
|
|
38
|
+
|
|
39
|
+
async function wrappedGraphQL() {
|
|
40
|
+
const start = Date.now(); // @ts-ignore not sure how to type the following
|
|
41
|
+
|
|
42
|
+
const returnValue = await originalGraphQL.apply(this, arguments); // eslint-disable-line
|
|
43
|
+
|
|
44
|
+
const end = Date.now();
|
|
45
|
+
const totalMS = end - start;
|
|
46
|
+
|
|
47
|
+
if (totalMS > 10000) {
|
|
48
|
+
_reporter.default.warn(`Your GraphQL query in createPages took ${totalMS / 1000} seconds which is an unexpectedly long time. See https://gatsby.dev/create-pages-performance for tips on how to improve this.`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return returnValue;
|
|
52
|
+
}
|
|
53
|
+
|
|
36
54
|
await (0, _apiRunnerNode.default)(`createPages`, {
|
|
37
|
-
graphql:
|
|
55
|
+
graphql: wrappedGraphQL,
|
|
38
56
|
traceId: `initial-createPages`,
|
|
39
57
|
waitForCascadingActions: true,
|
|
40
58
|
parentSpan: activity.span,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/create-pages.ts"],"names":["createPages","parentSpan","gatsbyNodeGraphQLFunction","store","deferNodeMutation","shouldRunCreatePagesStatefully","activity","reporter","activityTimer","start","timestamp","Date","now","currentPages","Map","getState","pages","graphql","traceId","waitForCascadingActions","span","
|
|
1
|
+
{"version":3,"sources":["../../src/services/create-pages.ts"],"names":["createPages","parentSpan","gatsbyNodeGraphQLFunction","store","deferNodeMutation","shouldRunCreatePagesStatefully","activity","reporter","activityTimer","start","timestamp","Date","now","currentPages","Map","getState","pages","originalGraphQL","wrappedGraphQL","returnValue","apply","arguments","end","totalMS","warn","graphql","traceId","waitForCascadingActions","span","dataStore","info","countNodes","size","process","env","gatsby_log_level","types","getTypes","verbose","length","map","type","join","deletedPages","tim","changedPages","dispatch","actions","apiFinished","apiName"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AAEO,eAAeA,WAAf,CAA2B;AAChCC,EAAAA,UADgC;AAEhCC,EAAAA,yBAFgC;AAGhCC,EAAAA,KAHgC;AAIhCC,EAAAA,iBAJgC;AAKhCC,EAAAA;AALgC,CAA3B,EASJ;AACD,gCAAYF,KAAZ;;AACA,QAAMG,QAAQ,GAAGC,kBAASC,aAAT,CAAwB,aAAxB,EAAsC;AACrDP,IAAAA;AADqD,GAAtC,CAAjB;;AAGAK,EAAAA,QAAQ,CAACG,KAAT;AACA,QAAMC,SAAS,GAAGC,IAAI,CAACC,GAAL,EAAlB;AACA,QAAMC,YAAY,GAAG,IAAIC,GAAJ,CAA6BX,KAAK,CAACY,QAAN,GAAiBC,KAA9C,CAArB,CAPC,CASD;;AACA,QAAMC,eAAe,GAAGf,yBAAxB,CAVC,CAWD;;AACA,iBAAegB,cAAf,GAAgC;AAC9B,UAAMT,KAAK,GAAGE,IAAI,CAACC,GAAL,EAAd,CAD8B,CAE9B;;AACA,UAAMO,WAAW,GAAG,MAAMF,eAAe,CAACG,KAAhB,CAAsB,IAAtB,EAA4BC,SAA5B,CAA1B,CAH8B,CAGmC;;AACjE,UAAMC,GAAG,GAAGX,IAAI,CAACC,GAAL,EAAZ;AACA,UAAMW,OAAO,GAAGD,GAAG,GAAGb,KAAtB;;AACA,QAAIc,OAAO,GAAG,KAAd,EAAqB;AACnBhB,wBAASiB,IAAT,CACG,0CACCD,OAAO,GAAG,IACX,+HAHH;AAKD;;AACD,WAAOJ,WAAP;AACD;;AAED,QAAM,4BACH,aADG,EAEJ;AACEM,IAAAA,OAAO,EAAEP,cADX;AAEEQ,IAAAA,OAAO,EAAG,qBAFZ;AAGEC,IAAAA,uBAAuB,EAAE,IAH3B;AAIE1B,IAAAA,UAAU,EAAEK,QAAQ,CAACsB,IAJvB;AAKExB,IAAAA;AALF,GAFI,EASJ;AAAEE,IAAAA;AAAF,GATI,CAAN;AAWAA,EAAAA,QAAQ,CAACgB,GAAT;;AAEA,MAAIjB,8BAAJ,EAAoC;AAClC,UAAMC,QAAQ,GAAGC,kBAASC,aAAT,CAAwB,uBAAxB,EAAgD;AAC/DP,MAAAA;AAD+D,KAAhD,CAAjB;;AAGAK,IAAAA,QAAQ,CAACG,KAAT;AACA,UAAM,4BACH,uBADG,EAEJ;AACEgB,MAAAA,OAAO,EAAEvB,yBADX;AAEEwB,MAAAA,OAAO,EAAG,+BAFZ;AAGEC,MAAAA,uBAAuB,EAAE,IAH3B;AAIE1B,MAAAA,UAAU,EAAEK,QAAQ,CAACsB,IAJvB;AAKExB,MAAAA;AALF,KAFI,EASJ;AACEE,MAAAA;AADF,KATI,CAAN;AAaAA,IAAAA,QAAQ,CAACgB,GAAT;AACD;;AAED,QAAMO,SAAS,GAAG,8BAAlB;;AACAtB,oBAASuB,IAAT,CACG,gBAAeD,SAAS,CAACE,UAAV,EAAuB,IAAvC,GACG,mBACC5B,KAAK,CAACY,QAAN,GAAiBC,KAAjB,CAAuBgB,IACxB,gCAJL;;AAOA,MAAIC,OAAO,CAACC,GAAR,CAAYC,gBAAZ,KAAkC,SAAtC,EAAgD;AAC9C,UAAMC,KAAK,GAAGP,SAAS,CAACQ,QAAV,EAAd;;AACA9B,sBAAS+B,OAAT,CACG,yBAAwBF,KAAK,CAACG,MAAO,qBAAoBH,KAAK,CAC5DI,GADuD,CACnDC,IAAI,IAAIA,IAAI,GAAI,IAAR,GAAcZ,SAAS,CAACE,UAAV,CAAqBU,IAArB,CAD6B,EAEvDC,IAFuD,CAEjD,IAFiD,CAE5C,EAHhB;AAKD;;AAEDnC,oBAAS+B,OAAT,CAAkB,4BAAlB;;AAEA,QAAMK,YAAY,GAAG,wCACnBxC,KAAK,CAACY,QAAN,GAAiBC,KADE,EAEnBN,SAFmB,EAGnB,CAAC,CAACL,8BAHiB,CAArB;;AAMAE,oBAAS+B,OAAT,CACG,WAAUK,YAAY,CAACJ,MAAO,QAAOI,YAAY,CAACJ,MAAb,KAAwB,CAAxB,GAA6B,EAA7B,GAAkC,GAAG,EAD7E;;AAIA,QAAMK,GAAG,GAAGrC,kBAASC,aAAT,CAAwB,4BAAxB,CAAZ;;AACAoC,EAAAA,GAAG,CAACnC,KAAJ;AAEA,QAAM;AAAEoC,IAAAA;AAAF,MAAmB,oCACvBhC,YADuB,EAEvBV,KAAK,CAACY,QAAN,GAAiBC,KAFM,CAAzB;;AAKAT,oBAAS+B,OAAT,CACG,SAAQO,YAAY,CAACN,MAAO,gBAC3BM,YAAY,CAACN,MAAb,KAAwB,CAAxB,GAA6B,EAA7B,GAAkC,GACnC,EAHH;;AAMAK,EAAAA,GAAG,CAACtB,GAAJ;AAEAnB,EAAAA,KAAK,CAAC2C,QAAN,CAAeC,iBAAQC,WAAR,CAAoB;AAAEC,IAAAA,OAAO,EAAG;AAAZ,GAApB,CAAf;AAEA,SAAO;AACLJ,IAAAA,YADK;AAELF,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import reporter from \"gatsby-cli/lib/reporter\"\nimport apiRunnerNode from \"../utils/api-runner-node\"\nimport { IDataLayerContext } from \"../state-machines/data-layer/types\"\nimport { assertStore } from \"../utils/assert-store\"\nimport { IGatsbyPage } from \"../redux/types\"\nimport { actions } from \"../redux/actions\"\nimport { deleteUntouchedPages, findChangedPages } from \"../utils/changed-pages\"\nimport { getDataStore } from \"../datastore\"\n\nexport async function createPages({\n parentSpan,\n gatsbyNodeGraphQLFunction,\n store,\n deferNodeMutation,\n shouldRunCreatePagesStatefully,\n}: Partial<IDataLayerContext>): Promise<{\n deletedPages: Array<string>\n changedPages: Array<string>\n}> {\n assertStore(store)\n const activity = reporter.activityTimer(`createPages`, {\n parentSpan,\n })\n activity.start()\n const timestamp = Date.now()\n const currentPages = new Map<string, IGatsbyPage>(store.getState().pages)\n\n // Wrap the GraphQL function so we can measure how long it takes to run.\n const originalGraphQL = gatsbyNodeGraphQLFunction\n // eslint-disable-next-line\n async function wrappedGraphQL() {\n const start = Date.now()\n // @ts-ignore not sure how to type the following\n const returnValue = await originalGraphQL.apply(this, arguments) // eslint-disable-line\n const end = Date.now()\n const totalMS = end - start\n if (totalMS > 10000) {\n reporter.warn(\n `Your GraphQL query in createPages took ${\n totalMS / 1000\n } seconds which is an unexpectedly long time. See https://gatsby.dev/create-pages-performance for tips on how to improve this.`\n )\n }\n return returnValue\n }\n\n await apiRunnerNode(\n `createPages`,\n {\n graphql: wrappedGraphQL,\n traceId: `initial-createPages`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n deferNodeMutation,\n },\n { activity }\n )\n activity.end()\n\n if (shouldRunCreatePagesStatefully) {\n const activity = reporter.activityTimer(`createPagesStatefully`, {\n parentSpan,\n })\n activity.start()\n await apiRunnerNode(\n `createPagesStatefully`,\n {\n graphql: gatsbyNodeGraphQLFunction,\n traceId: `initial-createPagesStatefully`,\n waitForCascadingActions: true,\n parentSpan: activity.span,\n deferNodeMutation,\n },\n {\n activity,\n }\n )\n activity.end()\n }\n\n const dataStore = getDataStore()\n reporter.info(\n `Total nodes: ${dataStore.countNodes()}, ` +\n `SitePage nodes: ${\n store.getState().pages.size\n } (use --verbose for breakdown)`\n )\n\n if (process.env.gatsby_log_level === `verbose`) {\n const types = dataStore.getTypes()\n reporter.verbose(\n `Number of node types: ${types.length}. Nodes per type: ${types\n .map(type => type + `: ` + dataStore.countNodes(type))\n .join(`, `)}`\n )\n }\n\n reporter.verbose(`Checking for deleted pages`)\n\n const deletedPages = deleteUntouchedPages(\n store.getState().pages,\n timestamp,\n !!shouldRunCreatePagesStatefully\n )\n\n reporter.verbose(\n `Deleted ${deletedPages.length} page${deletedPages.length === 1 ? `` : `s`}`\n )\n\n const tim = reporter.activityTimer(`Checking for changed pages`)\n tim.start()\n\n const { changedPages } = findChangedPages(\n currentPages,\n store.getState().pages\n )\n\n reporter.verbose(\n `Found ${changedPages.length} changed page${\n changedPages.length === 1 ? `` : `s`\n }`\n )\n\n tim.end()\n\n store.dispatch(actions.apiFinished({ apiName: `createPages` }))\n\n return {\n changedPages,\n deletedPages,\n }\n}\n"],"file":"create-pages.js"}
|
|
@@ -74,9 +74,9 @@ export declare const onRouteUpdate = true;
|
|
|
74
74
|
* @param {object} $0.routerProps The current state of the router.
|
|
75
75
|
* @param {string} $0.pathname The new pathname (for backwards compatibility with v1).
|
|
76
76
|
* @param {function} $0.getSavedScrollPosition Takes a location and returns the
|
|
77
|
-
* coordinates of the last scroll position for that location, or `null
|
|
78
|
-
* saves scroll positions for each route
|
|
79
|
-
* available after page reload.
|
|
77
|
+
* coordinates of the last scroll position for that location, or `null` depending on
|
|
78
|
+
* whether a scroll happened or not. Gatsby saves scroll positions for each route
|
|
79
|
+
* in `SessionStorage`, so they are available after page reload.
|
|
80
80
|
* @returns {(boolean|string|Array)} Should return either an [x, y] Array of
|
|
81
81
|
* coordinates to scroll to, a string of the `id` or `name` of an element to
|
|
82
82
|
* scroll to, `false` to not update the scroll position, or `true` for the
|
|
@@ -89,9 +89,9 @@ const onRouteUpdate = true;
|
|
|
89
89
|
* @param {object} $0.routerProps The current state of the router.
|
|
90
90
|
* @param {string} $0.pathname The new pathname (for backwards compatibility with v1).
|
|
91
91
|
* @param {function} $0.getSavedScrollPosition Takes a location and returns the
|
|
92
|
-
* coordinates of the last scroll position for that location, or `null
|
|
93
|
-
* saves scroll positions for each route
|
|
94
|
-
* available after page reload.
|
|
92
|
+
* coordinates of the last scroll position for that location, or `null` depending on
|
|
93
|
+
* whether a scroll happened or not. Gatsby saves scroll positions for each route
|
|
94
|
+
* in `SessionStorage`, so they are available after page reload.
|
|
95
95
|
* @returns {(boolean|string|Array)} Should return either an [x, y] Array of
|
|
96
96
|
* coordinates to scroll to, a string of the `id` or `name` of an element to
|
|
97
97
|
* scroll to, `false` to not update the scroll position, or `true` for the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/api-browser-docs.ts"],"names":["onClientEntry","onInitialClientRender","onPreRouteUpdate","onRouteUpdateDelayed","onRouteUpdate","shouldUpdateScroll","registerServiceWorker","wrapPageElement","wrapRootElement","onPrefetchPathname","onPostPrefetchPathname","disableCorePrefetching","replaceHydrateFunction","onServiceWorkerInstalled","onServiceWorkerUpdateFound","onServiceWorkerUpdateReady","onServiceWorkerActive","onServiceWorkerRedundant"],"mappings":";;;;;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,aAAa,GAAG,IAAtB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,gBAAgB,GAAG,IAAzB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,oBAAoB,GAAG,IAA7B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,aAAa,GAAG,IAAtB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,kBAAkB,GAAG,IAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,eAAe,GAAG,IAAxB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,eAAe,GAAG,IAAxB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,kBAAkB,GAAG,IAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,wBAAwB,GAAG,IAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,0BAA0B,GAAG,IAAnC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,0BAA0B,GAAG,IAAnC;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,wBAAwB,GAAG,IAAjC","sourcesContent":["/**\n * This argument is empty. This is for consistency so `pluginOptions` is always second argument.\n * @typedef {undefined} emptyArg\n */\n\n/**\n * Object containing options defined in `gatsby-config.js`\n * @typedef {object} pluginOptions\n */\n\n/**\n * Called when the Gatsby browser runtime first starts.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onClientEntry = () => {\n * console.log(\"We've started!\")\n * callAnalyticsAPI()\n * }\n */\nexport const onClientEntry = true\n\n/**\n * Called when the initial (but not subsequent) render of Gatsby App is done on the client.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onInitialClientRender = () => {\n * console.log(\"ReactDOM.render has executed\")\n * }\n */\nexport const onInitialClientRender = true\n\n/**\n * Called when changing location is started.\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object|null} $0.prevLocation The previous location object\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onPreRouteUpdate = ({ location, prevLocation }) => {\n * console.log(\"Gatsby started to change location to\", location.pathname)\n * console.log(\"Gatsby started to change location from\", prevLocation ? prevLocation.pathname : null)\n * }\n */\nexport const onPreRouteUpdate = true\n\n/**\n * Called when changing location is longer than 1 second.\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object} $0.action The \"action\" that caused the route change\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onRouteUpdateDelayed = () => {\n * console.log(\"We can show loading indicator now\")\n * }\n */\nexport const onRouteUpdateDelayed = true\n\n/**\n * Called when the user changes routes, including on the initial load of the app\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object|null} $0.prevLocation The previous location object\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onRouteUpdate = ({ location, prevLocation }) => {\n * console.log('new pathname', location.pathname)\n * console.log('old pathname', prevLocation ? prevLocation.pathname : null)\n * }\n */\nexport const onRouteUpdate = true\n\n/**\n * Allows a plugin to influence scrolling behavior on navigation.\n * Default behavior is persisting last known scrolling positions and scrolling back to them on navigation.\n * Plugins can also override this and return an Array of coordinates or an element name to scroll to.\n * @param {object} $0\n * @param {object} $0.prevRouterProps The previous state of the router before the route change.\n * @param {object} $0.routerProps The current state of the router.\n * @param {string} $0.pathname The new pathname (for backwards compatibility with v1).\n * @param {function} $0.getSavedScrollPosition Takes a location and returns the\n * coordinates of the last scroll position for that location, or `null`. Gatsby\n * saves scroll positions for each route in `SessionStorage`, so they are\n * available after page reload.\n * @returns {(boolean|string|Array)} Should return either an [x, y] Array of\n * coordinates to scroll to, a string of the `id` or `name` of an element to\n * scroll to, `false` to not update the scroll position, or `true` for the\n * default behavior.\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.shouldUpdateScroll = ({\n * routerProps: { location },\n * getSavedScrollPosition\n * }) => {\n * const currentPosition = getSavedScrollPosition(location)\n * const queriedPosition = getSavedScrollPosition({ pathname: `/random` })\n *\n * window.scrollTo(...(currentPosition || [0, 0]))\n *\n * return false\n * }\n */\nexport const shouldUpdateScroll = true\n\n/**\n * Allow a plugin to register a Service Worker. Should be a function that returns true.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {boolean} Should Gatsby register `/sw.js` service worker\n * @example\n * exports.registerServiceWorker = () => true\n */\nexport const registerServiceWorker = true\n\n/**\n * Allow a plugin to wrap the page element.\n *\n * This is useful for setting wrapper components around pages that won't get\n * unmounted on page changes. For setting Provider components, use [wrapRootElement](#wrapRootElement).\n *\n * _Note:_\n * There is an equivalent hook in Gatsby's [SSR API](/docs/ssr-apis/#wrapPageElement).\n * It is recommended to use both APIs together.\n * For example usage, check out [Using i18n](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-i18n).\n * @param {object} $0\n * @param {ReactNode} $0.element The \"Page\" React Element built by Gatsby.\n * @param {object} $0.props Props object used by page.\n * @param {pluginOptions} pluginOptions\n * @returns {ReactNode} Wrapped element\n * @example\n * const React = require(\"react\")\n * const Layout = require(\"./src/components/layout\").default\n *\n * exports.wrapPageElement = ({ element, props }) => {\n * // props provide same data to Layout as Page element will get\n * // including location, data, etc - you don't need to pass it\n * return <Layout {...props}>{element}</Layout>\n * }\n */\nexport const wrapPageElement = true\n\n/**\n * Allow a plugin to wrap the root element.\n *\n * This is useful to set up any Provider components that will wrap your application.\n * For setting persistent UI elements around pages use [wrapPageElement](#wrapPageElement).\n *\n * _Note:_\n * There is an equivalent hook in Gatsby's [SSR API](/docs/ssr-apis/#wrapRootElement).\n * It is recommended to use both APIs together.\n * For example usage, check out [Using redux](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-redux).\n * @param {object} $0\n * @param {ReactNode} $0.element The \"Root\" React Element built by Gatsby.\n * @param {pluginOptions} pluginOptions\n * @returns {ReactNode} Wrapped element\n * @example\n * const React = require(\"react\")\n * const { Provider } = require(\"react-redux\")\n *\n * const createStore = require(\"./src/state/createStore\")\n * const store = createStore()\n *\n * exports.wrapRootElement = ({ element }) => {\n * return (\n * <Provider store={store}>\n * {element}\n * </Provider>\n * )\n * }\n */\nexport const wrapRootElement = true\n\n/**\n * Called when prefetching for a pathname is triggered. Allows\n * for plugins with custom prefetching logic.\n * @param {object} $0\n * @param {string} $0.pathname The pathname whose resources should now be prefetched\n * @param {function} $0.loadPage Function for fetching resources related to pathname\n * @param {pluginOptions} pluginOptions\n */\nexport const onPrefetchPathname = true\n\n/**\n * Called when prefetching for a pathname is successful. Allows\n * for plugins with custom prefetching logic.\n * @param {object} $0\n * @param {string} $0.pathname The pathname whose resources have now been prefetched\n * @param {pluginOptions} pluginOptions\n */\nexport const onPostPrefetchPathname = true\n\n/**\n * Plugins can take over prefetching logic. If they do, they should call this\n * to disable the now duplicate core prefetching logic.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {boolean} Should disable core prefetching\n * @example\n * exports.disableCorePrefetching = () => true\n */\nexport const disableCorePrefetching = true\n\n/**\n * Allow a plugin to replace the `ReactDOM.render`/`ReactDOM.hydrate` function call by a custom renderer.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {Function} This method should return a function with same signature as `ReactDOM.render()`\n *\n * _Note:_ it's very important to call the `callback` after rendering, otherwise Gatsby will not be able to call `onInitialClientRender`\n * @example\n * exports.replaceHydrateFunction = () => {\n * return (element, container, callback) => {\n * console.log(\"rendering!\");\n * ReactDOM.render(element, container, callback);\n * };\n * };\n */\nexport const replaceHydrateFunction = true\n\n/**\n * Inform plugins when a service worker has been installed.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerInstalled = true\n\n/**\n * Inform plugins of when a service worker has an update available.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerUpdateFound = true\n\n/**\n * Inform plugins when a service worker has been updated in the background\n * and the page is ready to reload to apply changes.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerUpdateReady = true\n\n/**\n * Inform plugins when a service worker has become active.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerActive = true\n\n/**\n * Inform plugins when a service worker is redundant.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerRedundant = true\n"],"file":"api-browser-docs.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/api-browser-docs.ts"],"names":["onClientEntry","onInitialClientRender","onPreRouteUpdate","onRouteUpdateDelayed","onRouteUpdate","shouldUpdateScroll","registerServiceWorker","wrapPageElement","wrapRootElement","onPrefetchPathname","onPostPrefetchPathname","disableCorePrefetching","replaceHydrateFunction","onServiceWorkerInstalled","onServiceWorkerUpdateFound","onServiceWorkerUpdateReady","onServiceWorkerActive","onServiceWorkerRedundant"],"mappings":";;;;;AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,aAAa,GAAG,IAAtB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,gBAAgB,GAAG,IAAzB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,oBAAoB,GAAG,IAA7B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,aAAa,GAAG,IAAtB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,kBAAkB,GAAG,IAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,eAAe,GAAG,IAAxB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,eAAe,GAAG,IAAxB;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,kBAAkB,GAAG,IAA3B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,sBAAsB,GAAG,IAA/B;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,wBAAwB,GAAG,IAAjC;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,0BAA0B,GAAG,IAAnC;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,0BAA0B,GAAG,IAAnC;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,qBAAqB,GAAG,IAA9B;AAEP;AACA;AACA;AACA;AACA;AACA;;;AACO,MAAMC,wBAAwB,GAAG,IAAjC","sourcesContent":["/**\n * This argument is empty. This is for consistency so `pluginOptions` is always second argument.\n * @typedef {undefined} emptyArg\n */\n\n/**\n * Object containing options defined in `gatsby-config.js`\n * @typedef {object} pluginOptions\n */\n\n/**\n * Called when the Gatsby browser runtime first starts.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onClientEntry = () => {\n * console.log(\"We've started!\")\n * callAnalyticsAPI()\n * }\n */\nexport const onClientEntry = true\n\n/**\n * Called when the initial (but not subsequent) render of Gatsby App is done on the client.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onInitialClientRender = () => {\n * console.log(\"ReactDOM.render has executed\")\n * }\n */\nexport const onInitialClientRender = true\n\n/**\n * Called when changing location is started.\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object|null} $0.prevLocation The previous location object\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onPreRouteUpdate = ({ location, prevLocation }) => {\n * console.log(\"Gatsby started to change location to\", location.pathname)\n * console.log(\"Gatsby started to change location from\", prevLocation ? prevLocation.pathname : null)\n * }\n */\nexport const onPreRouteUpdate = true\n\n/**\n * Called when changing location is longer than 1 second.\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object} $0.action The \"action\" that caused the route change\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onRouteUpdateDelayed = () => {\n * console.log(\"We can show loading indicator now\")\n * }\n */\nexport const onRouteUpdateDelayed = true\n\n/**\n * Called when the user changes routes, including on the initial load of the app\n * @param {object} $0\n * @param {object} $0.location A location object\n * @param {object|null} $0.prevLocation The previous location object\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.onRouteUpdate = ({ location, prevLocation }) => {\n * console.log('new pathname', location.pathname)\n * console.log('old pathname', prevLocation ? prevLocation.pathname : null)\n * }\n */\nexport const onRouteUpdate = true\n\n/**\n * Allows a plugin to influence scrolling behavior on navigation.\n * Default behavior is persisting last known scrolling positions and scrolling back to them on navigation.\n * Plugins can also override this and return an Array of coordinates or an element name to scroll to.\n * @param {object} $0\n * @param {object} $0.prevRouterProps The previous state of the router before the route change.\n * @param {object} $0.routerProps The current state of the router.\n * @param {string} $0.pathname The new pathname (for backwards compatibility with v1).\n * @param {function} $0.getSavedScrollPosition Takes a location and returns the\n * coordinates of the last scroll position for that location, or `null` depending on\n * whether a scroll happened or not. Gatsby saves scroll positions for each route\n * in `SessionStorage`, so they are available after page reload.\n * @returns {(boolean|string|Array)} Should return either an [x, y] Array of\n * coordinates to scroll to, a string of the `id` or `name` of an element to\n * scroll to, `false` to not update the scroll position, or `true` for the\n * default behavior.\n * @param {pluginOptions} pluginOptions\n * @example\n * exports.shouldUpdateScroll = ({\n * routerProps: { location },\n * getSavedScrollPosition\n * }) => {\n * const currentPosition = getSavedScrollPosition(location)\n * const queriedPosition = getSavedScrollPosition({ pathname: `/random` })\n *\n * window.scrollTo(...(currentPosition || [0, 0]))\n *\n * return false\n * }\n */\nexport const shouldUpdateScroll = true\n\n/**\n * Allow a plugin to register a Service Worker. Should be a function that returns true.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {boolean} Should Gatsby register `/sw.js` service worker\n * @example\n * exports.registerServiceWorker = () => true\n */\nexport const registerServiceWorker = true\n\n/**\n * Allow a plugin to wrap the page element.\n *\n * This is useful for setting wrapper components around pages that won't get\n * unmounted on page changes. For setting Provider components, use [wrapRootElement](#wrapRootElement).\n *\n * _Note:_\n * There is an equivalent hook in Gatsby's [SSR API](/docs/ssr-apis/#wrapPageElement).\n * It is recommended to use both APIs together.\n * For example usage, check out [Using i18n](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-i18n).\n * @param {object} $0\n * @param {ReactNode} $0.element The \"Page\" React Element built by Gatsby.\n * @param {object} $0.props Props object used by page.\n * @param {pluginOptions} pluginOptions\n * @returns {ReactNode} Wrapped element\n * @example\n * const React = require(\"react\")\n * const Layout = require(\"./src/components/layout\").default\n *\n * exports.wrapPageElement = ({ element, props }) => {\n * // props provide same data to Layout as Page element will get\n * // including location, data, etc - you don't need to pass it\n * return <Layout {...props}>{element}</Layout>\n * }\n */\nexport const wrapPageElement = true\n\n/**\n * Allow a plugin to wrap the root element.\n *\n * This is useful to set up any Provider components that will wrap your application.\n * For setting persistent UI elements around pages use [wrapPageElement](#wrapPageElement).\n *\n * _Note:_\n * There is an equivalent hook in Gatsby's [SSR API](/docs/ssr-apis/#wrapRootElement).\n * It is recommended to use both APIs together.\n * For example usage, check out [Using redux](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-redux).\n * @param {object} $0\n * @param {ReactNode} $0.element The \"Root\" React Element built by Gatsby.\n * @param {pluginOptions} pluginOptions\n * @returns {ReactNode} Wrapped element\n * @example\n * const React = require(\"react\")\n * const { Provider } = require(\"react-redux\")\n *\n * const createStore = require(\"./src/state/createStore\")\n * const store = createStore()\n *\n * exports.wrapRootElement = ({ element }) => {\n * return (\n * <Provider store={store}>\n * {element}\n * </Provider>\n * )\n * }\n */\nexport const wrapRootElement = true\n\n/**\n * Called when prefetching for a pathname is triggered. Allows\n * for plugins with custom prefetching logic.\n * @param {object} $0\n * @param {string} $0.pathname The pathname whose resources should now be prefetched\n * @param {function} $0.loadPage Function for fetching resources related to pathname\n * @param {pluginOptions} pluginOptions\n */\nexport const onPrefetchPathname = true\n\n/**\n * Called when prefetching for a pathname is successful. Allows\n * for plugins with custom prefetching logic.\n * @param {object} $0\n * @param {string} $0.pathname The pathname whose resources have now been prefetched\n * @param {pluginOptions} pluginOptions\n */\nexport const onPostPrefetchPathname = true\n\n/**\n * Plugins can take over prefetching logic. If they do, they should call this\n * to disable the now duplicate core prefetching logic.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {boolean} Should disable core prefetching\n * @example\n * exports.disableCorePrefetching = () => true\n */\nexport const disableCorePrefetching = true\n\n/**\n * Allow a plugin to replace the `ReactDOM.render`/`ReactDOM.hydrate` function call by a custom renderer.\n * @param {emptyArg} _\n * @param {pluginOptions} pluginOptions\n * @returns {Function} This method should return a function with same signature as `ReactDOM.render()`\n *\n * _Note:_ it's very important to call the `callback` after rendering, otherwise Gatsby will not be able to call `onInitialClientRender`\n * @example\n * exports.replaceHydrateFunction = () => {\n * return (element, container, callback) => {\n * console.log(\"rendering!\");\n * ReactDOM.render(element, container, callback);\n * };\n * };\n */\nexport const replaceHydrateFunction = true\n\n/**\n * Inform plugins when a service worker has been installed.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerInstalled = true\n\n/**\n * Inform plugins of when a service worker has an update available.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerUpdateFound = true\n\n/**\n * Inform plugins when a service worker has been updated in the background\n * and the page is ready to reload to apply changes.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerUpdateReady = true\n\n/**\n * Inform plugins when a service worker has become active.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerActive = true\n\n/**\n * Inform plugins when a service worker is redundant.\n * @param {object} $0\n * @param {object} $0.serviceWorker The service worker instance.\n * @param {pluginOptions} pluginOptions\n */\nexport const onServiceWorkerRedundant = true\n"],"file":"api-browser-docs.js"}
|
package/dist/utils/flags.js
CHANGED
|
@@ -108,7 +108,13 @@ const activeFlags = [{
|
|
|
108
108
|
experimental: false,
|
|
109
109
|
description: `Enable webpack's persistent caching during development. Speeds up the start of the development server.`,
|
|
110
110
|
umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,
|
|
111
|
-
testFitness: () =>
|
|
111
|
+
testFitness: () => {
|
|
112
|
+
if ((0, _sampleSiteForExperiment.default)(`DEV_WEBPACK_CACHE`, 20)) {
|
|
113
|
+
return `OPT_IN`;
|
|
114
|
+
} else {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
112
118
|
}, {
|
|
113
119
|
name: `PRESERVE_FILE_DOWNLOAD_CACHE`,
|
|
114
120
|
env: `GATSBY_EXPERIMENTAL_PRESERVE_FILE_DOWNLOAD_CACHE`,
|
package/dist/utils/flags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/flags.ts"],"names":["satisfiesSemvers","semverConstraints","result","_","toPairs","every","packageName","semverConstraint","packageVersion","require","version","e","semver","satisfies","includePrerelease","activeFlags","name","env","command","telemetryId","experimental","description","includedFlags","testFitness","umbrellaIssue","noCI","requires","major","minor","process","versions","node","split","Number"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport semver from \"semver\"\n\nimport sampleSiteForExperiment from \"./sample-site-for-experiment\"\n\n// Does this experiment run for only builds\ntype executingCommand = \"build\" | \"develop\" | \"all\"\n\nexport const satisfiesSemvers = (\n semverConstraints: Record<string, string>\n): boolean => {\n // Check each semver check for the flag.\n // If any are false, then the flag doesn't pass\n const result = _.toPairs(semverConstraints).every(\n ([packageName, semverConstraint]) => {\n let packageVersion: string\n try {\n packageVersion = require(`${packageName}/package.json`).version\n } catch (e) {\n return false\n }\n\n // We care if the semver check doesn't pass.\n return semver.satisfies(packageVersion, semverConstraint, {\n includePrerelease: true,\n })\n }\n )\n\n return result\n}\n\nexport type fitnessEnum = true | false | \"OPT_IN\" | \"LOCKED_IN\"\n\nexport interface IFlag {\n name: string\n env: string\n description: string\n command: executingCommand\n /**\n * Use string identifier to track enabled flag or false to disable any tracking (useful when flag becomes new defaults)\n */\n telemetryId: string | false\n // Heuristics for deciding if a flag is experimental:\n // - there are known bugs most people will encounter and that block being\n // able to use Gatsby normally\n // - very few people have tested the feature so we're not sure if we've\n // uncovered even common problems.\n //\n // Flags should start as experimental but once all serious known bugs are\n // resolved and ~50+ people have tested it, experimental should be set to\n // false.\n experimental: boolean\n /**\n * True means conditions for the feature are met and can be opted in by user.\n *\n * False means it'll be disabled despite the user setting it true e.g.\n * it just won't work e.g. it doesn't have new enough version for something.\n *\n * OPT_IN means the gatsby will enable the flag (unless the user explicitly\n * disables it.\n *\n * LOCKED_IN means that feature is enabled always (unless `noCI` condition is met).\n * This is mostly to provide more meaningful terminal messages instead of removing\n * flag from the flag list when users has the flag set in configuration\n * (avoids showing unknown flag message and shows \"no longer needed\" message).\n */\n testFitness: (flag: IFlag) => fitnessEnum\n /**\n * Human-readable text explaining requirements for this feature to be available\n * (e.g. requires Node 14+)\n *\n * It is shown to users when testFitness() returns `false` but flag is set in gatsby-config.js\n */\n requires?: string\n includedFlags?: Array<string>\n umbrellaIssue?: string\n noCI?: boolean\n}\n\nconst activeFlags: Array<IFlag> = [\n {\n name: `FAST_DEV`,\n env: `GATSBY_EXPERIMENTAL_FAST_DEV`,\n command: `develop`,\n telemetryId: `FastDev`,\n experimental: false,\n description: `Enable all experiments aimed at improving develop server start time.`,\n includedFlags: [\n `DEV_SSR`,\n `PRESERVE_FILE_DOWNLOAD_CACHE`,\n `DEV_WEBPACK_CACHE`,\n ],\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `DEV_SSR`,\n env: `GATSBY_EXPERIMENTAL_DEV_SSR`,\n command: `develop`,\n telemetryId: `DevSsr`,\n experimental: false,\n description: `Server Side Render (SSR) pages on full reloads during develop. Helps you detect SSR bugs and fix them without needing to do full builds. See umbrella issue for how to update custom webpack config.`,\n umbrellaIssue: `https://gatsby.dev/dev-ssr-feedback`,\n testFitness: (): fitnessEnum => {\n if (sampleSiteForExperiment(`DEV_SSR`, 20)) {\n return `OPT_IN`\n } else {\n return true\n }\n },\n },\n {\n name: `QUERY_ON_DEMAND`,\n env: `GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND`,\n command: `develop`,\n telemetryId: false,\n experimental: false,\n description: `Only run queries when needed instead of running all queries upfront. Speeds starting the develop server.`,\n umbrellaIssue: `https://gatsby.dev/query-on-demand-feedback`,\n noCI: true,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `LAZY_IMAGES`,\n env: `GATSBY_EXPERIMENTAL_LAZY_IMAGES`,\n command: `develop`,\n telemetryId: false,\n experimental: false,\n description: `Don't process images during development until they're requested from the browser. Speeds starting the develop server. Requires gatsby-plugin-sharp@2.10.0 or above.`,\n umbrellaIssue: `https://gatsby.dev/lazy-images-feedback`,\n noCI: true,\n testFitness: (): fitnessEnum => {\n const semverConstraints = {\n // Because of this, this flag will never show up\n \"gatsby-plugin-sharp\": `>=2.10.0`,\n }\n if (satisfiesSemvers(semverConstraints)) {\n return `LOCKED_IN`\n } else {\n // gatsby-plugin-sharp is either not installed or not new enough so\n // just disable — it won't work anyways.\n return false\n }\n },\n requires: `Requires gatsby-plugin-sharp@2.10.0 or above.`,\n },\n {\n name: `PRESERVE_WEBPACK_CACHE`,\n env: `GATSBY_EXPERIMENTAL_PRESERVE_WEBPACK_CACHE`,\n command: `all`,\n telemetryId: `PreserveWebpackCache`,\n experimental: false,\n description: `Use webpack's persistent caching and don't delete webpack's cache when changing gatsby-node.js & gatsby-config.js files.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `DEV_WEBPACK_CACHE`,\n env: `GATSBY_EXPERIMENTAL_DEV_WEBPACK_CACHE`,\n command: `develop`,\n telemetryId: `DevWebackCache`,\n experimental: false,\n description: `Enable webpack's persistent caching during development. Speeds up the start of the development server.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `PRESERVE_FILE_DOWNLOAD_CACHE`,\n env: `GATSBY_EXPERIMENTAL_PRESERVE_FILE_DOWNLOAD_CACHE`,\n command: `all`,\n telemetryId: `PreserveFileDownloadCache`,\n experimental: false,\n description: `Don't delete the downloaded files cache when changing gatsby-node.js & gatsby-config.js files.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `PARALLEL_SOURCING`,\n env: `GATSBY_EXPERIMENTAL_PARALLEL_SOURCING`,\n command: `all`,\n telemetryId: `ParallelSourcing`,\n experimental: true,\n description: `Run all source plugins at the same time instead of serially. For sites with multiple source plugins, this can speedup sourcing and transforming considerably.`,\n umbrellaIssue: `https://gatsby.dev/parallel-sourcing-feedback`,\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `FUNCTIONS`,\n env: `GATSBY_EXPERIMENTAL_FUNCTIONS`,\n command: `all`,\n telemetryId: `Functions`,\n experimental: false,\n description: `Compile Serverless functions in your Gatsby project and write them to disk, ready to deploy to Gatsby Cloud`,\n umbrellaIssue: `https://gatsby.dev/functions-feedback`,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `LMDB_STORE`,\n env: `GATSBY_EXPERIMENTAL_LMDB_STORE`,\n command: `all`,\n telemetryId: `LmdbStore`,\n experimental: true,\n umbrellaIssue: `https://gatsby.dev/lmdb-feedback`,\n description: `Store nodes in a persistent embedded database (vs in-memory). Lowers peak memory usage. Requires Node v14.10 or above.`,\n testFitness: (): fitnessEnum => {\n const [major, minor] = process.versions.node.split(`.`)\n return (Number(major) === 14 && Number(minor) >= 10) || Number(major) > 14\n },\n requires: `Requires Node v14.10 or above.`,\n },\n {\n name: `PARALLEL_QUERY_RUNNING`,\n env: `GATSBY_EXPERIMENTAL_PARALLEL_QUERY_RUNNING`,\n command: `build`,\n telemetryId: `PQR`,\n experimental: true,\n umbrellaIssue: `https://gatsby.dev/pqr-feedback`,\n description: `Parallelize running page queries in order to better saturate all available cores. Improves time it takes to run queries during gatsby build. Requires Node v14.10 or above.`,\n includedFlags: [`LMDB_STORE`],\n testFitness: (): fitnessEnum => {\n const [major, minor] = process.versions.node.split(`.`)\n return (Number(major) === 14 && Number(minor) >= 10) || Number(major) > 14\n },\n requires: `Requires Node v14.10 or above.`,\n },\n]\n\nexport default activeFlags\n"],"file":"flags.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/flags.ts"],"names":["satisfiesSemvers","semverConstraints","result","_","toPairs","every","packageName","semverConstraint","packageVersion","require","version","e","semver","satisfies","includePrerelease","activeFlags","name","env","command","telemetryId","experimental","description","includedFlags","testFitness","umbrellaIssue","noCI","requires","major","minor","process","versions","node","split","Number"],"mappings":"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","sourcesContent":["import _ from \"lodash\"\nimport semver from \"semver\"\n\nimport sampleSiteForExperiment from \"./sample-site-for-experiment\"\n\n// Does this experiment run for only builds\ntype executingCommand = \"build\" | \"develop\" | \"all\"\n\nexport const satisfiesSemvers = (\n semverConstraints: Record<string, string>\n): boolean => {\n // Check each semver check for the flag.\n // If any are false, then the flag doesn't pass\n const result = _.toPairs(semverConstraints).every(\n ([packageName, semverConstraint]) => {\n let packageVersion: string\n try {\n packageVersion = require(`${packageName}/package.json`).version\n } catch (e) {\n return false\n }\n\n // We care if the semver check doesn't pass.\n return semver.satisfies(packageVersion, semverConstraint, {\n includePrerelease: true,\n })\n }\n )\n\n return result\n}\n\nexport type fitnessEnum = true | false | \"OPT_IN\" | \"LOCKED_IN\"\n\nexport interface IFlag {\n name: string\n env: string\n description: string\n command: executingCommand\n /**\n * Use string identifier to track enabled flag or false to disable any tracking (useful when flag becomes new defaults)\n */\n telemetryId: string | false\n // Heuristics for deciding if a flag is experimental:\n // - there are known bugs most people will encounter and that block being\n // able to use Gatsby normally\n // - very few people have tested the feature so we're not sure if we've\n // uncovered even common problems.\n //\n // Flags should start as experimental but once all serious known bugs are\n // resolved and ~50+ people have tested it, experimental should be set to\n // false.\n experimental: boolean\n /**\n * True means conditions for the feature are met and can be opted in by user.\n *\n * False means it'll be disabled despite the user setting it true e.g.\n * it just won't work e.g. it doesn't have new enough version for something.\n *\n * OPT_IN means the gatsby will enable the flag (unless the user explicitly\n * disables it.\n *\n * LOCKED_IN means that feature is enabled always (unless `noCI` condition is met).\n * This is mostly to provide more meaningful terminal messages instead of removing\n * flag from the flag list when users has the flag set in configuration\n * (avoids showing unknown flag message and shows \"no longer needed\" message).\n */\n testFitness: (flag: IFlag) => fitnessEnum\n /**\n * Human-readable text explaining requirements for this feature to be available\n * (e.g. requires Node 14+)\n *\n * It is shown to users when testFitness() returns `false` but flag is set in gatsby-config.js\n */\n requires?: string\n includedFlags?: Array<string>\n umbrellaIssue?: string\n noCI?: boolean\n}\n\nconst activeFlags: Array<IFlag> = [\n {\n name: `FAST_DEV`,\n env: `GATSBY_EXPERIMENTAL_FAST_DEV`,\n command: `develop`,\n telemetryId: `FastDev`,\n experimental: false,\n description: `Enable all experiments aimed at improving develop server start time.`,\n includedFlags: [\n `DEV_SSR`,\n `PRESERVE_FILE_DOWNLOAD_CACHE`,\n `DEV_WEBPACK_CACHE`,\n ],\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `DEV_SSR`,\n env: `GATSBY_EXPERIMENTAL_DEV_SSR`,\n command: `develop`,\n telemetryId: `DevSsr`,\n experimental: false,\n description: `Server Side Render (SSR) pages on full reloads during develop. Helps you detect SSR bugs and fix them without needing to do full builds. See umbrella issue for how to update custom webpack config.`,\n umbrellaIssue: `https://gatsby.dev/dev-ssr-feedback`,\n testFitness: (): fitnessEnum => {\n if (sampleSiteForExperiment(`DEV_SSR`, 20)) {\n return `OPT_IN`\n } else {\n return true\n }\n },\n },\n {\n name: `QUERY_ON_DEMAND`,\n env: `GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND`,\n command: `develop`,\n telemetryId: false,\n experimental: false,\n description: `Only run queries when needed instead of running all queries upfront. Speeds starting the develop server.`,\n umbrellaIssue: `https://gatsby.dev/query-on-demand-feedback`,\n noCI: true,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `LAZY_IMAGES`,\n env: `GATSBY_EXPERIMENTAL_LAZY_IMAGES`,\n command: `develop`,\n telemetryId: false,\n experimental: false,\n description: `Don't process images during development until they're requested from the browser. Speeds starting the develop server. Requires gatsby-plugin-sharp@2.10.0 or above.`,\n umbrellaIssue: `https://gatsby.dev/lazy-images-feedback`,\n noCI: true,\n testFitness: (): fitnessEnum => {\n const semverConstraints = {\n // Because of this, this flag will never show up\n \"gatsby-plugin-sharp\": `>=2.10.0`,\n }\n if (satisfiesSemvers(semverConstraints)) {\n return `LOCKED_IN`\n } else {\n // gatsby-plugin-sharp is either not installed or not new enough so\n // just disable — it won't work anyways.\n return false\n }\n },\n requires: `Requires gatsby-plugin-sharp@2.10.0 or above.`,\n },\n {\n name: `PRESERVE_WEBPACK_CACHE`,\n env: `GATSBY_EXPERIMENTAL_PRESERVE_WEBPACK_CACHE`,\n command: `all`,\n telemetryId: `PreserveWebpackCache`,\n experimental: false,\n description: `Use webpack's persistent caching and don't delete webpack's cache when changing gatsby-node.js & gatsby-config.js files.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `DEV_WEBPACK_CACHE`,\n env: `GATSBY_EXPERIMENTAL_DEV_WEBPACK_CACHE`,\n command: `develop`,\n telemetryId: `DevWebackCache`,\n experimental: false,\n description: `Enable webpack's persistent caching during development. Speeds up the start of the development server.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => {\n if (sampleSiteForExperiment(`DEV_WEBPACK_CACHE`, 20)) {\n return `OPT_IN`\n } else {\n return true\n }\n },\n },\n {\n name: `PRESERVE_FILE_DOWNLOAD_CACHE`,\n env: `GATSBY_EXPERIMENTAL_PRESERVE_FILE_DOWNLOAD_CACHE`,\n command: `all`,\n telemetryId: `PreserveFileDownloadCache`,\n experimental: false,\n description: `Don't delete the downloaded files cache when changing gatsby-node.js & gatsby-config.js files.`,\n umbrellaIssue: `https://gatsby.dev/cache-clearing-feedback`,\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `PARALLEL_SOURCING`,\n env: `GATSBY_EXPERIMENTAL_PARALLEL_SOURCING`,\n command: `all`,\n telemetryId: `ParallelSourcing`,\n experimental: true,\n description: `Run all source plugins at the same time instead of serially. For sites with multiple source plugins, this can speedup sourcing and transforming considerably.`,\n umbrellaIssue: `https://gatsby.dev/parallel-sourcing-feedback`,\n testFitness: (): fitnessEnum => true,\n },\n {\n name: `FUNCTIONS`,\n env: `GATSBY_EXPERIMENTAL_FUNCTIONS`,\n command: `all`,\n telemetryId: `Functions`,\n experimental: false,\n description: `Compile Serverless functions in your Gatsby project and write them to disk, ready to deploy to Gatsby Cloud`,\n umbrellaIssue: `https://gatsby.dev/functions-feedback`,\n testFitness: (): fitnessEnum => `LOCKED_IN`,\n },\n {\n name: `LMDB_STORE`,\n env: `GATSBY_EXPERIMENTAL_LMDB_STORE`,\n command: `all`,\n telemetryId: `LmdbStore`,\n experimental: true,\n umbrellaIssue: `https://gatsby.dev/lmdb-feedback`,\n description: `Store nodes in a persistent embedded database (vs in-memory). Lowers peak memory usage. Requires Node v14.10 or above.`,\n testFitness: (): fitnessEnum => {\n const [major, minor] = process.versions.node.split(`.`)\n return (Number(major) === 14 && Number(minor) >= 10) || Number(major) > 14\n },\n requires: `Requires Node v14.10 or above.`,\n },\n {\n name: `PARALLEL_QUERY_RUNNING`,\n env: `GATSBY_EXPERIMENTAL_PARALLEL_QUERY_RUNNING`,\n command: `build`,\n telemetryId: `PQR`,\n experimental: true,\n umbrellaIssue: `https://gatsby.dev/pqr-feedback`,\n description: `Parallelize running page queries in order to better saturate all available cores. Improves time it takes to run queries during gatsby build. Requires Node v14.10 or above.`,\n includedFlags: [`LMDB_STORE`],\n testFitness: (): fitnessEnum => {\n const [major, minor] = process.versions.node.split(`.`)\n return (Number(major) === 14 && Number(minor) >= 10) || Number(major) > 14\n },\n requires: `Requires Node v14.10 or above.`,\n },\n]\n\nexport default activeFlags\n"],"file":"flags.js"}
|
|
@@ -17,7 +17,7 @@ export declare function pageDataExists(publicDir: string, pagePath: string): boo
|
|
|
17
17
|
export declare function waitUntilPageQueryResultsAreStored(): Promise<void>;
|
|
18
18
|
export declare function savePageQueryResult(programDir: string, pagePath: string, stringifiedResult: string): Promise<void>;
|
|
19
19
|
export declare function readPageQueryResult(publicDir: string, pagePath: string): Promise<any>;
|
|
20
|
-
export declare function writePageData(publicDir: string, { componentChunkName, matchPath, path: pagePath, staticQueryHashes, }: IPageData): Promise<
|
|
20
|
+
export declare function writePageData(publicDir: string, { componentChunkName, matchPath, path: pagePath, staticQueryHashes, }: IPageData): Promise<string>;
|
|
21
21
|
export declare function isFlushEnqueued(): boolean;
|
|
22
22
|
export declare function flush(): Promise<void>;
|
|
23
23
|
export declare function enqueueFlush(): void;
|
package/dist/utils/page-data.js
CHANGED
|
@@ -107,14 +107,14 @@ async function readPageQueryResult(publicDir, pagePath) {
|
|
|
107
107
|
const stringifiedResult = await getLMDBPageQueryResultsCache().get(pagePath);
|
|
108
108
|
|
|
109
109
|
if (typeof stringifiedResult === `string`) {
|
|
110
|
-
return
|
|
110
|
+
return stringifiedResult;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
throw new Error(`Couldn't find temp query result for "${pagePath}".`);
|
|
114
114
|
} else {
|
|
115
115
|
const pageQueryResultsPath = _path.default.join(publicDir, `..`, `.cache`, `json`, `${pagePath.replace(/\//g, `_`)}.json`);
|
|
116
116
|
|
|
117
|
-
return _fsExtra.default.
|
|
117
|
+
return _fsExtra.default.readFile(pageQueryResultsPath);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -126,16 +126,20 @@ async function writePageData(publicDir, {
|
|
|
126
126
|
}) {
|
|
127
127
|
const result = await readPageQueryResult(publicDir, pagePath);
|
|
128
128
|
const outputFilePath = getFilePath(publicDir, pagePath);
|
|
129
|
-
|
|
130
|
-
componentChunkName,
|
|
131
|
-
path: pagePath,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
let body = `{
|
|
130
|
+
"componentChunkName": "${componentChunkName}",
|
|
131
|
+
"path": "${pagePath}",
|
|
132
|
+
"result": ${result},
|
|
133
|
+
"staticQueryHashes": ${JSON.stringify(staticQueryHashes)}`;
|
|
134
|
+
|
|
135
|
+
if (matchPath) {
|
|
136
|
+
body += `,
|
|
137
|
+
"matchPath": "${matchPath}"`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
body += `}`; // transform asset size to kB (from bytes) to fit 64 bit to numbers
|
|
137
141
|
|
|
138
|
-
const pageDataSize = Buffer.byteLength(
|
|
142
|
+
const pageDataSize = Buffer.byteLength(body) / 1000;
|
|
139
143
|
|
|
140
144
|
_redux.store.dispatch({
|
|
141
145
|
type: `ADD_PAGE_DATA_STATS`,
|
|
@@ -143,11 +147,11 @@ async function writePageData(publicDir, {
|
|
|
143
147
|
pagePath,
|
|
144
148
|
filePath: outputFilePath,
|
|
145
149
|
size: pageDataSize,
|
|
146
|
-
pageDataHash: (0, _gatsbyCoreUtils.createContentDigest)(
|
|
150
|
+
pageDataHash: (0, _gatsbyCoreUtils.createContentDigest)(body)
|
|
147
151
|
}
|
|
148
152
|
});
|
|
149
153
|
|
|
150
|
-
await _fsExtra.default.outputFile(outputFilePath,
|
|
154
|
+
await _fsExtra.default.outputFile(outputFilePath, body);
|
|
151
155
|
return body;
|
|
152
156
|
}
|
|
153
157
|
|
|
@@ -164,6 +168,7 @@ async function flush() {
|
|
|
164
168
|
return;
|
|
165
169
|
}
|
|
166
170
|
|
|
171
|
+
await waitUntilPageQueryResultsAreStored();
|
|
167
172
|
isFlushPending = false;
|
|
168
173
|
isFlushing = true;
|
|
169
174
|
|
|
@@ -220,7 +225,7 @@ async function flush() {
|
|
|
220
225
|
if ((program === null || program === void 0 ? void 0 : (_program$_2 = program._) === null || _program$_2 === void 0 ? void 0 : _program$_2[0]) === `develop`) {
|
|
221
226
|
_websocketManager.websocketManager.emitPageData({
|
|
222
227
|
id: pagePath,
|
|
223
|
-
result
|
|
228
|
+
result: JSON.parse(result)
|
|
224
229
|
});
|
|
225
230
|
}
|
|
226
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/page-data.ts"],"names":["fixedPagePath","pagePath","reverseFixedPagePath","pageDataRequestPath","getFilePath","publicDir","path","join","readPageData","filePath","rawPageData","fs","readFile","JSON","parse","removePageData","existsSync","remove","Promise","resolve","pageDataExists","lmdbPageQueryResultsCache","getLMDBPageQueryResultsCache","GatsbyCacheLmdbImpl","require","default","name","encoding","init","savePageQueryResultsPromise","waitUntilPageQueryResultsAreStored","savePageQueryResult","programDir","stringifiedResult","set","pageQueryResultsPath","replace","outputFile","readPageQueryResult","get","Error","readJSON","writePageData","componentChunkName","matchPath","staticQueryHashes","result","outputFilePath","body","bodyStr","stringify","pageDataSize","Buffer","byteLength","store","dispatch","type","payload","size","pageDataHash","isFlushPending","isFlushing","isFlushEnqueued","flush","pendingPageDataWrites","pages","program","staticQueriesByTemplate","queries","getState","pagePaths","writePageDataActivity","reporter","createProgress","start","flushQueue","cb","page","_","process","env","GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND","query","trackedQueries","dirty","FLAG_DIRTY_NEW_PAGE","componentPath","directory","tick","websocketManager","emitPageData","id","push","idle","drain","end","enqueueFlush","handleStalePageData","pathExists","activity","activityTimer","pageDataFilesFromPreviousBuilds","reject","results","Set","stream","on","data","add","e","expectedPageDataFiles","forEach","deletionPromises","pageDataFilePath","has","all"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AAgBO,SAASA,aAAT,CAAuBC,QAAvB,EAAiD;AACtD,SAAOA,QAAQ,KAAM,GAAd,GAAoB,OAApB,GAA6BA,QAApC;AACD;;AAEM,SAASC,oBAAT,CAA8BC,mBAA9B,EAAmE;AACxE,SAAOA,mBAAmB,KAAM,OAAzB,GAAmC,GAAnC,GAAwCA,mBAA/C;AACD;;AAED,SAASC,WAAT,CAAqBC,SAArB,EAAwCJ,QAAxC,EAAkE;AAChE,SAAOK,cAAKC,IAAL,CACLF,SADK,EAEJ,WAFI,EAGLL,aAAa,CAACC,QAAD,CAHR,EAIJ,gBAJI,CAAP;AAMD;;AAEM,eAAeO,YAAf,CACLH,SADK,EAELJ,QAFK,EAG8B;AACnC,QAAMQ,QAAQ,GAAGL,WAAW,CAACC,SAAD,EAAYJ,QAAZ,CAA5B;AACA,QAAMS,WAAW,GAAG,MAAMC,iBAAGC,QAAH,CAAYH,QAAZ,EAAuB,OAAvB,CAA1B;AAEA,SAAOI,IAAI,CAACC,KAAL,CAAWJ,WAAX,CAAP;AACD;;AAEM,eAAeK,cAAf,CACLV,SADK,EAELJ,QAFK,EAGU;AACf,QAAMQ,QAAQ,GAAGL,WAAW,CAACC,SAAD,EAAYJ,QAAZ,CAA5B;;AAEA,MAAIU,iBAAGK,UAAH,CAAcP,QAAd,CAAJ,EAA6B;AAC3B,WAAO,MAAME,iBAAGM,MAAH,CAAUR,QAAV,CAAb;AACD;;AAED,SAAOS,OAAO,CAACC,OAAR,EAAP;AACD;;AAEM,SAASC,cAAT,CAAwBf,SAAxB,EAA2CJ,QAA3C,EAAsE;AAC3E,SAAOU,iBAAGK,UAAH,CAAcZ,WAAW,CAACC,SAAD,EAAYJ,QAAZ,CAAzB,CAAP;AACD;;AAED,IAAIoB,yBAAJ;;AACA,SAASC,4BAAT,GAAyD;AACvD,MAAI,CAACD,yBAAL,EAAgC;AAC9B,UAAME,mBAAmB,GAAGC,OAAO,CAAE,cAAF,CAAP,CAAwBC,OAApD;;AACAJ,IAAAA,yBAAyB,GAAG,IAAIE,mBAAJ,CAAwB;AAClDG,MAAAA,IAAI,EAAG,4BAD2C;AAElDC,MAAAA,QAAQ,EAAG;AAFuC,KAAxB,EAGzBC,IAHyB,EAA5B;AAID;;AACD,SAAOP,yBAAP;AACD;;AAED,IAAIQ,2BAA2B,GAAGX,OAAO,CAACC,OAAR,EAAlC;;AAEO,SAASW,kCAAT,GAA6D;AAClE,SAAOD,2BAAP;AACD;;AAEM,eAAeE,mBAAf,CACLC,UADK,EAEL/B,QAFK,EAGLgC,iBAHK,EAIU;AACf,MAAI,6BAAJ,EAAmB;AACjBJ,IAAAA,2BAA2B,GAAGP,4BAA4B,GAAGY,GAA/B,CAC5BjC,QAD4B,EAE5BgC,iBAF4B,CAA9B;AAID,GALD,MAKO;AACL,UAAME,oBAAoB,GAAG7B,cAAKC,IAAL,CAC3ByB,UAD2B,EAE1B,QAF0B,EAG1B,MAH0B,EAI1B,GAAE/B,QAAQ,CAACmC,OAAT,CAAiB,KAAjB,EAAyB,GAAzB,CAA6B,OAJL,CAA7B;;AAMA,UAAMzB,iBAAG0B,UAAH,CAAcF,oBAAd,EAAoCF,iBAApC,CAAN;AACD;AACF;;AAEM,eAAeK,mBAAf,CACLjC,SADK,EAELJ,QAFK,EAGS;AACd,MAAI,6BAAJ,EAAmB;AACjB,UAAMgC,iBAAiB,GAAG,MAAMX,4BAA4B,GAAGiB,GAA/B,CAAmCtC,QAAnC,CAAhC;;AACA,QAAI,OAAOgC,iBAAP,KAA8B,QAAlC,EAA2C;AACzC,aAAOpB,IAAI,CAACC,KAAL,CAAWmB,iBAAX,CAAP;AACD;;AACD,UAAM,IAAIO,KAAJ,CAAW,wCAAuCvC,QAAS,IAA3D,CAAN;AACD,GAND,MAMO;AACL,UAAMkC,oBAAoB,GAAG7B,cAAKC,IAAL,CAC3BF,SAD2B,EAE1B,IAF0B,EAG1B,QAH0B,EAI1B,MAJ0B,EAK1B,GAAEJ,QAAQ,CAACmC,OAAT,CAAiB,KAAjB,EAAyB,GAAzB,CAA6B,OALL,CAA7B;;AAOA,WAAOzB,iBAAG8B,QAAH,CAAYN,oBAAZ,CAAP;AACD;AACF;;AAEM,eAAeO,aAAf,CACLrC,SADK,EAEL;AACEsC,EAAAA,kBADF;AAEEC,EAAAA,SAFF;AAGEtC,EAAAA,IAAI,EAAEL,QAHR;AAIE4C,EAAAA;AAJF,CAFK,EAQ8B;AACnC,QAAMC,MAAM,GAAG,MAAMR,mBAAmB,CAACjC,SAAD,EAAYJ,QAAZ,CAAxC;AAEA,QAAM8C,cAAc,GAAG3C,WAAW,CAACC,SAAD,EAAYJ,QAAZ,CAAlC;AACA,QAAM+C,IAAI,GAAG;AACXL,IAAAA,kBADW;AAEXrC,IAAAA,IAAI,EAAEL,QAFK;AAGX2C,IAAAA,SAHW;AAIXE,IAAAA,MAJW;AAKXD,IAAAA;AALW,GAAb;AAQA,QAAMI,OAAO,GAAGpC,IAAI,CAACqC,SAAL,CAAeF,IAAf,CAAhB,CAZmC,CAanC;;AACA,QAAMG,YAAY,GAAGC,MAAM,CAACC,UAAP,CAAkBJ,OAAlB,IAA6B,IAAlD;;AAEAK,eAAMC,QAAN,CAAe;AACbC,IAAAA,IAAI,EAAG,qBADM;AAEbC,IAAAA,OAAO,EAAE;AACPxD,MAAAA,QADO;AAEPQ,MAAAA,QAAQ,EAAEsC,cAFH;AAGPW,MAAAA,IAAI,EAAEP,YAHC;AAIPQ,MAAAA,YAAY,EAAE,0CAAoBV,OAApB;AAJP;AAFI,GAAf;;AAUA,QAAMtC,iBAAG0B,UAAH,CAAcU,cAAd,EAA8BE,OAA9B,CAAN;AACA,SAAOD,IAAP;AACD;;AAED,IAAIY,cAAc,GAAG,KAArB;AACA,IAAIC,UAAU,GAAG,KAAjB;;AAEO,SAASC,eAAT,GAAoC;AACzC,SAAOF,cAAP;AACD;;AAEM,eAAeG,KAAf,GAAsC;AAC3C,MAAIF,UAAJ,EAAgB;AACd;AACA;AACD;;AACDD,EAAAA,cAAc,GAAG,KAAjB;AACAC,EAAAA,UAAU,GAAG,IAAb;;AACA,QAAM;AACJG,IAAAA,qBADI;AAEJC,IAAAA,KAFI;AAGJC,IAAAA,OAHI;AAIJC,IAAAA,uBAJI;AAKJC,IAAAA;AALI,MAMFd,aAAMe,QAAN,EANJ;;AAQA,QAAM;AAAEC,IAAAA;AAAF,MAAgBN,qBAAtB;;AAEA,QAAMO,qBAAqB,GAAGC,kBAASC,cAAT,CAC3B,kDAD2B,EAE5BH,SAAS,CAACZ,IAFkB,EAG5B,CAH4B,CAA9B;;AAKAa,EAAAA,qBAAqB,CAACG,KAAtB;AAEA,QAAMC,UAAU,GAAG,oBAAM,OAAO1E,QAAP,EAAiB2E,EAAjB,KAAwB;AAC/C,UAAMC,IAAI,GAAGZ,KAAK,CAAC1B,GAAN,CAAUtC,QAAV,CAAb,CAD+C,CAG/C;AACA;AACA;AACA;AACA;AACA;;AACA,QAAI4E,IAAJ,EAAU;AAAA;;AACR,UACE,CAAAX,OAAO,SAAP,IAAAA,OAAO,WAAP,0BAAAA,OAAO,CAAEY,CAAT,0DAAa,CAAb,OAAqB,SAArB,IACAC,OAAO,CAACC,GAAR,CAAYC,mCAFd,EAGE;AACA;AACA;AACA;AACA;AACA,cAAMC,KAAK,GAAGd,OAAO,CAACe,cAAR,CAAuB5C,GAAvB,CAA2BsC,IAAI,CAACvE,IAAhC,CAAd;;AACA,YAAI,CAAC4E,KAAL,EAAY;AACV;AACA,gBAAM,IAAI1C,KAAJ,CACH,iEADG,CAAN;AAGD;;AAED,YAAI,sBAAQ0C,KAAK,CAACE,KAAd,EAAqBC,4BAArB,CAAJ,EAA+C;AAC7C;AACA,iBAAOT,EAAE,CAAC,IAAD,EAAO,IAAP,CAAT;AACD;AACF;;AAED,YAAM/B,iBAAiB,GACrBsB,uBAAuB,CAAC5B,GAAxB,CAA4BsC,IAAI,CAACS,aAAjC,KAAmD,EADrD;AAGA,YAAMxC,MAAM,GAAG,MAAMJ,aAAa,CAChCpC,cAAKC,IAAL,CAAU2D,OAAO,CAACqB,SAAlB,EAA8B,QAA9B,CADgC,EAEhC,EACE,GAAGV,IADL;AAEEhC,QAAAA;AAFF,OAFgC,CAAlC;AAQA0B,MAAAA,qBAAqB,CAACiB,IAAtB;;AAEA,UAAI,CAAAtB,OAAO,SAAP,IAAAA,OAAO,WAAP,2BAAAA,OAAO,CAAEY,CAAT,4DAAa,CAAb,OAAqB,SAAzB,EAAmC;AACjCW,2CAAiBC,YAAjB,CAA8B;AAC5BC,UAAAA,EAAE,EAAE1F,QADwB;AAE5B6C,UAAAA;AAF4B,SAA9B;AAID;AACF;;AAEDQ,iBAAMC,QAAN,CAAe;AACbC,MAAAA,IAAI,EAAG,+BADM;AAEbC,MAAAA,OAAO,EAAE;AACPoB,QAAAA,IAAI,EAAE5E;AADC;AAFI,KAAf;;AAOA,WAAO2E,EAAE,CAAC,IAAD,EAAO,IAAP,CAAT;AACD,GA7DkB,EA6DhB,EA7DgB,CAAnB;;AA+DA,OAAK,MAAM3E,QAAX,IAAuBqE,SAAvB,EAAkC;AAChCK,IAAAA,UAAU,CAACiB,IAAX,CAAgB3F,QAAhB,EAA0B,MAAM,CAAE,CAAlC;AACD;;AAED,MAAI,CAAC0E,UAAU,CAACkB,IAAX,EAAL,EAAwB;AACtB,UAAM,IAAI3E,OAAJ,CAAYC,OAAO,IAAI;AAC3BwD,MAAAA,UAAU,CAACmB,KAAX,GAAmB3E,OAAnB;AACD,KAFK,CAAN;AAGD;;AAEDoD,EAAAA,qBAAqB,CAACwB,GAAtB;AACAlC,EAAAA,UAAU,GAAG,KAAb;AAEA;AACD;;AAEM,SAASmC,YAAT,GAA8B;AACnC,MAAI,4CAAJ,EAA8B;AAC5BpC,IAAAA,cAAc,GAAG,IAAjB;AACD,GAFD,MAEO;AACLG,IAAAA,KAAK;AACN;AACF;;AAEM,eAAekC,mBAAf,GAAoD;AACzD,MAAI,EAAE,MAAMtF,iBAAGuF,UAAH,CAAe,kBAAf,CAAR,CAAJ,EAAgD;AAC9C;AACD,GAHwD,CAKzD;AACA;AACA;;;AAEA,QAAMC,QAAQ,GAAG3B,kBAAS4B,aAAT,CAAwB,6BAAxB,CAAjB;;AACAD,EAAAA,QAAQ,CAACzB,KAAT;AAEA,QAAM2B,+BAA+B,GAAG,MAAM,IAAInF,OAAJ,CAC5C,CAACC,OAAD,EAAUmF,MAAV,KAAqB;AACnB,UAAMC,OAAO,GAAG,IAAIC,GAAJ,EAAhB;AAEA,UAAMC,MAAM,GAAG,oBAAc,kBAAd,CAAf;AAEAA,IAAAA,MAAM,CAACC,EAAP,CAAW,MAAX,EAAmBC,IAAD,IAAiB;AACjC,UAAIA,IAAI,CAACjF,IAAL,KAAe,gBAAnB,EAAoC;AAClC6E,QAAAA,OAAO,CAACK,GAAR,CAAYD,IAAI,CAACrG,IAAjB;AACD;AACF,KAJD;AAMAmG,IAAAA,MAAM,CAACC,EAAP,CAAW,OAAX,EAAmBG,CAAC,IAAI;AACtBP,MAAAA,MAAM,CAACO,CAAD,CAAN;AACD,KAFD;AAIAJ,IAAAA,MAAM,CAACC,EAAP,CAAW,KAAX,EAAiB,MAAMvF,OAAO,CAACoF,OAAD,CAA9B;AACD,GAjB2C,CAA9C;AAoBA,QAAMO,qBAAqB,GAAG,IAAIN,GAAJ,EAA9B;;AACAlD,eAAMe,QAAN,GAAiBJ,KAAjB,CAAuB8C,OAAvB,CAA+BlC,IAAI,IAAI;AACrCiC,IAAAA,qBAAqB,CAACF,GAAtB,CAA0BxG,WAAW,CAAE,QAAF,EAAWyE,IAAI,CAACvE,IAAhB,CAArC;AACD,GAFD;;AAIA,QAAM0G,gBAAsC,GAAG,EAA/C;AACAX,EAAAA,+BAA+B,CAACU,OAAhC,CAAwCE,gBAAgB,IAAI;AAC1D,QAAI,CAACH,qBAAqB,CAACI,GAAtB,CAA0BD,gBAA1B,CAAL,EAAkD;AAChDD,MAAAA,gBAAgB,CAACpB,IAAjB,CAAsBjF,iBAAGM,MAAH,CAAUgG,gBAAV,CAAtB;AACD;AACF,GAJD;AAMA,QAAM/F,OAAO,CAACiG,GAAR,CAAYH,gBAAZ,CAAN;AAEAb,EAAAA,QAAQ,CAACJ,GAAT;AACD","sourcesContent":["import { walkStream as fsWalkStream, Entry } from \"@nodelib/fs.walk\"\nimport fs from \"fs-extra\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport fastq from \"fastq\"\nimport path from \"path\"\nimport { createContentDigest } from \"gatsby-core-utils\"\nimport { IGatsbyPage } from \"../redux/types\"\nimport { websocketManager } from \"./websocket-manager\"\nimport { isWebpackStatusPending } from \"./webpack-status\"\nimport { store } from \"../redux\"\nimport { hasFlag, FLAG_DIRTY_NEW_PAGE } from \"../redux/reducers/queries\"\nimport { isLmdbStore } from \"../datastore\"\nimport type GatsbyCacheLmdb from \"./cache-lmdb\"\n\nimport { IExecutionResult } from \"../query/types\"\n\ninterface IPageData {\n componentChunkName: IGatsbyPage[\"componentChunkName\"]\n matchPath?: IGatsbyPage[\"matchPath\"]\n path: IGatsbyPage[\"path\"]\n staticQueryHashes: Array<string>\n}\n\nexport interface IPageDataWithQueryResult extends IPageData {\n result: IExecutionResult\n}\n\nexport function fixedPagePath(pagePath: string): string {\n return pagePath === `/` ? `index` : pagePath\n}\n\nexport function reverseFixedPagePath(pageDataRequestPath: string): string {\n return pageDataRequestPath === `index` ? `/` : pageDataRequestPath\n}\n\nfunction getFilePath(publicDir: string, pagePath: string): string {\n return path.join(\n publicDir,\n `page-data`,\n fixedPagePath(pagePath),\n `page-data.json`\n )\n}\n\nexport async function readPageData(\n publicDir: string,\n pagePath: string\n): Promise<IPageDataWithQueryResult> {\n const filePath = getFilePath(publicDir, pagePath)\n const rawPageData = await fs.readFile(filePath, `utf-8`)\n\n return JSON.parse(rawPageData)\n}\n\nexport async function removePageData(\n publicDir: string,\n pagePath: string\n): Promise<void> {\n const filePath = getFilePath(publicDir, pagePath)\n\n if (fs.existsSync(filePath)) {\n return await fs.remove(filePath)\n }\n\n return Promise.resolve()\n}\n\nexport function pageDataExists(publicDir: string, pagePath: string): boolean {\n return fs.existsSync(getFilePath(publicDir, pagePath))\n}\n\nlet lmdbPageQueryResultsCache: GatsbyCacheLmdb\nfunction getLMDBPageQueryResultsCache(): GatsbyCacheLmdb {\n if (!lmdbPageQueryResultsCache) {\n const GatsbyCacheLmdbImpl = require(`./cache-lmdb`).default\n lmdbPageQueryResultsCache = new GatsbyCacheLmdbImpl({\n name: `internal-tmp-query-results`,\n encoding: `string`,\n }).init()\n }\n return lmdbPageQueryResultsCache\n}\n\nlet savePageQueryResultsPromise = Promise.resolve()\n\nexport function waitUntilPageQueryResultsAreStored(): Promise<void> {\n return savePageQueryResultsPromise\n}\n\nexport async function savePageQueryResult(\n programDir: string,\n pagePath: string,\n stringifiedResult: string\n): Promise<void> {\n if (isLmdbStore()) {\n savePageQueryResultsPromise = getLMDBPageQueryResultsCache().set(\n pagePath,\n stringifiedResult\n ) as Promise<void>\n } else {\n const pageQueryResultsPath = path.join(\n programDir,\n `.cache`,\n `json`,\n `${pagePath.replace(/\\//g, `_`)}.json`\n )\n await fs.outputFile(pageQueryResultsPath, stringifiedResult)\n }\n}\n\nexport async function readPageQueryResult(\n publicDir: string,\n pagePath: string\n): Promise<any> {\n if (isLmdbStore()) {\n const stringifiedResult = await getLMDBPageQueryResultsCache().get(pagePath)\n if (typeof stringifiedResult === `string`) {\n return JSON.parse(stringifiedResult)\n }\n throw new Error(`Couldn't find temp query result for \"${pagePath}\".`)\n } else {\n const pageQueryResultsPath = path.join(\n publicDir,\n `..`,\n `.cache`,\n `json`,\n `${pagePath.replace(/\\//g, `_`)}.json`\n )\n return fs.readJSON(pageQueryResultsPath)\n }\n}\n\nexport async function writePageData(\n publicDir: string,\n {\n componentChunkName,\n matchPath,\n path: pagePath,\n staticQueryHashes,\n }: IPageData\n): Promise<IPageDataWithQueryResult> {\n const result = await readPageQueryResult(publicDir, pagePath)\n\n const outputFilePath = getFilePath(publicDir, pagePath)\n const body = {\n componentChunkName,\n path: pagePath,\n matchPath,\n result,\n staticQueryHashes,\n }\n\n const bodyStr = JSON.stringify(body)\n // transform asset size to kB (from bytes) to fit 64 bit to numbers\n const pageDataSize = Buffer.byteLength(bodyStr) / 1000\n\n store.dispatch({\n type: `ADD_PAGE_DATA_STATS`,\n payload: {\n pagePath,\n filePath: outputFilePath,\n size: pageDataSize,\n pageDataHash: createContentDigest(bodyStr),\n },\n })\n\n await fs.outputFile(outputFilePath, bodyStr)\n return body\n}\n\nlet isFlushPending = false\nlet isFlushing = false\n\nexport function isFlushEnqueued(): boolean {\n return isFlushPending\n}\n\nexport async function flush(): Promise<void> {\n if (isFlushing) {\n // We're already in the middle of a flush\n return\n }\n isFlushPending = false\n isFlushing = true\n const {\n pendingPageDataWrites,\n pages,\n program,\n staticQueriesByTemplate,\n queries,\n } = store.getState()\n\n const { pagePaths } = pendingPageDataWrites\n\n const writePageDataActivity = reporter.createProgress(\n `Writing page-data.json files to public directory`,\n pagePaths.size,\n 0\n )\n writePageDataActivity.start()\n\n const flushQueue = fastq(async (pagePath, cb) => {\n const page = pages.get(pagePath)\n\n // It's a gloomy day in Bombay, let me tell you a short story...\n // Once upon a time, writing page-data.json files were atomic\n // After this change (#24808), they are not and this means that\n // between adding a pending write for a page and actually flushing\n // them, a page might not exist anymore щ(゚Д゚щ)\n // This is why we need this check\n if (page) {\n if (\n program?._?.[0] === `develop` &&\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND\n ) {\n // check if already did run query for this page\n // with query-on-demand we might have pending page-data write due to\n // changes in static queries assigned to page template, but we might not\n // have query result for it\n const query = queries.trackedQueries.get(page.path)\n if (!query) {\n // this should not happen ever\n throw new Error(\n `We have a page, but we don't have registered query for it (???)`\n )\n }\n\n if (hasFlag(query.dirty, FLAG_DIRTY_NEW_PAGE)) {\n // query results are not written yet\n return cb(null, true)\n }\n }\n\n const staticQueryHashes =\n staticQueriesByTemplate.get(page.componentPath) || []\n\n const result = await writePageData(\n path.join(program.directory, `public`),\n {\n ...page,\n staticQueryHashes,\n }\n )\n\n writePageDataActivity.tick()\n\n if (program?._?.[0] === `develop`) {\n websocketManager.emitPageData({\n id: pagePath,\n result,\n })\n }\n }\n\n store.dispatch({\n type: `CLEAR_PENDING_PAGE_DATA_WRITE`,\n payload: {\n page: pagePath,\n },\n })\n\n return cb(null, true)\n }, 25)\n\n for (const pagePath of pagePaths) {\n flushQueue.push(pagePath, () => {})\n }\n\n if (!flushQueue.idle()) {\n await new Promise(resolve => {\n flushQueue.drain = resolve as () => unknown\n })\n }\n\n writePageDataActivity.end()\n isFlushing = false\n\n return\n}\n\nexport function enqueueFlush(): void {\n if (isWebpackStatusPending()) {\n isFlushPending = true\n } else {\n flush()\n }\n}\n\nexport async function handleStalePageData(): Promise<void> {\n if (!(await fs.pathExists(`public/page-data`))) {\n return\n }\n\n // public directory might have stale page-data files from previous builds\n // we get the list of those and compare against expected page-data files\n // and remove ones that shouldn't be there anymore\n\n const activity = reporter.activityTimer(`Cleaning up stale page-data`)\n activity.start()\n\n const pageDataFilesFromPreviousBuilds = await new Promise<Set<string>>(\n (resolve, reject) => {\n const results = new Set<string>()\n\n const stream = fsWalkStream(`public/page-data`)\n\n stream.on(`data`, (data: Entry) => {\n if (data.name === `page-data.json`) {\n results.add(data.path)\n }\n })\n\n stream.on(`error`, e => {\n reject(e)\n })\n\n stream.on(`end`, () => resolve(results))\n }\n )\n\n const expectedPageDataFiles = new Set<string>()\n store.getState().pages.forEach(page => {\n expectedPageDataFiles.add(getFilePath(`public`, page.path))\n })\n\n const deletionPromises: Array<Promise<void>> = []\n pageDataFilesFromPreviousBuilds.forEach(pageDataFilePath => {\n if (!expectedPageDataFiles.has(pageDataFilePath)) {\n deletionPromises.push(fs.remove(pageDataFilePath))\n }\n })\n\n await Promise.all(deletionPromises)\n\n activity.end()\n}\n"],"file":"page-data.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/page-data.ts"],"names":["fixedPagePath","pagePath","reverseFixedPagePath","pageDataRequestPath","getFilePath","publicDir","path","join","readPageData","filePath","rawPageData","fs","readFile","JSON","parse","removePageData","existsSync","remove","Promise","resolve","pageDataExists","lmdbPageQueryResultsCache","getLMDBPageQueryResultsCache","GatsbyCacheLmdbImpl","require","default","name","encoding","init","savePageQueryResultsPromise","waitUntilPageQueryResultsAreStored","savePageQueryResult","programDir","stringifiedResult","set","pageQueryResultsPath","replace","outputFile","readPageQueryResult","get","Error","writePageData","componentChunkName","matchPath","staticQueryHashes","result","outputFilePath","body","stringify","pageDataSize","Buffer","byteLength","store","dispatch","type","payload","size","pageDataHash","isFlushPending","isFlushing","isFlushEnqueued","flush","pendingPageDataWrites","pages","program","staticQueriesByTemplate","queries","getState","pagePaths","writePageDataActivity","reporter","createProgress","start","flushQueue","cb","page","_","process","env","GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND","query","trackedQueries","dirty","FLAG_DIRTY_NEW_PAGE","componentPath","directory","tick","websocketManager","emitPageData","id","push","idle","drain","end","enqueueFlush","handleStalePageData","pathExists","activity","activityTimer","pageDataFilesFromPreviousBuilds","reject","results","Set","stream","on","data","add","e","expectedPageDataFiles","forEach","deletionPromises","pageDataFilePath","has","all"],"mappings":"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","sourcesContent":["import { walkStream as fsWalkStream, Entry } from \"@nodelib/fs.walk\"\nimport fs from \"fs-extra\"\nimport reporter from \"gatsby-cli/lib/reporter\"\nimport fastq from \"fastq\"\nimport path from \"path\"\nimport { createContentDigest } from \"gatsby-core-utils\"\nimport { IGatsbyPage } from \"../redux/types\"\nimport { websocketManager } from \"./websocket-manager\"\nimport { isWebpackStatusPending } from \"./webpack-status\"\nimport { store } from \"../redux\"\nimport { hasFlag, FLAG_DIRTY_NEW_PAGE } from \"../redux/reducers/queries\"\nimport { isLmdbStore } from \"../datastore\"\nimport type GatsbyCacheLmdb from \"./cache-lmdb\"\n\nimport { IExecutionResult } from \"../query/types\"\n\ninterface IPageData {\n componentChunkName: IGatsbyPage[\"componentChunkName\"]\n matchPath?: IGatsbyPage[\"matchPath\"]\n path: IGatsbyPage[\"path\"]\n staticQueryHashes: Array<string>\n}\n\nexport interface IPageDataWithQueryResult extends IPageData {\n result: IExecutionResult\n}\n\nexport function fixedPagePath(pagePath: string): string {\n return pagePath === `/` ? `index` : pagePath\n}\n\nexport function reverseFixedPagePath(pageDataRequestPath: string): string {\n return pageDataRequestPath === `index` ? `/` : pageDataRequestPath\n}\n\nfunction getFilePath(publicDir: string, pagePath: string): string {\n return path.join(\n publicDir,\n `page-data`,\n fixedPagePath(pagePath),\n `page-data.json`\n )\n}\n\nexport async function readPageData(\n publicDir: string,\n pagePath: string\n): Promise<IPageDataWithQueryResult> {\n const filePath = getFilePath(publicDir, pagePath)\n const rawPageData = await fs.readFile(filePath, `utf-8`)\n\n return JSON.parse(rawPageData)\n}\n\nexport async function removePageData(\n publicDir: string,\n pagePath: string\n): Promise<void> {\n const filePath = getFilePath(publicDir, pagePath)\n\n if (fs.existsSync(filePath)) {\n return await fs.remove(filePath)\n }\n\n return Promise.resolve()\n}\n\nexport function pageDataExists(publicDir: string, pagePath: string): boolean {\n return fs.existsSync(getFilePath(publicDir, pagePath))\n}\n\nlet lmdbPageQueryResultsCache: GatsbyCacheLmdb\nfunction getLMDBPageQueryResultsCache(): GatsbyCacheLmdb {\n if (!lmdbPageQueryResultsCache) {\n const GatsbyCacheLmdbImpl = require(`./cache-lmdb`).default\n lmdbPageQueryResultsCache = new GatsbyCacheLmdbImpl({\n name: `internal-tmp-query-results`,\n encoding: `string`,\n }).init()\n }\n return lmdbPageQueryResultsCache\n}\n\nlet savePageQueryResultsPromise = Promise.resolve()\n\nexport function waitUntilPageQueryResultsAreStored(): Promise<void> {\n return savePageQueryResultsPromise\n}\n\nexport async function savePageQueryResult(\n programDir: string,\n pagePath: string,\n stringifiedResult: string\n): Promise<void> {\n if (isLmdbStore()) {\n savePageQueryResultsPromise = getLMDBPageQueryResultsCache().set(\n pagePath,\n stringifiedResult\n ) as Promise<void>\n } else {\n const pageQueryResultsPath = path.join(\n programDir,\n `.cache`,\n `json`,\n `${pagePath.replace(/\\//g, `_`)}.json`\n )\n await fs.outputFile(pageQueryResultsPath, stringifiedResult)\n }\n}\n\nexport async function readPageQueryResult(\n publicDir: string,\n pagePath: string\n): Promise<any> {\n if (isLmdbStore()) {\n const stringifiedResult = await getLMDBPageQueryResultsCache().get(pagePath)\n if (typeof stringifiedResult === `string`) {\n return stringifiedResult\n }\n throw new Error(`Couldn't find temp query result for \"${pagePath}\".`)\n } else {\n const pageQueryResultsPath = path.join(\n publicDir,\n `..`,\n `.cache`,\n `json`,\n `${pagePath.replace(/\\//g, `_`)}.json`\n )\n return fs.readFile(pageQueryResultsPath)\n }\n}\n\nexport async function writePageData(\n publicDir: string,\n {\n componentChunkName,\n matchPath,\n path: pagePath,\n staticQueryHashes,\n }: IPageData\n): Promise<string> {\n const result = await readPageQueryResult(publicDir, pagePath)\n\n const outputFilePath = getFilePath(publicDir, pagePath)\n let body = `{\n \"componentChunkName\": \"${componentChunkName}\",\n \"path\": \"${pagePath}\",\n \"result\": ${result},\n \"staticQueryHashes\": ${JSON.stringify(staticQueryHashes)}`\n\n if (matchPath) {\n body += `,\n \"matchPath\": \"${matchPath}\"`\n }\n\n body += `}`\n\n // transform asset size to kB (from bytes) to fit 64 bit to numbers\n const pageDataSize = Buffer.byteLength(body) / 1000\n\n store.dispatch({\n type: `ADD_PAGE_DATA_STATS`,\n payload: {\n pagePath,\n filePath: outputFilePath,\n size: pageDataSize,\n pageDataHash: createContentDigest(body),\n },\n })\n\n await fs.outputFile(outputFilePath, body)\n return body\n}\n\nlet isFlushPending = false\nlet isFlushing = false\n\nexport function isFlushEnqueued(): boolean {\n return isFlushPending\n}\n\nexport async function flush(): Promise<void> {\n if (isFlushing) {\n // We're already in the middle of a flush\n return\n }\n await waitUntilPageQueryResultsAreStored()\n isFlushPending = false\n isFlushing = true\n const {\n pendingPageDataWrites,\n pages,\n program,\n staticQueriesByTemplate,\n queries,\n } = store.getState()\n\n const { pagePaths } = pendingPageDataWrites\n\n const writePageDataActivity = reporter.createProgress(\n `Writing page-data.json files to public directory`,\n pagePaths.size,\n 0\n )\n writePageDataActivity.start()\n\n const flushQueue = fastq(async (pagePath, cb) => {\n const page = pages.get(pagePath)\n\n // It's a gloomy day in Bombay, let me tell you a short story...\n // Once upon a time, writing page-data.json files were atomic\n // After this change (#24808), they are not and this means that\n // between adding a pending write for a page and actually flushing\n // them, a page might not exist anymore щ(゚Д゚щ)\n // This is why we need this check\n if (page) {\n if (\n program?._?.[0] === `develop` &&\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND\n ) {\n // check if already did run query for this page\n // with query-on-demand we might have pending page-data write due to\n // changes in static queries assigned to page template, but we might not\n // have query result for it\n const query = queries.trackedQueries.get(page.path)\n if (!query) {\n // this should not happen ever\n throw new Error(\n `We have a page, but we don't have registered query for it (???)`\n )\n }\n\n if (hasFlag(query.dirty, FLAG_DIRTY_NEW_PAGE)) {\n // query results are not written yet\n return cb(null, true)\n }\n }\n\n const staticQueryHashes =\n staticQueriesByTemplate.get(page.componentPath) || []\n\n const result = await writePageData(\n path.join(program.directory, `public`),\n {\n ...page,\n staticQueryHashes,\n }\n )\n\n writePageDataActivity.tick()\n\n if (program?._?.[0] === `develop`) {\n websocketManager.emitPageData({\n id: pagePath,\n result: JSON.parse(result) as IPageDataWithQueryResult,\n })\n }\n }\n\n store.dispatch({\n type: `CLEAR_PENDING_PAGE_DATA_WRITE`,\n payload: {\n page: pagePath,\n },\n })\n\n return cb(null, true)\n }, 25)\n\n for (const pagePath of pagePaths) {\n flushQueue.push(pagePath, () => {})\n }\n\n if (!flushQueue.idle()) {\n await new Promise(resolve => {\n flushQueue.drain = resolve as () => unknown\n })\n }\n\n writePageDataActivity.end()\n isFlushing = false\n\n return\n}\n\nexport function enqueueFlush(): void {\n if (isWebpackStatusPending()) {\n isFlushPending = true\n } else {\n flush()\n }\n}\n\nexport async function handleStalePageData(): Promise<void> {\n if (!(await fs.pathExists(`public/page-data`))) {\n return\n }\n\n // public directory might have stale page-data files from previous builds\n // we get the list of those and compare against expected page-data files\n // and remove ones that shouldn't be there anymore\n\n const activity = reporter.activityTimer(`Cleaning up stale page-data`)\n activity.start()\n\n const pageDataFilesFromPreviousBuilds = await new Promise<Set<string>>(\n (resolve, reject) => {\n const results = new Set<string>()\n\n const stream = fsWalkStream(`public/page-data`)\n\n stream.on(`data`, (data: Entry) => {\n if (data.name === `page-data.json`) {\n results.add(data.path)\n }\n })\n\n stream.on(`error`, e => {\n reject(e)\n })\n\n stream.on(`end`, () => resolve(results))\n }\n )\n\n const expectedPageDataFiles = new Set<string>()\n store.getState().pages.forEach(page => {\n expectedPageDataFiles.add(getFilePath(`public`, page.path))\n })\n\n const deletionPromises: Array<Promise<void>> = []\n pageDataFilesFromPreviousBuilds.forEach(pageDataFilePath => {\n if (!expectedPageDataFiles.has(pageDataFilePath)) {\n deletionPromises.push(fs.remove(pageDataFilePath))\n }\n })\n\n await Promise.all(deletionPromises)\n\n activity.end()\n}\n"],"file":"page-data.js"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IGroupedQueryIds } from "../../../services";
|
|
2
2
|
import { IAddPendingPageDataWriteAction, ICreatePageDependencyAction, IPageQueryRunAction, IQueryStartAction } from "../../../redux/types";
|
|
3
3
|
export declare function setComponents(): void;
|
|
4
|
-
export declare function saveQueriesDependencies(): void
|
|
4
|
+
export declare function saveQueriesDependencies(): Promise<void>;
|
|
5
5
|
declare type ActionsToReplay = Array<IQueryStartAction | IPageQueryRunAction | IAddPendingPageDataWriteAction | ICreatePageDependencyAction>;
|
|
6
6
|
export declare function runQueries(queryIds: IGroupedQueryIds): Promise<ActionsToReplay>;
|
|
7
7
|
export {};
|
|
@@ -17,11 +17,13 @@ var _state = require("./state");
|
|
|
17
17
|
|
|
18
18
|
var _schema = require("./schema");
|
|
19
19
|
|
|
20
|
+
var _pageData = require("../../page-data");
|
|
21
|
+
|
|
20
22
|
function setComponents() {
|
|
21
23
|
(0, _state.setState)([`components`, `staticQueryComponents`]);
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
function saveQueriesDependencies() {
|
|
26
|
+
async function saveQueriesDependencies() {
|
|
25
27
|
// Drop `queryNodes` from query state - it can be restored from other pieces of state
|
|
26
28
|
// and is there only as a perf optimization
|
|
27
29
|
const pickNecessaryQueryState = state => {
|
|
@@ -35,7 +37,9 @@ function saveQueriesDependencies() {
|
|
|
35
37
|
};
|
|
36
38
|
};
|
|
37
39
|
|
|
38
|
-
(0, _redux.savePartialStateToDisk)([`queries`], process.env.GATSBY_WORKER_ID, pickNecessaryQueryState);
|
|
40
|
+
(0, _redux.savePartialStateToDisk)([`queries`], process.env.GATSBY_WORKER_ID, pickNecessaryQueryState); // make sure page query results we put in lmdb-store are flushed
|
|
41
|
+
|
|
42
|
+
await (0, _pageData.waitUntilPageQueryResultsAreStored)();
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
let gqlRunner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/utils/worker/child/queries.ts"],"names":["setComponents","saveQueriesDependencies","pickNecessaryQueryState","state","queries","queryNodes","Map","process","env","GATSBY_WORKER_ID","gqlRunner","getGraphqlRunner","GraphQLRunner","store","collectStats","graphqlTracing","getState","program","runQueries","queryIds","actionsToReplay","unsubscribe","subscribe","action","lastAction","type","push","doRunQueries","workerStore","schemaCustomization","composer","graphqlRunner","ready"],"mappings":";;;;;;;AAAA;;AAKA;;AACA;;AACA;;AACA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["../../../../src/utils/worker/child/queries.ts"],"names":["setComponents","saveQueriesDependencies","pickNecessaryQueryState","state","queries","queryNodes","Map","process","env","GATSBY_WORKER_ID","gqlRunner","getGraphqlRunner","GraphQLRunner","store","collectStats","graphqlTracing","getState","program","runQueries","queryIds","actionsToReplay","unsubscribe","subscribe","action","lastAction","type","push","doRunQueries","workerStore","schemaCustomization","composer","graphqlRunner","ready"],"mappings":";;;;;;;AAAA;;AAKA;;AACA;;AACA;;AACA;;AACA;;AASA;;AAEO,SAASA,aAAT,GAA+B;AACpC,uBAAS,CAAE,YAAF,EAAgB,uBAAhB,CAAT;AACD;;AAEM,eAAeC,uBAAf,GAAwD;AAC7D;AACA;AACA,QAAMC,uBAAuB,GAC3BC,KAD8B,IAExB;AAAA;;AACN,QAAI,EAACA,KAAD,aAACA,KAAD,iCAACA,KAAK,CAAEC,OAAR,2CAAC,eAAgBC,UAAjB,CAAJ,EAAiC,OAAOF,KAAP;AACjC,WAAO,EAAE,GAAGA,KAAL;AAAYC,MAAAA,OAAO,EAAE,EAAE,GAAGD,KAAK,CAACC,OAAX;AAAoBC,QAAAA,UAAU,EAAE,IAAIC,GAAJ;AAAhC;AAArB,KAAP;AACD,GALD;;AAMA,qCACE,CAAE,SAAF,CADF,EAEEC,OAAO,CAACC,GAAR,CAAYC,gBAFd,EAGEP,uBAHF,EAT6D,CAe7D;;AACA,QAAM,mDAAN;AACD;;AAED,IAAIQ,SAAJ;;AAEA,SAASC,gBAAT,GAA2C;AACzC,MAAI,CAACD,SAAL,EAAgB;AACdA,IAAAA,SAAS,GAAG,IAAIE,4BAAJ,CAAkBC,YAAlB,EAAyB;AACnCC,MAAAA,YAAY,EAAE,IADqB;AAEnCC,MAAAA,cAAc,EAAEF,aAAMG,QAAN,GAAiBC,OAAjB,CAAyBF;AAFN,KAAzB,CAAZ;AAID;;AACD,SAAOL,SAAP;AACD;;AASM,eAAeQ,UAAf,CACLC,QADK,EAEqB;AAC1B,QAAMC,eAAgC,GAAG,EAAzC;;AAEA,QAAMC,WAAW,GAAGR,aAAMS,SAAN,CAAgB,MAAM;AACxC,UAAMC,MAAM,GAAGV,aAAMG,QAAN,GAAiBQ,UAAhC;;AACA,QACED,MAAM,CAACE,IAAP,KAAiB,aAAjB,IACAF,MAAM,CAACE,IAAP,KAAiB,gBADjB,IAEAF,MAAM,CAACE,IAAP,KAAiB,6BAHnB,CAIE;AACA;AALF,MAME;AACAL,MAAAA,eAAe,CAACM,IAAhB,CAAqBH,MAArB;AACD;AACF,GAXmB,CAApB;;AAaA,MAAI;AACF,UAAMI,YAAY,CAACR,QAAD,CAAlB;AACA,WAAOC,eAAP;AACD,GAHD,SAGU;AACRC,IAAAA,WAAW;AACZ;AACF;;AAED,eAAeM,YAAf,CAA4BR,QAA5B,EAAuE;AACrE,QAAMS,WAAW,GAAGf,aAAMG,QAAN,EAApB,CADqE,CAGrE;;;AACA,MAAIY,WAAW,CAACC,mBAAZ,CAAgCC,QAAhC,KAA6C,IAAjD,EAAuD;AACrD,UAAM,0BAAN;AACD;;AAED,QAAMC,aAAa,GAAGpB,gBAAgB,EAAtC;AAEA,QAAM,gCAAiB;AACrBQ,IAAAA,QADqB;AAErBN,IAAAA,KAAK,EAALA,YAFqB;AAGrBkB,IAAAA;AAHqB,GAAjB,CAAN;AAMA,QAAM,8BAAe;AACnBZ,IAAAA,QADmB;AAEnBN,IAAAA,KAAK,EAALA,YAFmB;AAGnBkB,IAAAA;AAHmB,GAAf,CAAN;AAMA,QAAM,+BAAeC,KAAf,EAAN;AACD","sourcesContent":["import {\n IGroupedQueryIds,\n runPageQueries,\n runStaticQueries,\n} from \"../../../services\"\nimport { savePartialStateToDisk, store } from \"../../../redux\"\nimport { GraphQLRunner } from \"../../../query/graphql-runner\"\nimport { getDataStore } from \"../../../datastore\"\nimport { setState } from \"./state\"\nimport { buildSchema } from \"./schema\"\nimport {\n IAddPendingPageDataWriteAction,\n ICreatePageDependencyAction,\n IGatsbyState,\n IPageQueryRunAction,\n IQueryStartAction,\n} from \"../../../redux/types\"\nimport { DeepPartial } from \"redux\"\nimport { waitUntilPageQueryResultsAreStored } from \"../../page-data\"\n\nexport function setComponents(): void {\n setState([`components`, `staticQueryComponents`])\n}\n\nexport async function saveQueriesDependencies(): Promise<void> {\n // Drop `queryNodes` from query state - it can be restored from other pieces of state\n // and is there only as a perf optimization\n const pickNecessaryQueryState = <T extends DeepPartial<IGatsbyState>>(\n state: T\n ): T => {\n if (!state?.queries?.queryNodes) return state\n return { ...state, queries: { ...state.queries, queryNodes: new Map() } }\n }\n savePartialStateToDisk(\n [`queries`],\n process.env.GATSBY_WORKER_ID,\n pickNecessaryQueryState\n )\n\n // make sure page query results we put in lmdb-store are flushed\n await waitUntilPageQueryResultsAreStored()\n}\n\nlet gqlRunner\n\nfunction getGraphqlRunner(): GraphQLRunner {\n if (!gqlRunner) {\n gqlRunner = new GraphQLRunner(store, {\n collectStats: true,\n graphqlTracing: store.getState().program.graphqlTracing,\n })\n }\n return gqlRunner\n}\n\ntype ActionsToReplay = Array<\n | IQueryStartAction\n | IPageQueryRunAction\n | IAddPendingPageDataWriteAction\n | ICreatePageDependencyAction\n>\n\nexport async function runQueries(\n queryIds: IGroupedQueryIds\n): Promise<ActionsToReplay> {\n const actionsToReplay: ActionsToReplay = []\n\n const unsubscribe = store.subscribe(() => {\n const action = store.getState().lastAction\n if (\n action.type === `QUERY_START` ||\n action.type === `PAGE_QUERY_RUN` ||\n action.type === `ADD_PENDING_PAGE_DATA_WRITE`\n // Note: Instead of saving/replaying `CREATE_COMPONENT_DEPENDENCY` action\n // we do state merging once at the end of the query running (replaying this action is expensive)\n ) {\n actionsToReplay.push(action)\n }\n })\n\n try {\n await doRunQueries(queryIds)\n return actionsToReplay\n } finally {\n unsubscribe()\n }\n}\n\nasync function doRunQueries(queryIds: IGroupedQueryIds): Promise<void> {\n const workerStore = store.getState()\n\n // If buildSchema() didn't run yet, execute it\n if (workerStore.schemaCustomization.composer === null) {\n await buildSchema()\n }\n\n const graphqlRunner = getGraphqlRunner()\n\n await runStaticQueries({\n queryIds,\n store,\n graphqlRunner,\n })\n\n await runPageQueries({\n queryIds,\n store,\n graphqlRunner,\n })\n\n await getDataStore().ready()\n}\n"],"file":"queries.js"}
|