gatsby 3.14.0-drupal-next.73 → 3.14.0-drupal-next.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/internal-plugins/prod-404-500/gatsby-node.js +51 -0
- package/dist/internal-plugins/prod-404-500/gatsby-node.js.map +1 -0
- package/dist/internal-plugins/prod-404-500/index.js +3 -0
- package/dist/internal-plugins/prod-404-500/index.js.map +1 -0
- package/dist/query/graphql-errors-codeframe.js +23 -0
- package/dist/query/graphql-errors-codeframe.js.map +1 -0
- package/dist/redux/reducers/queries.js +4 -0
- package/dist/redux/reducers/queries.js.map +1 -1
- package/dist/utils/clear-require-cache.js +32 -0
- package/dist/utils/clear-require-cache.js.map +1 -0
- package/dist/utils/engine-context.js +25 -0
- package/dist/utils/engine-context.js.map +1 -0
- package/dist/utils/normalize-path.js +15 -0
- package/dist/utils/normalize-path.js.map +1 -0
- package/dist/utils/page-mode.js +146 -0
- package/dist/utils/page-mode.js.map +1 -0
- package/dist/utils/report-once.js +25 -0
- package/dist/utils/report-once.js.map +1 -0
- package/dist/utils/validate-engines/child.js +87 -0
- package/dist/utils/validate-engines/child.js.map +1 -0
- package/dist/utils/validate-engines/index.js +25 -0
- package/dist/utils/validate-engines/index.js.map +1 -0
- package/dist/utils/webpack/bundle.js +47 -0
- package/dist/utils/webpack/bundle.js.map +1 -0
- package/dist/utils/webpack/plugins/cache-folder-resolver.js +48 -0
- package/dist/utils/webpack/plugins/cache-folder-resolver.js.map +1 -0
- package/dist/utils/webpack/plugins/corejs-resolver.js +74 -0
- package/dist/utils/webpack/plugins/corejs-resolver.js.map +1 -0
- package/dist/utils/webpack/plugins/force-css-hmr-for-edge-cases.js +103 -0
- package/dist/utils/webpack/plugins/force-css-hmr-for-edge-cases.js.map +1 -0
- package/dist/utils/webpack/plugins/static-query-mapper.js +218 -0
- package/dist/utils/webpack/plugins/static-query-mapper.js.map +1 -0
- package/dist/utils/webpack/plugins/webpack-logging.js +61 -0
- package/dist/utils/webpack/plugins/webpack-logging.js.map +1 -0
- package/dist/utils/worker/child/queries.js +5 -1
- package/dist/utils/worker/child/queries.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
emitter,
|
|
5
|
+
store
|
|
6
|
+
} = require(`../../redux`);
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
actions
|
|
10
|
+
} = require(`../../redux/actions`);
|
|
11
|
+
|
|
12
|
+
const originalStatusPageByStatus = {};
|
|
13
|
+
const originalStatusPageByPath = {};
|
|
14
|
+
emitter.on(`CREATE_PAGE`, action => {
|
|
15
|
+
// Copy /404/ to /404.html and /500/ to /500.html. Many static site hosts expect
|
|
16
|
+
// site 404 pages to be named this. In addition, with Rendering Engines there might
|
|
17
|
+
// be runtime errors which would fallback to "/500.html" page.
|
|
18
|
+
// https://www.gatsbyjs.org/docs/how-to/adding-common-features/add-404-page/
|
|
19
|
+
const result = /^\/?(404|500)\/?$/.exec(action.payload.path);
|
|
20
|
+
|
|
21
|
+
if (result && result.length > 1) {
|
|
22
|
+
const status = result[1];
|
|
23
|
+
const originalPage = originalStatusPageByStatus[status];
|
|
24
|
+
|
|
25
|
+
if (!originalPage) {
|
|
26
|
+
const storedPage = {
|
|
27
|
+
path: action.payload.path,
|
|
28
|
+
component: action.payload.component,
|
|
29
|
+
context: action.payload.context,
|
|
30
|
+
status
|
|
31
|
+
};
|
|
32
|
+
originalStatusPageByStatus[status] = storedPage;
|
|
33
|
+
originalStatusPageByPath[action.payload.path] = storedPage;
|
|
34
|
+
store.dispatch(actions.createPage({ ...storedPage,
|
|
35
|
+
path: `/${status}.html`
|
|
36
|
+
}, action.plugin, action));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
emitter.on(`DELETE_PAGE`, action => {
|
|
41
|
+
const storedPage = originalStatusPageByPath[action.payload.path];
|
|
42
|
+
|
|
43
|
+
if (storedPage) {
|
|
44
|
+
store.dispatch(actions.deletePage({ ...storedPage,
|
|
45
|
+
path: `/${storedPage.status}.html`
|
|
46
|
+
}));
|
|
47
|
+
originalStatusPageByPath[action.payload.path] = null;
|
|
48
|
+
originalStatusPageByStatus[storedPage.status] = null;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=gatsby-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/internal-plugins/prod-404-500/gatsby-node.js"],"names":["emitter","store","require","actions","originalStatusPageByStatus","originalStatusPageByPath","on","action","result","exec","payload","path","length","status","originalPage","storedPage","component","context","dispatch","createPage","plugin","deletePage"],"mappings":";;AAAA,MAAM;AAAEA,EAAAA,OAAF;AAAWC,EAAAA;AAAX,IAAqBC,OAAO,CAAE,aAAF,CAAlC;;AACA,MAAM;AAAEC,EAAAA;AAAF,IAAcD,OAAO,CAAE,qBAAF,CAA3B;;AAEA,MAAME,0BAA0B,GAAG,EAAnC;AACA,MAAMC,wBAAwB,GAAG,EAAjC;AAEAL,OAAO,CAACM,EAAR,CAAY,aAAZ,EAA0BC,MAAM,IAAI;AAClC;AACA;AACA;AACA;AACA,QAAMC,MAAM,GAAG,oBAAoBC,IAApB,CAAyBF,MAAM,CAACG,OAAP,CAAeC,IAAxC,CAAf;;AACA,MAAIH,MAAM,IAAIA,MAAM,CAACI,MAAP,GAAgB,CAA9B,EAAiC;AAC/B,UAAMC,MAAM,GAAGL,MAAM,CAAC,CAAD,CAArB;AAEA,UAAMM,YAAY,GAAGV,0BAA0B,CAACS,MAAD,CAA/C;;AAEA,QAAI,CAACC,YAAL,EAAmB;AACjB,YAAMC,UAAU,GAAG;AACjBJ,QAAAA,IAAI,EAAEJ,MAAM,CAACG,OAAP,CAAeC,IADJ;AAEjBK,QAAAA,SAAS,EAAET,MAAM,CAACG,OAAP,CAAeM,SAFT;AAGjBC,QAAAA,OAAO,EAAEV,MAAM,CAACG,OAAP,CAAeO,OAHP;AAIjBJ,QAAAA;AAJiB,OAAnB;AAOAT,MAAAA,0BAA0B,CAACS,MAAD,CAA1B,GAAqCE,UAArC;AACAV,MAAAA,wBAAwB,CAACE,MAAM,CAACG,OAAP,CAAeC,IAAhB,CAAxB,GAAgDI,UAAhD;AAEAd,MAAAA,KAAK,CAACiB,QAAN,CACEf,OAAO,CAACgB,UAAR,CACE,EACE,GAAGJ,UADL;AAEEJ,QAAAA,IAAI,EAAG,IAAGE,MAAO;AAFnB,OADF,EAKEN,MAAM,CAACa,MALT,EAMEb,MANF,CADF;AAUD;AACF;AACF,CAlCD;AAoCAP,OAAO,CAACM,EAAR,CAAY,aAAZ,EAA0BC,MAAM,IAAI;AAClC,QAAMQ,UAAU,GAAGV,wBAAwB,CAACE,MAAM,CAACG,OAAP,CAAeC,IAAhB,CAA3C;;AACA,MAAII,UAAJ,EAAgB;AACdd,IAAAA,KAAK,CAACiB,QAAN,CACEf,OAAO,CAACkB,UAAR,CAAmB,EACjB,GAAGN,UADc;AAEjBJ,MAAAA,IAAI,EAAG,IAAGI,UAAU,CAACF,MAAO;AAFX,KAAnB,CADF;AAMAR,IAAAA,wBAAwB,CAACE,MAAM,CAACG,OAAP,CAAeC,IAAhB,CAAxB,GAAgD,IAAhD;AACAP,IAAAA,0BAA0B,CAACW,UAAU,CAACF,MAAZ,CAA1B,GAAgD,IAAhD;AACD;AACF,CAZD","sourcesContent":["const { emitter, store } = require(`../../redux`)\nconst { actions } = require(`../../redux/actions`)\n\nconst originalStatusPageByStatus = {}\nconst originalStatusPageByPath = {}\n\nemitter.on(`CREATE_PAGE`, action => {\n // Copy /404/ to /404.html and /500/ to /500.html. Many static site hosts expect\n // site 404 pages to be named this. In addition, with Rendering Engines there might\n // be runtime errors which would fallback to \"/500.html\" page.\n // https://www.gatsbyjs.org/docs/how-to/adding-common-features/add-404-page/\n const result = /^\\/?(404|500)\\/?$/.exec(action.payload.path)\n if (result && result.length > 1) {\n const status = result[1]\n\n const originalPage = originalStatusPageByStatus[status]\n\n if (!originalPage) {\n const storedPage = {\n path: action.payload.path,\n component: action.payload.component,\n context: action.payload.context,\n status,\n }\n\n originalStatusPageByStatus[status] = storedPage\n originalStatusPageByPath[action.payload.path] = storedPage\n\n store.dispatch(\n actions.createPage(\n {\n ...storedPage,\n path: `/${status}.html`,\n },\n action.plugin,\n action\n )\n )\n }\n }\n})\n\nemitter.on(`DELETE_PAGE`, action => {\n const storedPage = originalStatusPageByPath[action.payload.path]\n if (storedPage) {\n store.dispatch(\n actions.deletePage({\n ...storedPage,\n path: `/${storedPage.status}.html`,\n })\n )\n originalStatusPageByPath[action.payload.path] = null\n originalStatusPageByStatus[storedPage.status] = null\n }\n})\n"],"file":"gatsby-node.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/internal-plugins/prod-404-500/index.js"],"names":[],"mappings":"AAAA","sourcesContent":["// noop\n"],"file":"index.js"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.getCodeFrame = getCodeFrame;
|
|
5
|
+
|
|
6
|
+
var _codeFrame = require("@babel/code-frame");
|
|
7
|
+
|
|
8
|
+
function getCodeFrame(query, line, column) {
|
|
9
|
+
if (!line) {
|
|
10
|
+
return query;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return (0, _codeFrame.codeFrameColumns)(query, {
|
|
14
|
+
start: {
|
|
15
|
+
line,
|
|
16
|
+
column
|
|
17
|
+
}
|
|
18
|
+
}, {
|
|
19
|
+
linesAbove: 10,
|
|
20
|
+
linesBelow: 10
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=graphql-errors-codeframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/query/graphql-errors-codeframe.ts"],"names":["getCodeFrame","query","line","column","start","linesAbove","linesBelow"],"mappings":";;;;;AAAA;;AAEO,SAASA,YAAT,CACLC,KADK,EAELC,IAFK,EAGLC,MAHK,EAIG;AACR,MAAI,CAACD,IAAL,EAAW;AACT,WAAOD,KAAP;AACD;;AAED,SAAO,iCACLA,KADK,EAEL;AACEG,IAAAA,KAAK,EAAE;AACLF,MAAAA,IADK;AAELC,MAAAA;AAFK;AADT,GAFK,EAQL;AACEE,IAAAA,UAAU,EAAE,EADd;AAEEC,IAAAA,UAAU,EAAE;AAFd,GARK,CAAP;AAaD","sourcesContent":["import { codeFrameColumns } from \"@babel/code-frame\"\n\nexport function getCodeFrame(\n query: string,\n line?: number,\n column?: number\n): string {\n if (!line) {\n return query\n }\n\n return codeFrameColumns(\n query,\n {\n start: {\n line,\n column,\n },\n },\n {\n linesAbove: 10,\n linesBelow: 10,\n }\n )\n}\n"],"file":"graphql-errors-codeframe.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/redux/reducers/queries.ts"],"names":["FLAG_DIRTY_NEW_PAGE","FLAG_DIRTY_TEXT","FLAG_DIRTY_DATA","FLAG_DIRTY_PAGE_CONTEXT","FLAG_ERROR_EXTRACTION","FLAG_RUNNING_INFLIGHT","initialState","byNode","Map","byConnection","queryNodes","trackedQueries","trackedComponents","deletedQueries","Set","dirtyQueriesListToEmitViaWebsocket","initialQueryState","dirty","running","initialComponentState","componentPath","query","pages","errors","queriesReducer","state","action","type","path","payload","get","contextModified","registerQuery","setFlag","trackDirtyQuery","registerComponent","add","delete","apiName","queryId","component","values","clearNodeDependencies","clearConnectionDependencies","clear","console","log","hasFlag","set","id","forEach","nodeId","connection","addNodeDependency","addConnectionDependency","node","queriesByNode","queriesByConnection","internal","assertCorrectWorkerState","mergeWorkerDataDependencies","allFlags","flag","nodeQueries","queryIds","queryNodeIds","process","env","GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND","push","workerStateChunk","queryState","queryStateChunk","keys","queries","connectionName","workerId","size","Error"],"mappings":"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","sourcesContent":["import {\n ActionsUnion,\n IComponentState,\n IGatsbyState,\n IQueryState,\n} from \"../types\"\n\ntype QueryId = string // page query path or static query id\ntype ComponentPath = string\ntype NodeId = string\ntype ConnectionName = string\n\nexport const FLAG_DIRTY_NEW_PAGE = 0b0001\nexport const FLAG_DIRTY_TEXT = 0b0010\nexport const FLAG_DIRTY_DATA = 0b0100\nexport const FLAG_DIRTY_PAGE_CONTEXT = 0b1000\n\nexport const FLAG_ERROR_EXTRACTION = 0b0001\n\nexport const FLAG_RUNNING_INFLIGHT = 0b0001\n\nconst initialState = (): IGatsbyState[\"queries\"] => {\n return {\n byNode: new Map<NodeId, Set<QueryId>>(),\n byConnection: new Map<ConnectionName, Set<QueryId>>(),\n queryNodes: new Map<QueryId, Set<NodeId>>(),\n trackedQueries: new Map<QueryId, IQueryState>(),\n trackedComponents: new Map<ComponentPath, IComponentState>(),\n deletedQueries: new Set<QueryId>(),\n dirtyQueriesListToEmitViaWebsocket: [],\n }\n}\n\nconst initialQueryState = (): IQueryState => {\n return {\n dirty: -1, // unknown, must be set right after init\n running: 0,\n }\n}\n\nconst initialComponentState = (): IComponentState => {\n return {\n componentPath: ``,\n query: ``,\n pages: new Set<QueryId>(),\n errors: 0,\n // TODO: staticQueries: new Set<QueryId>()\n }\n}\n\n/**\n * Tracks query dirtiness. Dirty queries are queries that:\n *\n * - depend on nodes or node collections (via `actions.createPageDependency`) that have changed.\n * - have been recently extracted (or their query text has changed)\n * - belong to newly created pages (or pages with modified context)\n *\n * Dirty queries must be re-ran.\n */\nexport function queriesReducer(\n state: IGatsbyState[\"queries\"] = initialState(),\n action: ActionsUnion\n): IGatsbyState[\"queries\"] {\n switch (action.type) {\n case `DELETE_CACHE`:\n return initialState()\n\n case `CREATE_PAGE`: {\n const { path, componentPath } = action.payload\n let query = state.trackedQueries.get(path)\n if (!query || action.contextModified) {\n query = registerQuery(state, path)\n query.dirty = setFlag(\n query.dirty,\n action.contextModified ? FLAG_DIRTY_PAGE_CONTEXT : FLAG_DIRTY_NEW_PAGE\n )\n state = trackDirtyQuery(state, path)\n }\n registerComponent(state, componentPath).pages.add(path)\n state.deletedQueries.delete(path)\n return state\n }\n case `DELETE_PAGE`: {\n // Don't actually remove the page query from trackedQueries, just mark it as \"deleted\". Why?\n // We promote a technique of a consecutive deletePage/createPage calls in onCreatePage hook,\n // see https://www.gatsbyjs.com/docs/creating-and-modifying-pages/#pass-context-to-pages\n // If we remove a query and then re-add, it will be marked as dirty.\n // This is OK for cold cache but with warm cache we will re-run all of those queries (unnecessarily).\n // We will reconcile the state after createPages API call and actually delete those queries.\n state.deletedQueries.add(action.payload.path)\n return state\n }\n case `API_FINISHED`: {\n if (action.payload.apiName !== `createPages`) {\n return state\n }\n for (const queryId of state.deletedQueries) {\n for (const component of state.trackedComponents.values()) {\n component.pages.delete(queryId)\n }\n state = clearNodeDependencies(state, queryId)\n state = clearConnectionDependencies(state, queryId)\n state.trackedQueries.delete(queryId)\n }\n state.deletedQueries.clear()\n return state\n }\n case `QUERY_EXTRACTED`: {\n // Note: this action is called even in case of\n // extraction error or missing query (with query === ``)\n // TODO: use hash instead of a query text\n const { componentPath, query } = action.payload\n const component = registerComponent(state, componentPath)\n console.log(`reducers/queries`, component, action)\n if (component) {\n if (hasFlag(component.errors, FLAG_ERROR_EXTRACTION)) {\n return state\n }\n if (component.query !== query) {\n // Invalidate all pages associated with a component when query text changes\n for (const queryId of component.pages) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_TEXT)\n state = trackDirtyQuery(state, queryId)\n }\n }\n component.query = query\n }\n }\n return state\n }\n case `QUERY_EXTRACTION_GRAPHQL_ERROR`:\n case `QUERY_EXTRACTION_BABEL_ERROR`:\n case `QUERY_EXTRACTION_BABEL_SUCCESS`: {\n const { componentPath } = action.payload\n const component = registerComponent(state, componentPath)\n const set = action.type !== `QUERY_EXTRACTION_BABEL_SUCCESS`\n component.errors = setFlag(component.errors, FLAG_ERROR_EXTRACTION, set)\n return state\n }\n case `REPLACE_STATIC_QUERY`: {\n // Only called when static query text has changed, so no need to compare\n // TODO: unify the behavior?\n const query = registerQuery(state, action.payload.id)\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_TEXT)\n // static queries are not on demand, so skipping tracking which\n // queries were marked dirty recently\n // state = trackDirtyQuery(state, action.payload.id)\n state.deletedQueries.delete(action.payload.id)\n return state\n }\n case `REMOVE_STATIC_QUERY`: {\n state.deletedQueries.add(action.payload)\n return state\n }\n case `CREATE_COMPONENT_DEPENDENCY`: {\n action.payload.forEach(({ path: queryId, nodeId, connection }) => {\n if (nodeId) {\n state = addNodeDependency(state, queryId, nodeId)\n }\n if (connection) {\n state = addConnectionDependency(state, queryId, connection)\n }\n })\n\n return state\n }\n case `QUERY_START`: {\n // Reset data dependencies as they will be updated when running the query\n const { path } = action.payload\n state = clearNodeDependencies(state, path)\n state = clearConnectionDependencies(state, path)\n const query = state.trackedQueries.get(path)\n if (query) {\n query.running = setFlag(query.running, FLAG_RUNNING_INFLIGHT)\n }\n return state\n }\n case `CREATE_NODE`:\n case `DELETE_NODE`: {\n const node = action.payload\n if (!node) {\n return state\n }\n const queriesByNode = state.byNode.get(node.id) ?? []\n const queriesByConnection =\n state.byConnection.get(node.internal.type) ?? []\n\n for (const queryId of queriesByNode) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_DATA)\n state = trackDirtyQuery(state, queryId)\n }\n }\n for (const queryId of queriesByConnection) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_DATA)\n state = trackDirtyQuery(state, queryId)\n }\n }\n return state\n }\n case `PAGE_QUERY_RUN`: {\n const { path } = action.payload\n const query = registerQuery(state, path)\n query.dirty = 0\n query.running = 0 // TODO: also\n return state\n }\n case `SET_PROGRAM_STATUS`: {\n if (action.payload === `BOOTSTRAP_FINISHED`) {\n // Reset the running state (as it could've been persisted)\n for (const [, query] of state.trackedQueries) {\n query.running = 0\n }\n // Reset list of dirty queries (this is used only to notify runtime and it could've been persisted)\n state.dirtyQueriesListToEmitViaWebsocket = []\n }\n return state\n }\n case `QUERY_CLEAR_DIRTY_QUERIES_LIST_TO_EMIT_VIA_WEBSOCKET`: {\n state.dirtyQueriesListToEmitViaWebsocket = []\n return state\n }\n case `MERGE_WORKER_QUERY_STATE`: {\n assertCorrectWorkerState(action.payload)\n\n state = mergeWorkerDataDependencies(state, action.payload)\n return state\n }\n default:\n return state\n }\n}\n\nfunction setFlag(allFlags: number, flag: number, set = true): number {\n if (allFlags < 0) {\n allFlags = 0\n }\n return set ? allFlags | flag : allFlags & ~flag\n}\n\nexport function hasFlag(allFlags: number, flag: number): boolean {\n return allFlags >= 0 && (allFlags & flag) > 0\n}\n\nfunction addNodeDependency(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId,\n nodeId: NodeId\n): IGatsbyState[\"queries\"] {\n // Perf: using two-side maps.\n // Without additional `queryNodes` map we would have to loop through\n // all existing nodes in `clearNodeDependencies` to delete node <-> query dependency\n let nodeQueries = state.byNode.get(nodeId)\n if (!nodeQueries) {\n nodeQueries = new Set<QueryId>()\n state.byNode.set(nodeId, nodeQueries)\n }\n let queryNodes = state.queryNodes.get(queryId)\n if (!queryNodes) {\n queryNodes = new Set<NodeId>()\n state.queryNodes.set(queryId, queryNodes)\n }\n nodeQueries.add(queryId)\n queryNodes.add(nodeId)\n return state\n}\n\nfunction addConnectionDependency(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId,\n connection: ConnectionName\n): IGatsbyState[\"queries\"] {\n // Note: not using two-side maps for connections as associated overhead\n // for small number of elements is greater then benefits, so no perf. gains\n let queryIds = state.byConnection.get(connection)\n if (!queryIds) {\n queryIds = new Set()\n state.byConnection.set(connection, queryIds)\n }\n queryIds.add(queryId)\n return state\n}\n\nfunction clearNodeDependencies(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n const queryNodeIds = state.queryNodes.get(queryId) ?? new Set()\n for (const nodeId of queryNodeIds) {\n const nodeQueries = state.byNode.get(nodeId)\n if (nodeQueries) {\n nodeQueries.delete(queryId)\n }\n }\n return state\n}\n\nfunction clearConnectionDependencies(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n for (const [, queryIds] of state.byConnection) {\n queryIds.delete(queryId)\n }\n return state\n}\n\nfunction registerQuery(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IQueryState {\n let query = state.trackedQueries.get(queryId)\n if (!query) {\n query = initialQueryState()\n state.trackedQueries.set(queryId, query)\n }\n return query\n}\n\nfunction registerComponent(\n state: IGatsbyState[\"queries\"],\n componentPath: string\n): IComponentState {\n let component = state.trackedComponents.get(componentPath)\n if (!component) {\n component = initialComponentState()\n component.componentPath = componentPath\n state.trackedComponents.set(componentPath, component)\n }\n return component\n}\n\nfunction trackDirtyQuery(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n if (process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND) {\n state.dirtyQueriesListToEmitViaWebsocket.push(queryId)\n }\n\n return state\n}\n\ninterface IWorkerStateChunk {\n workerId: number\n queryStateChunk: IGatsbyState[\"queries\"]\n}\n\nfunction mergeWorkerDataDependencies(\n state: IGatsbyState[\"queries\"],\n workerStateChunk: IWorkerStateChunk\n): IGatsbyState[\"queries\"] {\n const queryState = workerStateChunk.queryStateChunk\n\n // First clear data dependencies for all queries tracked by worker\n for (const queryId of queryState.trackedQueries.keys()) {\n state = clearNodeDependencies(state, queryId)\n state = clearConnectionDependencies(state, queryId)\n }\n\n // Now re-add all data deps from worker\n for (const [nodeId, queries] of queryState.byNode) {\n for (const queryId of queries) {\n state = addNodeDependency(state, queryId, nodeId)\n }\n }\n for (const [connectionName, queries] of queryState.byConnection) {\n for (const queryId of queries) {\n state = addConnectionDependency(state, queryId, connectionName)\n }\n }\n return state\n}\n\nfunction assertCorrectWorkerState({\n queryStateChunk,\n workerId,\n}: IWorkerStateChunk): void {\n if (queryStateChunk.deletedQueries.size !== 0) {\n throw new Error(\n `Assertion failed: workerState.deletedQueries.size === 0 (worker #${workerId})`\n )\n }\n if (queryStateChunk.trackedComponents.size !== 0) {\n throw new Error(\n `Assertion failed: queryStateChunk.trackedComponents.size === 0 (worker #${workerId})`\n )\n }\n for (const query of queryStateChunk.trackedQueries.values()) {\n if (query.dirty) {\n throw new Error(\n `Assertion failed: all worker queries are not dirty (worker #${workerId})`\n )\n }\n if (query.running) {\n throw new Error(\n `Assertion failed: all worker queries are not running (worker #${workerId})`\n )\n }\n }\n}\n"],"file":"queries.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/redux/reducers/queries.ts"],"names":["FLAG_DIRTY_NEW_PAGE","FLAG_DIRTY_TEXT","FLAG_DIRTY_DATA","FLAG_DIRTY_PAGE_CONTEXT","FLAG_ERROR_EXTRACTION","FLAG_RUNNING_INFLIGHT","initialState","byNode","Map","byConnection","queryNodes","trackedQueries","trackedComponents","deletedQueries","Set","dirtyQueriesListToEmitViaWebsocket","initialQueryState","dirty","running","initialComponentState","componentPath","query","pages","errors","queriesReducer","state","action","type","console","log","path","payload","get","contextModified","registerQuery","setFlag","trackDirtyQuery","registerComponent","add","delete","apiName","queryId","component","values","clearNodeDependencies","clearConnectionDependencies","clear","hasFlag","set","id","forEach","nodeId","connection","addNodeDependency","addConnectionDependency","node","queriesByNode","queriesByConnection","internal","assertCorrectWorkerState","mergeWorkerDataDependencies","allFlags","flag","nodeQueries","queryIds","queryNodeIds","process","env","GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND","push","workerStateChunk","queryState","queryStateChunk","keys","queries","connectionName","workerId","size","Error"],"mappings":"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","sourcesContent":["import {\n ActionsUnion,\n IComponentState,\n IGatsbyState,\n IQueryState,\n} from \"../types\"\n\ntype QueryId = string // page query path or static query id\ntype ComponentPath = string\ntype NodeId = string\ntype ConnectionName = string\n\nexport const FLAG_DIRTY_NEW_PAGE = 0b0001\nexport const FLAG_DIRTY_TEXT = 0b0010\nexport const FLAG_DIRTY_DATA = 0b0100\nexport const FLAG_DIRTY_PAGE_CONTEXT = 0b1000\n\nexport const FLAG_ERROR_EXTRACTION = 0b0001\n\nexport const FLAG_RUNNING_INFLIGHT = 0b0001\n\nconst initialState = (): IGatsbyState[\"queries\"] => {\n return {\n byNode: new Map<NodeId, Set<QueryId>>(),\n byConnection: new Map<ConnectionName, Set<QueryId>>(),\n queryNodes: new Map<QueryId, Set<NodeId>>(),\n trackedQueries: new Map<QueryId, IQueryState>(),\n trackedComponents: new Map<ComponentPath, IComponentState>(),\n deletedQueries: new Set<QueryId>(),\n dirtyQueriesListToEmitViaWebsocket: [],\n }\n}\n\nconst initialQueryState = (): IQueryState => {\n return {\n dirty: -1, // unknown, must be set right after init\n running: 0,\n }\n}\n\nconst initialComponentState = (): IComponentState => {\n return {\n componentPath: ``,\n query: ``,\n pages: new Set<QueryId>(),\n errors: 0,\n // TODO: staticQueries: new Set<QueryId>()\n }\n}\n\n/**\n * Tracks query dirtiness. Dirty queries are queries that:\n *\n * - depend on nodes or node collections (via `actions.createPageDependency`) that have changed.\n * - have been recently extracted (or their query text has changed)\n * - belong to newly created pages (or pages with modified context)\n *\n * Dirty queries must be re-ran.\n */\nexport function queriesReducer(\n state: IGatsbyState[\"queries\"] = initialState(),\n action: ActionsUnion\n): IGatsbyState[\"queries\"] {\n switch (action.type) {\n case `DELETE_CACHE`:\n return initialState()\n\n case `DELETE_QUERIES_CACHE`:\n console.log(`deleting query cache`)\n return initialState()\n\n case `CREATE_PAGE`: {\n const { path, componentPath } = action.payload\n let query = state.trackedQueries.get(path)\n if (!query || action.contextModified) {\n query = registerQuery(state, path)\n query.dirty = setFlag(\n query.dirty,\n action.contextModified ? FLAG_DIRTY_PAGE_CONTEXT : FLAG_DIRTY_NEW_PAGE\n )\n state = trackDirtyQuery(state, path)\n }\n registerComponent(state, componentPath).pages.add(path)\n state.deletedQueries.delete(path)\n return state\n }\n case `DELETE_PAGE`: {\n // Don't actually remove the page query from trackedQueries, just mark it as \"deleted\". Why?\n // We promote a technique of a consecutive deletePage/createPage calls in onCreatePage hook,\n // see https://www.gatsbyjs.com/docs/creating-and-modifying-pages/#pass-context-to-pages\n // If we remove a query and then re-add, it will be marked as dirty.\n // This is OK for cold cache but with warm cache we will re-run all of those queries (unnecessarily).\n // We will reconcile the state after createPages API call and actually delete those queries.\n state.deletedQueries.add(action.payload.path)\n return state\n }\n case `API_FINISHED`: {\n if (action.payload.apiName !== `createPages`) {\n return state\n }\n for (const queryId of state.deletedQueries) {\n for (const component of state.trackedComponents.values()) {\n component.pages.delete(queryId)\n }\n state = clearNodeDependencies(state, queryId)\n state = clearConnectionDependencies(state, queryId)\n state.trackedQueries.delete(queryId)\n }\n state.deletedQueries.clear()\n return state\n }\n case `QUERY_EXTRACTED`: {\n // Note: this action is called even in case of\n // extraction error or missing query (with query === ``)\n // TODO: use hash instead of a query text\n const { componentPath, query } = action.payload\n const component = registerComponent(state, componentPath)\n console.log(`reducers/queries`, component, action)\n if (component) {\n if (hasFlag(component.errors, FLAG_ERROR_EXTRACTION)) {\n return state\n }\n if (component.query !== query) {\n // Invalidate all pages associated with a component when query text changes\n for (const queryId of component.pages) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_TEXT)\n state = trackDirtyQuery(state, queryId)\n }\n }\n component.query = query\n }\n }\n return state\n }\n case `QUERY_EXTRACTION_GRAPHQL_ERROR`:\n case `QUERY_EXTRACTION_BABEL_ERROR`:\n case `QUERY_EXTRACTION_BABEL_SUCCESS`: {\n const { componentPath } = action.payload\n const component = registerComponent(state, componentPath)\n const set = action.type !== `QUERY_EXTRACTION_BABEL_SUCCESS`\n component.errors = setFlag(component.errors, FLAG_ERROR_EXTRACTION, set)\n return state\n }\n case `REPLACE_STATIC_QUERY`: {\n // Only called when static query text has changed, so no need to compare\n // TODO: unify the behavior?\n const query = registerQuery(state, action.payload.id)\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_TEXT)\n // static queries are not on demand, so skipping tracking which\n // queries were marked dirty recently\n // state = trackDirtyQuery(state, action.payload.id)\n state.deletedQueries.delete(action.payload.id)\n return state\n }\n case `REMOVE_STATIC_QUERY`: {\n state.deletedQueries.add(action.payload)\n return state\n }\n case `CREATE_COMPONENT_DEPENDENCY`: {\n action.payload.forEach(({ path: queryId, nodeId, connection }) => {\n if (nodeId) {\n state = addNodeDependency(state, queryId, nodeId)\n }\n if (connection) {\n state = addConnectionDependency(state, queryId, connection)\n }\n })\n\n return state\n }\n case `QUERY_START`: {\n // Reset data dependencies as they will be updated when running the query\n const { path } = action.payload\n state = clearNodeDependencies(state, path)\n state = clearConnectionDependencies(state, path)\n const query = state.trackedQueries.get(path)\n if (query) {\n query.running = setFlag(query.running, FLAG_RUNNING_INFLIGHT)\n }\n return state\n }\n case `CREATE_NODE`:\n case `DELETE_NODE`: {\n const node = action.payload\n if (!node) {\n return state\n }\n const queriesByNode = state.byNode.get(node.id) ?? []\n const queriesByConnection =\n state.byConnection.get(node.internal.type) ?? []\n\n for (const queryId of queriesByNode) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_DATA)\n state = trackDirtyQuery(state, queryId)\n }\n }\n for (const queryId of queriesByConnection) {\n const query = state.trackedQueries.get(queryId)\n if (query) {\n query.dirty = setFlag(query.dirty, FLAG_DIRTY_DATA)\n state = trackDirtyQuery(state, queryId)\n }\n }\n return state\n }\n case `PAGE_QUERY_RUN`: {\n const { path } = action.payload\n const query = registerQuery(state, path)\n query.dirty = 0\n query.running = 0 // TODO: also\n return state\n }\n case `SET_PROGRAM_STATUS`: {\n if (action.payload === `BOOTSTRAP_FINISHED`) {\n // Reset the running state (as it could've been persisted)\n for (const [, query] of state.trackedQueries) {\n query.running = 0\n }\n // Reset list of dirty queries (this is used only to notify runtime and it could've been persisted)\n state.dirtyQueriesListToEmitViaWebsocket = []\n }\n return state\n }\n case `QUERY_CLEAR_DIRTY_QUERIES_LIST_TO_EMIT_VIA_WEBSOCKET`: {\n state.dirtyQueriesListToEmitViaWebsocket = []\n return state\n }\n case `MERGE_WORKER_QUERY_STATE`: {\n assertCorrectWorkerState(action.payload)\n\n state = mergeWorkerDataDependencies(state, action.payload)\n return state\n }\n default:\n return state\n }\n}\n\nfunction setFlag(allFlags: number, flag: number, set = true): number {\n if (allFlags < 0) {\n allFlags = 0\n }\n return set ? allFlags | flag : allFlags & ~flag\n}\n\nexport function hasFlag(allFlags: number, flag: number): boolean {\n return allFlags >= 0 && (allFlags & flag) > 0\n}\n\nfunction addNodeDependency(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId,\n nodeId: NodeId\n): IGatsbyState[\"queries\"] {\n // Perf: using two-side maps.\n // Without additional `queryNodes` map we would have to loop through\n // all existing nodes in `clearNodeDependencies` to delete node <-> query dependency\n let nodeQueries = state.byNode.get(nodeId)\n if (!nodeQueries) {\n nodeQueries = new Set<QueryId>()\n state.byNode.set(nodeId, nodeQueries)\n }\n let queryNodes = state.queryNodes.get(queryId)\n if (!queryNodes) {\n queryNodes = new Set<NodeId>()\n state.queryNodes.set(queryId, queryNodes)\n }\n nodeQueries.add(queryId)\n queryNodes.add(nodeId)\n return state\n}\n\nfunction addConnectionDependency(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId,\n connection: ConnectionName\n): IGatsbyState[\"queries\"] {\n // Note: not using two-side maps for connections as associated overhead\n // for small number of elements is greater then benefits, so no perf. gains\n let queryIds = state.byConnection.get(connection)\n if (!queryIds) {\n queryIds = new Set()\n state.byConnection.set(connection, queryIds)\n }\n queryIds.add(queryId)\n return state\n}\n\nfunction clearNodeDependencies(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n const queryNodeIds = state.queryNodes.get(queryId) ?? new Set()\n for (const nodeId of queryNodeIds) {\n const nodeQueries = state.byNode.get(nodeId)\n if (nodeQueries) {\n nodeQueries.delete(queryId)\n }\n }\n return state\n}\n\nfunction clearConnectionDependencies(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n for (const [, queryIds] of state.byConnection) {\n queryIds.delete(queryId)\n }\n return state\n}\n\nfunction registerQuery(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IQueryState {\n let query = state.trackedQueries.get(queryId)\n if (!query) {\n query = initialQueryState()\n state.trackedQueries.set(queryId, query)\n }\n return query\n}\n\nfunction registerComponent(\n state: IGatsbyState[\"queries\"],\n componentPath: string\n): IComponentState {\n let component = state.trackedComponents.get(componentPath)\n if (!component) {\n component = initialComponentState()\n component.componentPath = componentPath\n state.trackedComponents.set(componentPath, component)\n }\n return component\n}\n\nfunction trackDirtyQuery(\n state: IGatsbyState[\"queries\"],\n queryId: QueryId\n): IGatsbyState[\"queries\"] {\n if (process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND) {\n state.dirtyQueriesListToEmitViaWebsocket.push(queryId)\n }\n\n return state\n}\n\ninterface IWorkerStateChunk {\n workerId: number\n queryStateChunk: IGatsbyState[\"queries\"]\n}\n\nfunction mergeWorkerDataDependencies(\n state: IGatsbyState[\"queries\"],\n workerStateChunk: IWorkerStateChunk\n): IGatsbyState[\"queries\"] {\n const queryState = workerStateChunk.queryStateChunk\n\n // First clear data dependencies for all queries tracked by worker\n for (const queryId of queryState.trackedQueries.keys()) {\n state = clearNodeDependencies(state, queryId)\n state = clearConnectionDependencies(state, queryId)\n }\n\n // Now re-add all data deps from worker\n for (const [nodeId, queries] of queryState.byNode) {\n for (const queryId of queries) {\n state = addNodeDependency(state, queryId, nodeId)\n }\n }\n for (const [connectionName, queries] of queryState.byConnection) {\n for (const queryId of queries) {\n state = addConnectionDependency(state, queryId, connectionName)\n }\n }\n return state\n}\n\nfunction assertCorrectWorkerState({\n queryStateChunk,\n workerId,\n}: IWorkerStateChunk): void {\n if (queryStateChunk.deletedQueries.size !== 0) {\n throw new Error(\n `Assertion failed: workerState.deletedQueries.size === 0 (worker #${workerId})`\n )\n }\n if (queryStateChunk.trackedComponents.size !== 0) {\n throw new Error(\n `Assertion failed: queryStateChunk.trackedComponents.size === 0 (worker #${workerId})`\n )\n }\n for (const query of queryStateChunk.trackedQueries.values()) {\n if (query.dirty) {\n throw new Error(\n `Assertion failed: all worker queries are not dirty (worker #${workerId})`\n )\n }\n if (query.running) {\n throw new Error(\n `Assertion failed: all worker queries are not running (worker #${workerId})`\n )\n }\n }\n}\n"],"file":"queries.js"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.clearRequireCacheRecursively = clearRequireCacheRecursively;
|
|
5
|
+
|
|
6
|
+
function clearRequireCacheRecursively(module, ignoreNodeModules = true) {
|
|
7
|
+
const resolvedModule = require.resolve(module);
|
|
8
|
+
|
|
9
|
+
const cacheEntry = require.cache[resolvedModule];
|
|
10
|
+
|
|
11
|
+
if (!cacheEntry) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (ignoreNodeModules && resolvedModule.includes(`node_modules`)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
delete require.cache[resolvedModule];
|
|
20
|
+
const parent = cacheEntry.parent;
|
|
21
|
+
|
|
22
|
+
if (parent) {
|
|
23
|
+
const index = parent.children.findIndex(c => c.filename === resolvedModule);
|
|
24
|
+
|
|
25
|
+
if (index !== -1) {
|
|
26
|
+
parent.children.splice(index, 1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
cacheEntry.children.forEach(module => clearRequireCacheRecursively(module.filename, ignoreNodeModules));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=clear-require-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/clear-require-cache.ts"],"names":["clearRequireCacheRecursively","module","ignoreNodeModules","resolvedModule","require","resolve","cacheEntry","cache","includes","parent","index","children","findIndex","c","filename","splice","forEach"],"mappings":";;;;;AAAO,SAASA,4BAAT,CACLC,MADK,EAELC,iBAA0B,GAAG,IAFxB,EAGC;AACN,QAAMC,cAAc,GAAGC,OAAO,CAACC,OAAR,CAAgBJ,MAAhB,CAAvB;;AACA,QAAMK,UAAU,GAAGF,OAAO,CAACG,KAAR,CAAcJ,cAAd,CAAnB;;AACA,MAAI,CAACG,UAAL,EAAiB;AACf;AACD;;AACD,MAAIJ,iBAAiB,IAAIC,cAAc,CAACK,QAAf,CAAyB,cAAzB,CAAzB,EAAkE;AAChE;AACD;;AACD,SAAOJ,OAAO,CAACG,KAAR,CAAcJ,cAAd,CAAP;AAEA,QAAMM,MAAM,GAAGH,UAAU,CAACG,MAA1B;;AACA,MAAIA,MAAJ,EAAY;AACV,UAAMC,KAAK,GAAGD,MAAM,CAACE,QAAP,CAAgBC,SAAhB,CAA0BC,CAAC,IAAIA,CAAC,CAACC,QAAF,KAAeX,cAA9C,CAAd;;AACA,QAAIO,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChBD,MAAAA,MAAM,CAACE,QAAP,CAAgBI,MAAhB,CAAuBL,KAAvB,EAA8B,CAA9B;AACD;AACF;;AACDJ,EAAAA,UAAU,CAACK,QAAX,CAAoBK,OAApB,CAA4Bf,MAAM,IAChCD,4BAA4B,CAACC,MAAM,CAACa,QAAR,EAAkBZ,iBAAlB,CAD9B;AAGD","sourcesContent":["export function clearRequireCacheRecursively(\n module: string,\n ignoreNodeModules: boolean = true\n): void {\n const resolvedModule = require.resolve(module)\n const cacheEntry = require.cache[resolvedModule]\n if (!cacheEntry) {\n return\n }\n if (ignoreNodeModules && resolvedModule.includes(`node_modules`)) {\n return\n }\n delete require.cache[resolvedModule]\n\n const parent = cacheEntry.parent\n if (parent) {\n const index = parent.children.findIndex(c => c.filename === resolvedModule)\n if (index !== -1) {\n parent.children.splice(index, 1)\n }\n }\n cacheEntry.children.forEach(module =>\n clearRequireCacheRecursively(module.filename, ignoreNodeModules)\n )\n}\n"],"file":"clear-require-cache.js"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.getEngineContext = getEngineContext;
|
|
5
|
+
exports.runWithEngineContext = runWithEngineContext;
|
|
6
|
+
|
|
7
|
+
var _async_hooks = require("async_hooks");
|
|
8
|
+
|
|
9
|
+
let asyncLocalStorage;
|
|
10
|
+
|
|
11
|
+
function getAsyncLocalStorage() {
|
|
12
|
+
var _asyncLocalStorage;
|
|
13
|
+
|
|
14
|
+
return (_asyncLocalStorage = asyncLocalStorage) !== null && _asyncLocalStorage !== void 0 ? _asyncLocalStorage : asyncLocalStorage = new _async_hooks.AsyncLocalStorage();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getEngineContext() {
|
|
18
|
+
return getAsyncLocalStorage().getStore();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function runWithEngineContext(context, fn) {
|
|
22
|
+
// @ts-ignore typings are incorrect, run() returns the result of fn()
|
|
23
|
+
return getAsyncLocalStorage().run(context, fn);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=engine-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/engine-context.ts"],"names":["asyncLocalStorage","getAsyncLocalStorage","AsyncLocalStorage","getEngineContext","getStore","runWithEngineContext","context","fn","run"],"mappings":";;;;;;AAAA;;AAMA,IAAIA,iBAAJ;;AACA,SAASC,oBAAT,GAAmE;AAAA;;AACjE,+BAAOD,iBAAP,mEAA6BA,iBAAiB,GAAG,IAAIE,8BAAJ,EAAjD;AACD;;AAEM,SAASC,gBAAT,GAAwD;AAC7D,SAAOF,oBAAoB,GAAGG,QAAvB,EAAP;AACD;;AAEM,SAASC,oBAAT,CACLC,OADK,EAELC,EAFK,EAGF;AACH;AACA,SAAON,oBAAoB,GAAGO,GAAvB,CAA2BF,OAA3B,EAAoCC,EAApC,CAAP;AACD","sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\"\n\nexport interface IEngineContext {\n requestId: string\n}\n\nlet asyncLocalStorage\nfunction getAsyncLocalStorage(): AsyncLocalStorage<IEngineContext> {\n return asyncLocalStorage ?? (asyncLocalStorage = new AsyncLocalStorage())\n}\n\nexport function getEngineContext(): IEngineContext | undefined {\n return getAsyncLocalStorage().getStore()\n}\n\nexport function runWithEngineContext<T>(\n context: IEngineContext,\n fn: (...args: Array<any>) => T\n): T {\n // @ts-ignore typings are incorrect, run() returns the result of fn()\n return getAsyncLocalStorage().run(context, fn)\n}\n"],"file":"engine-context.js"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _normalizePath = _interopRequireDefault(require("normalize-path"));
|
|
9
|
+
|
|
10
|
+
var _memoizee = _interopRequireDefault(require("memoizee"));
|
|
11
|
+
|
|
12
|
+
const normalize = (0, _memoizee.default)(_normalizePath.default);
|
|
13
|
+
var _default = normalize;
|
|
14
|
+
exports.default = _default;
|
|
15
|
+
//# sourceMappingURL=normalize-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/normalize-path.ts"],"names":["normalize","_normalize"],"mappings":";;;;;;;AAAA;;AACA;;AAEA,MAAMA,SAAS,GAAG,uBAAQC,sBAAR,CAAlB;eAEeD,S","sourcesContent":["import _normalize from \"normalize-path\"\nimport memoize from \"memoizee\"\n\nconst normalize = memoize(_normalize)\n\nexport default normalize\n"],"file":"normalize-path.js"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.getPageMode = getPageMode;
|
|
5
|
+
exports.materializePageMode = materializePageMode;
|
|
6
|
+
exports.preparePageTemplateConfigs = preparePageTemplateConfigs;
|
|
7
|
+
|
|
8
|
+
var _redux = require("../redux");
|
|
9
|
+
|
|
10
|
+
var _reportOnce = require("./report-once");
|
|
11
|
+
|
|
12
|
+
var _constants = require("../constants");
|
|
13
|
+
|
|
14
|
+
const pageConfigMap = new Map();
|
|
15
|
+
/**
|
|
16
|
+
* In develop IGatsbyPage["mode"] can change at any time, so as a general rule we need to resolve it
|
|
17
|
+
* every time from page component and IGatsbyPage["defer"] value.
|
|
18
|
+
*
|
|
19
|
+
* IGatsbyPage["mode"] is only reliable in engines and in `onPostBuild` hook.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
function getPageMode(page, state) {
|
|
23
|
+
var _components$get;
|
|
24
|
+
|
|
25
|
+
const {
|
|
26
|
+
components
|
|
27
|
+
} = state !== null && state !== void 0 ? state : _redux.store.getState(); // assume SSG until components are actually extracted
|
|
28
|
+
|
|
29
|
+
const component = (_components$get = components.get(page.componentPath)) !== null && _components$get !== void 0 ? _components$get : {
|
|
30
|
+
serverData: false,
|
|
31
|
+
config: false
|
|
32
|
+
};
|
|
33
|
+
return resolvePageMode(page, component);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function resolvePageMode(page, component) {
|
|
37
|
+
let pageMode = undefined;
|
|
38
|
+
|
|
39
|
+
if (component.serverData) {
|
|
40
|
+
pageMode = `SSR`;
|
|
41
|
+
} else if (component.config) {
|
|
42
|
+
const pageConfigFn = pageConfigMap.get(page.componentChunkName);
|
|
43
|
+
|
|
44
|
+
if (!pageConfigFn) {
|
|
45
|
+
// This is possible in warm builds when `component.config` was persisted but
|
|
46
|
+
// `preparePageTemplateConfigs` hasn't been executed yet
|
|
47
|
+
// TODO: if we move `mode` away from page and persist it in the state separately,
|
|
48
|
+
// we can just return the old `mode` that should be in sync with `component.config`
|
|
49
|
+
return `SSG`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const fsRouteParams = typeof page.context[`__params`] === `object` ? page.context[`__params`] : {};
|
|
53
|
+
const pageConfig = pageConfigFn({
|
|
54
|
+
params: fsRouteParams
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (typeof pageConfig.defer === `boolean`) {
|
|
58
|
+
pageMode = pageConfig.defer ? `DSG` : `SSG`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (!pageMode) {
|
|
63
|
+
pageMode = page.defer ? `DSG` : `SSG`;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (pageMode !== `SSG` && (page.path === `/404.html` || page.path === `/500.html`)) {
|
|
67
|
+
(0, _reportOnce.reportOnce)(`Status page "${page.path}" ignores page mode ("${pageMode}") and force sets it to SSG (this page can't be lazily rendered).`);
|
|
68
|
+
pageMode = `SSG`;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return pageMode;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Persist page.mode for SSR/DSG pages to ensure they work with `gatsby serve`
|
|
75
|
+
*
|
|
76
|
+
* TODO: ideally IGatsbyPage["mode"] should not exist at all and instead we need a different entity
|
|
77
|
+
* holding this information: an entity that is only created in the end of the build e.g. Route
|
|
78
|
+
* then materializePageMode transforms to createRoutes
|
|
79
|
+
*/
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
async function materializePageMode() {
|
|
83
|
+
const {
|
|
84
|
+
pages,
|
|
85
|
+
components
|
|
86
|
+
} = _redux.store.getState();
|
|
87
|
+
|
|
88
|
+
let dispatchCount = 0;
|
|
89
|
+
|
|
90
|
+
for (const page of pages.values()) {
|
|
91
|
+
const component = components.get(page.componentPath);
|
|
92
|
+
|
|
93
|
+
if (!component) {
|
|
94
|
+
throw new Error(`Could not find matching component for page ${page.path}`);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const pageMode = resolvePageMode(page, component); // Do not materialize for SSG pages: saves some CPU time as `page.mode` === `SSG` by default when creating a page
|
|
98
|
+
// and our pages are re-generated on each build, not persisted
|
|
99
|
+
// (so no way to get DSG/SSR value from the previous build)
|
|
100
|
+
|
|
101
|
+
if (pageMode !== `SSG`) {
|
|
102
|
+
const action = {
|
|
103
|
+
type: `MATERIALIZE_PAGE_MODE`,
|
|
104
|
+
payload: {
|
|
105
|
+
path: page.path,
|
|
106
|
+
pageMode
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
_redux.store.dispatch(action);
|
|
111
|
+
} // Do not block task queue of the event loop for too long:
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if (dispatchCount++ % 100 === 0) {
|
|
115
|
+
await new Promise(resolve => setImmediate(resolve));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async function preparePageTemplateConfigs(graphql) {
|
|
121
|
+
const {
|
|
122
|
+
program
|
|
123
|
+
} = _redux.store.getState();
|
|
124
|
+
|
|
125
|
+
const pageRendererPath = `${program.directory}/${_constants.ROUTES_DIRECTORY}render-page.js`;
|
|
126
|
+
|
|
127
|
+
const pageRenderer = require(pageRendererPath);
|
|
128
|
+
|
|
129
|
+
global[`__gatsbyGraphql`] = graphql;
|
|
130
|
+
await Promise.all(Array.from(_redux.store.getState().components.values()).map(async component => {
|
|
131
|
+
if (component.config) {
|
|
132
|
+
const componentInstance = await pageRenderer.getPageChunk({
|
|
133
|
+
componentChunkName: component.componentChunkName
|
|
134
|
+
});
|
|
135
|
+
const pageConfigFn = await componentInstance.config();
|
|
136
|
+
|
|
137
|
+
if (typeof pageConfigFn !== `function`) {
|
|
138
|
+
throw new Error(`Unexpected result of config factory. Expected "function", got "${typeof pageConfigFn}".`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
pageConfigMap.set(component.componentChunkName, pageConfigFn);
|
|
142
|
+
}
|
|
143
|
+
}));
|
|
144
|
+
delete global[`__gatsbyGraphql`];
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=page-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/page-mode.ts"],"names":["pageConfigMap","Map","getPageMode","page","state","components","store","getState","component","get","componentPath","serverData","config","resolvePageMode","pageMode","undefined","pageConfigFn","componentChunkName","fsRouteParams","context","pageConfig","params","defer","path","materializePageMode","pages","dispatchCount","values","Error","action","type","payload","dispatch","Promise","resolve","setImmediate","preparePageTemplateConfigs","graphql","program","pageRendererPath","directory","ROUTES_DIRECTORY","pageRenderer","require","global","all","Array","from","map","componentInstance","getPageChunk","set"],"mappings":"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","sourcesContent":["import { store } from \"../redux\"\nimport {\n IGatsbyPage,\n IGatsbyState,\n IMaterializePageMode,\n PageMode,\n} from \"../redux/types\"\nimport { reportOnce } from \"./report-once\"\nimport { ROUTES_DIRECTORY } from \"../constants\"\nimport { Runner } from \"../bootstrap/create-graphql-runner\"\n\ntype IPageConfigFn = (arg: { params: Record<string, unknown> }) => {\n defer: boolean\n}\n\nconst pageConfigMap = new Map<string, IPageConfigFn>()\n\n/**\n * In develop IGatsbyPage[\"mode\"] can change at any time, so as a general rule we need to resolve it\n * every time from page component and IGatsbyPage[\"defer\"] value.\n *\n * IGatsbyPage[\"mode\"] is only reliable in engines and in `onPostBuild` hook.\n */\nexport function getPageMode(page: IGatsbyPage, state?: IGatsbyState): PageMode {\n const { components } = state ?? store.getState()\n\n // assume SSG until components are actually extracted\n const component = components.get(page.componentPath) ?? {\n serverData: false,\n config: false,\n }\n\n return resolvePageMode(page, component)\n}\n\nfunction resolvePageMode(\n page: IGatsbyPage,\n component: { serverData: boolean; config: boolean }\n): PageMode {\n let pageMode: PageMode | undefined = undefined\n if (component.serverData) {\n pageMode = `SSR`\n } else if (component.config) {\n const pageConfigFn = pageConfigMap.get(page.componentChunkName)\n if (!pageConfigFn) {\n // This is possible in warm builds when `component.config` was persisted but\n // `preparePageTemplateConfigs` hasn't been executed yet\n // TODO: if we move `mode` away from page and persist it in the state separately,\n // we can just return the old `mode` that should be in sync with `component.config`\n return `SSG`\n }\n\n const fsRouteParams = (\n typeof page.context[`__params`] === `object`\n ? page.context[`__params`]\n : {}\n ) as Record<string, unknown>\n\n const pageConfig = pageConfigFn({ params: fsRouteParams })\n if (typeof pageConfig.defer === `boolean`) {\n pageMode = pageConfig.defer ? `DSG` : `SSG`\n }\n }\n\n if (!pageMode) {\n pageMode = page.defer ? `DSG` : `SSG`\n }\n if (\n pageMode !== `SSG` &&\n (page.path === `/404.html` || page.path === `/500.html`)\n ) {\n reportOnce(\n `Status page \"${page.path}\" ignores page mode (\"${pageMode}\") and force sets it to SSG (this page can't be lazily rendered).`\n )\n pageMode = `SSG`\n }\n\n return pageMode\n}\n\n/**\n * Persist page.mode for SSR/DSG pages to ensure they work with `gatsby serve`\n *\n * TODO: ideally IGatsbyPage[\"mode\"] should not exist at all and instead we need a different entity\n * holding this information: an entity that is only created in the end of the build e.g. Route\n * then materializePageMode transforms to createRoutes\n */\nexport async function materializePageMode(): Promise<void> {\n const { pages, components } = store.getState()\n\n let dispatchCount = 0\n for (const page of pages.values()) {\n const component = components.get(page.componentPath)\n if (!component) {\n throw new Error(`Could not find matching component for page ${page.path}`)\n }\n const pageMode = resolvePageMode(page, component)\n\n // Do not materialize for SSG pages: saves some CPU time as `page.mode` === `SSG` by default when creating a page\n // and our pages are re-generated on each build, not persisted\n // (so no way to get DSG/SSR value from the previous build)\n if (pageMode !== `SSG`) {\n const action: IMaterializePageMode = {\n type: `MATERIALIZE_PAGE_MODE`,\n payload: { path: page.path, pageMode },\n }\n store.dispatch(action)\n }\n // Do not block task queue of the event loop for too long:\n if (dispatchCount++ % 100 === 0) {\n await new Promise(resolve => setImmediate(resolve))\n }\n }\n}\n\nexport async function preparePageTemplateConfigs(\n graphql: Runner\n): Promise<void> {\n const { program } = store.getState()\n const pageRendererPath = `${program.directory}/${ROUTES_DIRECTORY}render-page.js`\n\n const pageRenderer = require(pageRendererPath)\n global[`__gatsbyGraphql`] = graphql\n\n await Promise.all(\n Array.from(store.getState().components.values()).map(async component => {\n if (component.config) {\n const componentInstance = await pageRenderer.getPageChunk({\n componentChunkName: component.componentChunkName,\n })\n const pageConfigFn = await componentInstance.config()\n if (typeof pageConfigFn !== `function`) {\n throw new Error(\n `Unexpected result of config factory. Expected \"function\", got \"${typeof pageConfigFn}\".`\n )\n }\n\n pageConfigMap.set(component.componentChunkName, pageConfigFn)\n }\n })\n )\n delete global[`__gatsbyGraphql`]\n}\n"],"file":"page-mode.js"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.reportOnce = void 0;
|
|
7
|
+
|
|
8
|
+
var _reporter = _interopRequireDefault(require("gatsby-cli/lib/reporter"));
|
|
9
|
+
|
|
10
|
+
var _gatsbyWorker = require("gatsby-worker");
|
|
11
|
+
|
|
12
|
+
const displayedWarnings = new Set();
|
|
13
|
+
|
|
14
|
+
const reportOnce = (message, method = `warn`, key) => {
|
|
15
|
+
const messageId = key !== null && key !== void 0 ? key : message;
|
|
16
|
+
|
|
17
|
+
if (!displayedWarnings.has(messageId) && !_gatsbyWorker.isWorker) {
|
|
18
|
+
displayedWarnings.add(messageId);
|
|
19
|
+
|
|
20
|
+
_reporter.default[method](message);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
exports.reportOnce = reportOnce;
|
|
25
|
+
//# sourceMappingURL=report-once.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/report-once.ts"],"names":["displayedWarnings","Set","reportOnce","message","method","key","messageId","has","isWorker","add","reporter"],"mappings":";;;;;;;AAAA;;AACA;;AAEA,MAAMA,iBAAiB,GAAG,IAAIC,GAAJ,EAA1B;;AAEO,MAAMC,UAAU,GAAG,CACxBC,OADwB,EAExBC,MAAiE,GAAI,MAF7C,EAGxBC,GAHwB,KAIf;AACT,QAAMC,SAAS,GAAGD,GAAH,aAAGA,GAAH,cAAGA,GAAH,GAAUF,OAAzB;;AACA,MAAI,CAACH,iBAAiB,CAACO,GAAlB,CAAsBD,SAAtB,CAAD,IAAqC,CAACE,sBAA1C,EAAoD;AAClDR,IAAAA,iBAAiB,CAACS,GAAlB,CAAsBH,SAAtB;;AACAI,sBAASN,MAAT,EAAiBD,OAAjB;AACD;AACF,CAVM","sourcesContent":["import reporter from \"gatsby-cli/lib/reporter\"\nimport { isWorker } from \"gatsby-worker\"\n\nconst displayedWarnings = new Set<string>()\n\nexport const reportOnce = (\n message: string,\n method: \"log\" | \"warn\" | \"info\" | \"success\" | \"verbose\" | \"error\" = `warn`,\n key?: string\n): void => {\n const messageId = key ?? message\n if (!displayedWarnings.has(messageId) && !isWorker) {\n displayedWarnings.add(messageId)\n reporter[method](message)\n }\n}\n"],"file":"report-once.js"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.validate = validate;
|
|
7
|
+
|
|
8
|
+
var _module = _interopRequireDefault(require("module"));
|
|
9
|
+
|
|
10
|
+
var path = _interopRequireWildcard(require("path"));
|
|
11
|
+
|
|
12
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
|
+
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
|
|
16
|
+
// @ts-ignore TS doesn't like accessing `_load`
|
|
17
|
+
const originalModuleLoad = _module.default._load;
|
|
18
|
+
|
|
19
|
+
class EngineValidationError extends Error {
|
|
20
|
+
constructor({
|
|
21
|
+
request,
|
|
22
|
+
relativeToRoot,
|
|
23
|
+
parent
|
|
24
|
+
}) {
|
|
25
|
+
super(`Generated engines use disallowed import "${request}". Only allowed imports are to Node.js builtin modules or engines internals.`);
|
|
26
|
+
this.request = request;
|
|
27
|
+
this.relativeToRoot = relativeToRoot;
|
|
28
|
+
this.parentPath = parent.filename;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function validate(directory) {
|
|
34
|
+
// intercept module loading and validate no unexpected imports are happening
|
|
35
|
+
// @ts-ignore TS doesn't like accessing `_load`
|
|
36
|
+
_module.default._load = (request, parent, isMain) => {
|
|
37
|
+
// Allow all node builtins
|
|
38
|
+
if (_module.default.builtinModules.includes(request)) {
|
|
39
|
+
return originalModuleLoad(request, parent, isMain);
|
|
40
|
+
} // Allow imports to modules in engines directory.
|
|
41
|
+
// For example: importing ".cache/page-ssr/routes/render-page" from
|
|
42
|
+
// page-ssr engine should be allowed as it is part of engine.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const allowedPrefixes = [path.join(`.cache`, `query-engine`), path.join(`.cache`, `page-ssr`)];
|
|
46
|
+
|
|
47
|
+
const localRequire = _module.default.createRequire(parent.filename);
|
|
48
|
+
|
|
49
|
+
const absPath = localRequire.resolve(request);
|
|
50
|
+
const relativeToRoot = path.relative(directory, absPath);
|
|
51
|
+
|
|
52
|
+
for (const allowedPrefix of allowedPrefixes) {
|
|
53
|
+
if (relativeToRoot.startsWith(allowedPrefix)) {
|
|
54
|
+
return originalModuleLoad(request, parent, isMain);
|
|
55
|
+
}
|
|
56
|
+
} // We throw on anything that is not allowed
|
|
57
|
+
// Runtime might have try/catch for it and continue to work
|
|
58
|
+
// (for example`msgpackr` have fallback if native `msgpack-extract` can't be loaded)
|
|
59
|
+
// and we don't fail validation in those cases because error we throw will be handled.
|
|
60
|
+
// We do want to fail validation if there is no fallback
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
throw new EngineValidationError({
|
|
64
|
+
request,
|
|
65
|
+
relativeToRoot,
|
|
66
|
+
parent
|
|
67
|
+
});
|
|
68
|
+
}; // workaround for gatsby-worker issue:
|
|
69
|
+
// gatsby-worker gets bundled in engines and it will auto-init "child" module
|
|
70
|
+
// if GATSBY_WORKER_MODULE_PATH env var is set. To prevent this we just unset
|
|
71
|
+
// env var so it's falsy.
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
process.env.GATSBY_WORKER_MODULE_PATH = ``; // import engines, initiate them, if there is any error thrown it will be handled in parent process
|
|
75
|
+
|
|
76
|
+
const {
|
|
77
|
+
GraphQLEngine
|
|
78
|
+
} = require(path.join(directory, `.cache`, `query-engine`));
|
|
79
|
+
|
|
80
|
+
require(path.join(directory, `.cache`, `page-ssr`));
|
|
81
|
+
|
|
82
|
+
const graphqlEngine = new GraphQLEngine({
|
|
83
|
+
dbPath: path.join(directory, `.cache`, `data`, `datastore`)
|
|
84
|
+
});
|
|
85
|
+
await graphqlEngine.ready();
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=child.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/validate-engines/child.ts"],"names":["originalModuleLoad","mod","_load","EngineValidationError","Error","constructor","request","relativeToRoot","parent","parentPath","filename","validate","directory","isMain","builtinModules","includes","allowedPrefixes","path","join","localRequire","createRequire","absPath","resolve","relative","allowedPrefix","startsWith","process","env","GATSBY_WORKER_MODULE_PATH","GraphQLEngine","require","graphqlEngine","dbPath","ready"],"mappings":";;;;;;;AAAA;;AACA;;;;;;AAEA;AACA,MAAMA,kBAAkB,GAAGC,gBAAIC,KAA/B;;AAEA,MAAMC,qBAAN,SAAoCC,KAApC,CAA0C;AAKxCC,EAAAA,WAAW,CAAC;AACVC,IAAAA,OADU;AAEVC,IAAAA,cAFU;AAGVC,IAAAA;AAHU,GAAD,EAQR;AACD,UACG,4CAA2CF,OAAQ,8EADtD;AAGA,SAAKA,OAAL,GAAeA,OAAf;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACA,SAAKE,UAAL,GAAkBD,MAAM,CAACE,QAAzB;AACD;;AApBuC;;AAuBnC,eAAeC,QAAf,CAAwBC,SAAxB,EAA0D;AAC/D;AACA;AACAX,kBAAIC,KAAJ,GAAY,CAACI,OAAD,EAAkBE,MAAlB,EAA+BK,MAA/B,KAAwD;AAClE;AACA,QAAIZ,gBAAIa,cAAJ,CAAmBC,QAAnB,CAA4BT,OAA5B,CAAJ,EAA0C;AACxC,aAAON,kBAAkB,CAACM,OAAD,EAAUE,MAAV,EAAkBK,MAAlB,CAAzB;AACD,KAJiE,CAMlE;AACA;AACA;;;AACA,UAAMG,eAAe,GAAG,CACtBC,IAAI,CAACC,IAAL,CAAW,QAAX,EAAqB,cAArB,CADsB,EAEtBD,IAAI,CAACC,IAAL,CAAW,QAAX,EAAqB,UAArB,CAFsB,CAAxB;;AAIA,UAAMC,YAAY,GAAGlB,gBAAImB,aAAJ,CAAkBZ,MAAM,CAACE,QAAzB,CAArB;;AACA,UAAMW,OAAO,GAAGF,YAAY,CAACG,OAAb,CAAqBhB,OAArB,CAAhB;AACA,UAAMC,cAAc,GAAGU,IAAI,CAACM,QAAL,CAAcX,SAAd,EAAyBS,OAAzB,CAAvB;;AACA,SAAK,MAAMG,aAAX,IAA4BR,eAA5B,EAA6C;AAC3C,UAAIT,cAAc,CAACkB,UAAf,CAA0BD,aAA1B,CAAJ,EAA8C;AAC5C,eAAOxB,kBAAkB,CAACM,OAAD,EAAUE,MAAV,EAAkBK,MAAlB,CAAzB;AACD;AACF,KApBiE,CAsBlE;AACA;AACA;AACA;AACA;;;AACA,UAAM,IAAIV,qBAAJ,CAA0B;AAAEG,MAAAA,OAAF;AAAWC,MAAAA,cAAX;AAA2BC,MAAAA;AAA3B,KAA1B,CAAN;AACD,GA5BD,CAH+D,CAiC/D;AACA;AACA;AACA;;;AACAkB,EAAAA,OAAO,CAACC,GAAR,CAAYC,yBAAZ,GAAyC,EAAzC,CArC+D,CAuC/D;;AACA,QAAM;AAAEC,IAAAA;AAAF,MAAoBC,OAAO,CAACb,IAAI,CAACC,IAAL,CAChCN,SADgC,EAE/B,QAF+B,EAG/B,cAH+B,CAAD,CAAjC;;AAKAkB,EAAAA,OAAO,CAACb,IAAI,CAACC,IAAL,CAAUN,SAAV,EAAsB,QAAtB,EAAgC,UAAhC,CAAD,CAAP;;AACA,QAAMmB,aAAa,GAAG,IAAIF,aAAJ,CAAkB;AACtCG,IAAAA,MAAM,EAAEf,IAAI,CAACC,IAAL,CAAUN,SAAV,EAAsB,QAAtB,EAAgC,MAAhC,EAAwC,WAAxC;AAD8B,GAAlB,CAAtB;AAGA,QAAMmB,aAAa,CAACE,KAAd,EAAN;AACD","sourcesContent":["import mod from \"module\"\nimport * as path from \"path\"\n\n// @ts-ignore TS doesn't like accessing `_load`\nconst originalModuleLoad = mod._load\n\nclass EngineValidationError extends Error {\n request: string\n relativeToRoot: string\n parentPath: string\n\n constructor({\n request,\n relativeToRoot,\n parent,\n }: {\n request: string\n relativeToRoot: string\n parent: mod\n }) {\n super(\n `Generated engines use disallowed import \"${request}\". Only allowed imports are to Node.js builtin modules or engines internals.`\n )\n this.request = request\n this.relativeToRoot = relativeToRoot\n this.parentPath = parent.filename\n }\n}\n\nexport async function validate(directory: string): Promise<void> {\n // intercept module loading and validate no unexpected imports are happening\n // @ts-ignore TS doesn't like accessing `_load`\n mod._load = (request: string, parent: mod, isMain: boolean): any => {\n // Allow all node builtins\n if (mod.builtinModules.includes(request)) {\n return originalModuleLoad(request, parent, isMain)\n }\n\n // Allow imports to modules in engines directory.\n // For example: importing \".cache/page-ssr/routes/render-page\" from\n // page-ssr engine should be allowed as it is part of engine.\n const allowedPrefixes = [\n path.join(`.cache`, `query-engine`),\n path.join(`.cache`, `page-ssr`),\n ]\n const localRequire = mod.createRequire(parent.filename)\n const absPath = localRequire.resolve(request)\n const relativeToRoot = path.relative(directory, absPath)\n for (const allowedPrefix of allowedPrefixes) {\n if (relativeToRoot.startsWith(allowedPrefix)) {\n return originalModuleLoad(request, parent, isMain)\n }\n }\n\n // We throw on anything that is not allowed\n // Runtime might have try/catch for it and continue to work\n // (for example`msgpackr` have fallback if native `msgpack-extract` can't be loaded)\n // and we don't fail validation in those cases because error we throw will be handled.\n // We do want to fail validation if there is no fallback\n throw new EngineValidationError({ request, relativeToRoot, parent })\n }\n\n // workaround for gatsby-worker issue:\n // gatsby-worker gets bundled in engines and it will auto-init \"child\" module\n // if GATSBY_WORKER_MODULE_PATH env var is set. To prevent this we just unset\n // env var so it's falsy.\n process.env.GATSBY_WORKER_MODULE_PATH = ``\n\n // import engines, initiate them, if there is any error thrown it will be handled in parent process\n const { GraphQLEngine } = require(path.join(\n directory,\n `.cache`,\n `query-engine`\n ))\n require(path.join(directory, `.cache`, `page-ssr`))\n const graphqlEngine = new GraphQLEngine({\n dbPath: path.join(directory, `.cache`, `data`, `datastore`),\n })\n await graphqlEngine.ready()\n}\n"],"file":"child.js"}
|