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:
169
apps/public-web/node_modules/next/dist/cli/next-test.js
generated
vendored
Normal file
169
apps/public-web/node_modules/next/dist/cli/next-test.js
generated
vendored
Normal file
@@ -0,0 +1,169 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
0 && (module.exports = {
|
||||
SUPPORTED_TEST_RUNNERS_LIST: null,
|
||||
nextTest: null
|
||||
});
|
||||
function _export(target, all) {
|
||||
for(var name in all)Object.defineProperty(target, name, {
|
||||
enumerable: true,
|
||||
get: all[name]
|
||||
});
|
||||
}
|
||||
_export(exports, {
|
||||
SUPPORTED_TEST_RUNNERS_LIST: function() {
|
||||
return SUPPORTED_TEST_RUNNERS_LIST;
|
||||
},
|
||||
nextTest: function() {
|
||||
return nextTest;
|
||||
}
|
||||
});
|
||||
const _fs = require("fs");
|
||||
const _getprojectdir = require("../lib/get-project-dir");
|
||||
const _utils = require("../server/lib/utils");
|
||||
const _config = /*#__PURE__*/ _interop_require_default(require("../server/config"));
|
||||
const _constants = require("../shared/lib/constants");
|
||||
const _hasnecessarydependencies = require("../lib/has-necessary-dependencies");
|
||||
const _installdependencies = require("../lib/install-dependencies");
|
||||
const _findup = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/find-up"));
|
||||
const _findpagesdir = require("../lib/find-pages-dir");
|
||||
const _verifytypescriptsetup = require("../lib/verify-typescript-setup");
|
||||
const _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
||||
const _crossspawn = /*#__PURE__*/ _interop_require_default(require("next/dist/compiled/cross-spawn"));
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
const SUPPORTED_TEST_RUNNERS_LIST = [
|
||||
'playwright'
|
||||
];
|
||||
const requiredPackagesByTestRunner = {
|
||||
playwright: [
|
||||
{
|
||||
file: 'playwright',
|
||||
pkg: '@playwright/test',
|
||||
exportsRestrict: false
|
||||
}
|
||||
]
|
||||
};
|
||||
async function nextTest(directory, testRunnerArgs = [], options = {}) {
|
||||
// The following mess is in order to support an existing Next.js CLI pattern of optionally, passing a project `directory` as the first argument to execute the command on.
|
||||
// This is problematic for `next test` because as a wrapper around a test runner's `test` command, it needs to pass through any additional arguments and options.
|
||||
// Thus, `directory` could either be a valid Next.js project directory (that the user intends to run `next test` on), or it is the first argument for the test runner.
|
||||
// Unfortunately, since many test runners support passing a path (to a test file or directory containing test files), we must check if `directory` is both a valid path and a valid Next.js project.
|
||||
let baseDir, nextConfig;
|
||||
try {
|
||||
// if directory is `undefined` or a valid path this will succeed.
|
||||
baseDir = (0, _getprojectdir.getProjectDir)(directory, false);
|
||||
} catch (err) {
|
||||
// if that failed, then `directory` is not a valid path, so it must have meant to be the first item for `testRunnerArgs`
|
||||
// @ts-expect-error directory is a string here since `getProjectDir` will succeed if its undefined
|
||||
testRunnerArgs.unshift(directory);
|
||||
// intentionally set baseDir to the resolved '.' path
|
||||
baseDir = (0, _getprojectdir.getProjectDir)();
|
||||
}
|
||||
try {
|
||||
// but, `baseDir` might not be a Next.js project directory, it could be a path-like argument for the test runner (i.e. `playwright test test/foo.spec.js`)
|
||||
// if this succeeds, it means that `baseDir` is a Next.js project directory
|
||||
nextConfig = await (0, _config.default)(_constants.PHASE_PRODUCTION_BUILD, baseDir);
|
||||
} catch (err) {
|
||||
// if it doesn't, then most likely `baseDir` is not a Next.js project directory
|
||||
// @ts-expect-error directory is a string here since `getProjectDir` will succeed if its undefined
|
||||
testRunnerArgs.unshift(directory);
|
||||
// intentionally set baseDir to the resolved '.' path
|
||||
baseDir = (0, _getprojectdir.getProjectDir)();
|
||||
nextConfig = await (0, _config.default)(_constants.PHASE_PRODUCTION_BUILD, baseDir) // let this error bubble up if the `basePath` is still not a valid Next.js project
|
||||
;
|
||||
}
|
||||
// set the test runner. priority is CLI option > next config > default 'playwright'
|
||||
const configuredTestRunner = (options == null ? void 0 : options.testRunner) ?? // --test-runner='foo'
|
||||
nextConfig.experimental.defaultTestRunner ?? // { experimental: { defaultTestRunner: 'foo' }}
|
||||
'playwright';
|
||||
if (!nextConfig.experimental.testProxy) {
|
||||
return (0, _utils.printAndExit)(`\`next experimental-test\` requires the \`experimental.testProxy: true\` configuration option.`);
|
||||
}
|
||||
// execute test runner specific function
|
||||
switch(configuredTestRunner){
|
||||
case 'playwright':
|
||||
return runPlaywright(baseDir, nextConfig, testRunnerArgs);
|
||||
default:
|
||||
return (0, _utils.printAndExit)(`Test runner ${configuredTestRunner} is not supported.`);
|
||||
}
|
||||
}
|
||||
async function checkRequiredDeps(baseDir, testRunner) {
|
||||
const deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(baseDir, requiredPackagesByTestRunner[testRunner]);
|
||||
if (deps.missing.length > 0) {
|
||||
await (0, _installdependencies.installDependencies)(baseDir, deps.missing, true);
|
||||
const playwright = (0, _crossspawn.default)(_path.default.join(baseDir, 'node_modules', '.bin', 'playwright'), [
|
||||
'install'
|
||||
], {
|
||||
cwd: baseDir,
|
||||
shell: false,
|
||||
stdio: 'inherit',
|
||||
env: {
|
||||
...process.env
|
||||
}
|
||||
});
|
||||
return new Promise((resolve, reject)=>{
|
||||
playwright.on('close', (c)=>resolve(c));
|
||||
playwright.on('error', (err)=>reject(err));
|
||||
});
|
||||
}
|
||||
}
|
||||
async function runPlaywright(baseDir, nextConfig, testRunnerArgs) {
|
||||
await checkRequiredDeps(baseDir, 'playwright');
|
||||
const playwrightConfigFile = await (0, _findup.default)([
|
||||
'playwright.config.js',
|
||||
'playwright.config.ts'
|
||||
], {
|
||||
cwd: baseDir
|
||||
});
|
||||
if (!playwrightConfigFile) {
|
||||
const { pagesDir, appDir } = (0, _findpagesdir.findPagesDir)(baseDir);
|
||||
const { version: typeScriptVersion } = await (0, _verifytypescriptsetup.verifyTypeScriptSetup)({
|
||||
dir: baseDir,
|
||||
distDir: nextConfig.distDir,
|
||||
typeCheckPreflight: false,
|
||||
tsconfigPath: nextConfig.typescript.tsconfigPath,
|
||||
disableStaticImages: nextConfig.images.disableStaticImages,
|
||||
hasAppDir: !!appDir,
|
||||
hasPagesDir: !!pagesDir,
|
||||
isolatedDevBuild: nextConfig.experimental.isolatedDevBuild,
|
||||
appDir: appDir || undefined,
|
||||
pagesDir: pagesDir || undefined
|
||||
});
|
||||
const isUsingTypeScript = !!typeScriptVersion;
|
||||
const playwrightConfigFilename = isUsingTypeScript ? 'playwright.config.ts' : 'playwright.config.js';
|
||||
(0, _fs.writeFileSync)(_path.default.join(baseDir, playwrightConfigFilename), defaultPlaywrightConfig(isUsingTypeScript));
|
||||
return (0, _utils.printAndExit)(`Successfully generated ${playwrightConfigFilename}. Create your first test and then run \`next experimental-test\`.`, 0);
|
||||
} else {
|
||||
const playwright = (0, _crossspawn.default)(_path.default.join(baseDir, 'node_modules', '.bin', 'playwright'), [
|
||||
'test',
|
||||
...testRunnerArgs
|
||||
], {
|
||||
cwd: baseDir,
|
||||
shell: false,
|
||||
stdio: 'inherit',
|
||||
env: {
|
||||
...process.env
|
||||
}
|
||||
});
|
||||
return new Promise((resolve, reject)=>{
|
||||
playwright.on('close', (c)=>resolve(c));
|
||||
playwright.on('error', (err)=>reject(err));
|
||||
});
|
||||
}
|
||||
}
|
||||
function defaultPlaywrightConfig(typescript) {
|
||||
const comment = `/*
|
||||
* Specify any additional Playwright config options here.
|
||||
* They will be merged with Next.js' default Playwright config.
|
||||
* You can access the default config by importing \`defaultPlaywrightConfig\` from \`'next/experimental/testmode/playwright'\`.
|
||||
*/`;
|
||||
return typescript ? `import { defineConfig } from 'next/experimental/testmode/playwright';\n\n${comment}\nexport default defineConfig({});` : `const { defineConfig } = require('next/experimental/testmode/playwright');\n\n${comment}\nmodule.exports = defineConfig({});`;
|
||||
}
|
||||
|
||||
//# sourceMappingURL=next-test.js.map
|
||||
Reference in New Issue
Block a user