feat(blog): add file-based blog with dynamic slugs, MDX content and layout shell
- Introduced blog routing using Next.js App Router - Implemented dynamic [slug] pages for blog posts - Added MDX-based content loading via lib/posts - Integrated shared TopBar layout with navigation - Established clear content, lib and component separation
This commit is contained in:
112
apps/public-web/node_modules/next/dist/lib/inline-static-env.js
generated
vendored
Normal file
112
apps/public-web/node_modules/next/dist/lib/inline-static-env.js
generated
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "inlineStaticEnv", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return inlineStaticEnv;
|
||||
}
|
||||
});
|
||||
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
||||
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
||||
const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
|
||||
const _util = require("util");
|
||||
const _glob = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/glob"));
|
||||
const _asyncsema = require("next/dist/compiled/async-sema");
|
||||
const _staticenv = require("./static-env");
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
const glob = (0, _util.promisify)(_glob.default);
|
||||
async function inlineStaticEnv({ distDir, config }) {
|
||||
const nextConfigEnv = (0, _staticenv.getNextConfigEnv)(config);
|
||||
const staticEnv = (0, _staticenv.getStaticEnv)(config, config.deploymentId);
|
||||
const serverDir = _path.default.join(distDir, 'server');
|
||||
const serverChunks = await glob('**/*.{js,json,js.map}', {
|
||||
cwd: serverDir
|
||||
});
|
||||
const clientDir = _path.default.join(distDir, 'static');
|
||||
const clientChunks = await glob('**/*.{js,json,js.map}', {
|
||||
cwd: clientDir
|
||||
});
|
||||
const manifestChunks = await glob('*.{js,json,js.map}', {
|
||||
cwd: distDir
|
||||
});
|
||||
const inlineSema = new _asyncsema.Sema(8);
|
||||
const nextConfigEnvKeys = Object.keys(nextConfigEnv).map((item)=>item.split('process.env.').pop());
|
||||
const builtRegEx = new RegExp(`[\\w]{1,}(\\.env)?\\.(?:NEXT_PUBLIC_[\\w]{1,}${nextConfigEnvKeys.length ? '|' + nextConfigEnvKeys.join('|') : ''})`, 'g');
|
||||
const changedClientFiles = [];
|
||||
const filesToCheck = new Set(manifestChunks.map((f)=>_path.default.join(distDir, f)));
|
||||
for (const [parentDir, files] of [
|
||||
[
|
||||
serverDir,
|
||||
serverChunks
|
||||
],
|
||||
[
|
||||
clientDir,
|
||||
clientChunks
|
||||
]
|
||||
]){
|
||||
await Promise.all(files.map(async (file)=>{
|
||||
await inlineSema.acquire();
|
||||
const filepath = _path.default.join(parentDir, file);
|
||||
const content = await _fs.default.promises.readFile(filepath, 'utf8');
|
||||
const newContent = content.replace(builtRegEx, (match)=>{
|
||||
let normalizedMatch = `process.env.${match.split('.').pop()}`;
|
||||
if (staticEnv[normalizedMatch]) {
|
||||
return JSON.stringify(staticEnv[normalizedMatch]);
|
||||
}
|
||||
return match;
|
||||
});
|
||||
await _fs.default.promises.writeFile(filepath, newContent);
|
||||
if (content !== newContent && parentDir === clientDir) {
|
||||
changedClientFiles.push({
|
||||
file,
|
||||
content: newContent
|
||||
});
|
||||
}
|
||||
filesToCheck.add(filepath);
|
||||
inlineSema.release();
|
||||
}));
|
||||
}
|
||||
const hashChanges = [];
|
||||
// hashes need updating for any changed client files
|
||||
for (const { file, content } of changedClientFiles){
|
||||
var _file_match;
|
||||
// hash is 16 chars currently for all client chunks
|
||||
const originalHash = ((_file_match = file.match(/([a-z0-9]{16})\./)) == null ? void 0 : _file_match[1]) || '';
|
||||
if (!originalHash) {
|
||||
throw Object.defineProperty(new Error(`Invariant: client chunk changed but failed to detect hash ${file}`), "__NEXT_ERROR_CODE", {
|
||||
value: "E663",
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
}
|
||||
const newHash = _crypto.default.createHash('sha256').update(content).digest('hex').substring(0, 16);
|
||||
hashChanges.push({
|
||||
originalHash,
|
||||
newHash
|
||||
});
|
||||
const filepath = _path.default.join(clientDir, file);
|
||||
const newFilepath = filepath.replace(originalHash, newHash);
|
||||
filesToCheck.delete(filepath);
|
||||
filesToCheck.add(newFilepath);
|
||||
await _fs.default.promises.rename(filepath, newFilepath);
|
||||
}
|
||||
// update build-manifest and webpack-runtime with new hashes
|
||||
for (let file of filesToCheck){
|
||||
const content = await _fs.default.promises.readFile(file, 'utf-8');
|
||||
let newContent = content;
|
||||
for (const { originalHash, newHash } of hashChanges){
|
||||
newContent = newContent.replaceAll(originalHash, newHash);
|
||||
}
|
||||
if (content !== newContent) {
|
||||
await _fs.default.promises.writeFile(file, newContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=inline-static-env.js.map
|
||||
Reference in New Issue
Block a user