fix npm ci

This commit is contained in:
Rene Haas
2022-10-14 14:39:31 +02:00
parent d81692b53b
commit b61bbe5f03
23 changed files with 130 additions and 7564 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
import glob from 'fast-glob'; import glob from 'fast-glob';
import { esbuild } from '@~local-docs/esbuild'; import { esbuild } from '@~local/esbuild';
const processArgs = process.argv.slice(2); const processArgs = process.argv.slice(2);
const watch = processArgs.includes('-w'); const watch = processArgs.includes('-w');
-7418
View File
File diff suppressed because it is too large Load Diff
-2
View File
@@ -11,8 +11,6 @@
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@~local-docs/esbuild": "file:./local/esbuild",
"@~local-docs/tailwind": "file:./local/tailwind",
"@types/node": "18.7.20", "@types/node": "18.7.20",
"@types/react": "18.0.21", "@types/react": "18.0.21",
"@types/react-dom": "18.0.6", "@types/react-dom": "18.0.6",
+1 -1
View File
@@ -1,6 +1,6 @@
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
// eslint-disable-next-line global-require // eslint-disable-next-line global-require
presets: [require('@~local-docs/tailwind')], presets: [require('@~local/tailwind')],
content: ['**/*.{js,ts,jsx,tsx}'], content: ['**/*.{js,ts,jsx,tsx}'],
}; };
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "browser-testing",
"version": "0.0.0", "version": "0.0.0",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "@~local/config",
"exports": { "exports": {
"./resolve": "./src/resolve.json", "./resolve": "./src/resolve.json",
"./playwright": "./src/playwright.js", "./playwright": "./src/playwright.js",
@@ -38,7 +38,6 @@ export const esbuild = async (options = {}, { tailwindConfig = './tailwind.confi
esbuildPluginStyles({ esbuildPluginStyles({
sassFilesRegex: /\.s[ac]ss$/, sassFilesRegex: /\.s[ac]ss$/,
cssFilesRegex: /\.css$/, cssFilesRegex: /\.css$/,
cssModulesRegex: /\.module\.\S+$/,
}), }),
esbuildPluginTailwind({ esbuildPluginTailwind({
tailwindConfig, tailwindConfig,
@@ -0,0 +1,4 @@
const isExtendedLengthPath = /^\\\\\?\\/;
export const normalizePathSlashes = (path) =>
isExtendedLengthPath.test(path) ? path : path.replace(/\\/g, '/');
@@ -3,97 +3,32 @@ import path from 'node:path';
import crypto from 'node:crypto'; import crypto from 'node:crypto';
import sass from 'sass'; import sass from 'sass';
import esbuild from 'esbuild'; import esbuild from 'esbuild';
import { writeOnlyChanges } from '../writeOnlyChanges.js'; import postcss from 'postcss';
import autoprefixer from 'autoprefixer';
const externalRegex = /node_modules/; import { normalizePathSlashes } from '../normalizePathSlashes.js';
const isExtendedLengthPath = /^\\\\\?\\/;
const normalizePathSlashes = (pathToNormalize) =>
isExtendedLengthPath.test(pathToNormalize)
? pathToNormalize
: pathToNormalize.replace(/\\/g, '/');
const getHash = (content) => crypto.createHash('sha1').update(content).digest('hex'); const getHash = (content) => crypto.createHash('sha1').update(content).digest('hex');
export const esbuildPluginStyles = (options) => { export const esbuildPluginStyles = (options) => {
const changesMap = new Map();
const { const {
cssBuildOptions = {}, cssBuildOptions = {},
cssModulesRegex = /\.module\.\S+$/, cssModulesRegex = null,
sassFilesRegex = /\.s[ac]ss$/, sassFilesRegex = /\.s[ac]ss$/,
cssFilesRegex = /\.css$/, include = /\.(css|scss|sass)$/,
} = options; } = options;
const replaceExtensionRegex = /\.[^.]*$/;
const sassCache = new Map(); const sassCache = new Map();
const postcssCache = new Map();
const esbuildCache = new Map(); const esbuildCache = new Map();
const replaceExtension = (filePath, replacement = '') => { const replaceExtension = (filePath, replacement = '') =>
const replacementRegex = /\.[^.]*$/; filePath.replace(
return filePath.replace( replaceExtensionRegex,
replacementRegex,
typeof replacement === 'function' typeof replacement === 'function'
? replacement((filePath.match(replacementRegex) || [])[0] || '') ? replacement((filePath.match(replaceExtensionRegex) || [])[0] || '')
: replacement : replacement
); );
};
const resolveFile = async (build, onResolveArgs) => {
const { resolveDir, importer } = onResolveArgs;
const { path: resolvedPath } = await build.resolve(onResolveArgs.path, {
resolveDir,
importer,
kind: 'entry-point',
namespace: 'resolve-pls',
});
const external = externalRegex.test(resolvedPath);
return [resolvedPath, external];
};
const resolveProcessedCss = (args) => ({
path: args.path,
namespace: 'css-processed',
pluginData: args.pluginData,
});
const setupSassResolve = (build) => {
build.onResolve({ filter: sassFilesRegex, namespace: 'file' }, async (args) => {
const [resolvedPath, external] = await resolveFile(build, args);
return external
? {
path: args.path,
external: true,
}
: {
path: cssModulesRegex.test(resolvedPath)
? `${resolvedPath}.module.css`
: `${resolvedPath}.css`,
namespace: 'sass',
pluginData: {
resolvedPath,
},
};
});
};
const setupCssResolve = (build) => {
build.onResolve({ filter: cssFilesRegex, namespace: 'file' }, async (args) => {
const [resolvedPath, external] = await resolveFile(build, args);
return external
? {
path: args.path,
external: true,
}
: {
path: resolvedPath,
namespace: 'css',
pluginData: {
resolvedPath,
},
};
});
};
const transpileSass = (css, filePath) => { const transpileSass = (css, filePath) => {
const currHash = getHash(css); const currHash = getHash(css);
@@ -109,6 +44,25 @@ export const esbuildPluginStyles = (options) => {
return sassCache.get(filePath)[1] || css; return sassCache.get(filePath)[1] || css;
}; };
const transpilePostCss = async (source, filePath) => {
const currHash = getHash(source);
const [cacheHash] = postcssCache.get(filePath) || [];
if (currHash !== cacheHash) {
let cssModulesJson;
const plugins = [autoprefixer()].filter(Boolean);
try {
const { css } = await postcss(plugins).process(source, {
from: filePath,
});
const result = [css, cssModulesJson];
postcssCache.set(filePath, [currHash, result]);
} catch {}
}
return postcssCache.get(filePath)[1] || [source];
};
const esbuildCss = async (initialBuildOptions, stdin, filePath) => { const esbuildCss = async (initialBuildOptions, stdin, filePath) => {
const source = stdin.contents; const source = stdin.contents;
const currHash = getHash(source); const currHash = getHash(source);
@@ -166,13 +120,18 @@ export const esbuildPluginStyles = (options) => {
async setup(build) { async setup(build) {
const initBuildOptions = build.initialOptions; const initBuildOptions = build.initialOptions;
const assetOutputFiles = new Set();
setupSassResolve(build);
setupCssResolve(build);
// move newly crete stub modules to 'css-processed' namespace // move newly crete stub modules to 'css-processed' namespace
build.onResolve({ filter: cssFilesRegex, namespace: 'sass' }, resolveProcessedCss); build.onResolve({ filter: /.*/ }, (args) => {
build.onResolve({ filter: cssFilesRegex, namespace: 'css' }, resolveProcessedCss); if (args.pluginData?.contents) {
return {
path: args.path,
namespace: 'css-processed',
pluginData: args.pluginData,
};
}
});
// resolve asset imports for generated css files // resolve asset imports for generated css files
build.onResolve({ filter: /.*/, namespace: 'css-processed' }, async (args) => build.onResolve({ filter: /.*/, namespace: 'css-processed' }, async (args) =>
@@ -183,11 +142,12 @@ export const esbuildPluginStyles = (options) => {
}) })
); );
build.onLoad({ filter: cssFilesRegex }, async (args) => { build.onLoad({ filter: include }, async (args) => {
const { namespace, pluginData } = args; const { namespace, pluginData, path: filePath } = args;
if (namespace === 'css-processed') { if (namespace === 'css-processed') {
const { contents } = pluginData; const { contents } = pluginData;
return { return {
contents, contents,
loader: 'copy', loader: 'copy',
@@ -195,11 +155,17 @@ export const esbuildPluginStyles = (options) => {
}; };
} }
const { resolvedPath } = pluginData; const isSass = sassFilesRegex.test(filePath);
const fileName = path.basename(resolvedPath);
const resolveDir = path.dirname(resolvedPath); const isCssMdoule = cssModulesRegex && cssModulesRegex.test(filePath);
const css = await fs.promises.readFile(resolvedPath); const fileName = path.basename(filePath);
const source = namespace === 'sass' ? transpileSass(css, resolvedPath) : css; const resolveDir = path.dirname(filePath);
const css = await fs.promises.readFile(filePath);
const [source, cssModulesJson] = await transpilePostCss(
isSass ? transpileSass(css, filePath) : css,
filePath,
isCssMdoule
);
const { outputFiles, entryFile, watchFiles, warnings, errors } = await esbuildCss( const { outputFiles, entryFile, watchFiles, warnings, errors } = await esbuildCss(
initBuildOptions, initBuildOptions,
@@ -209,7 +175,7 @@ export const esbuildPluginStyles = (options) => {
resolveDir, resolveDir,
loader: 'css', loader: 'css',
}, },
resolvedPath filePath
); );
if (errors) { if (errors) {
@@ -218,15 +184,33 @@ export const esbuildPluginStyles = (options) => {
}; };
} }
const entryFilePath = path.resolve( const entryFilePath = normalizePathSlashes(
path.dirname(entryFile.path), path.resolve(
`${path.basename(replaceExtension(args.path))}${path path.dirname(entryFile.path),
.basename(entryFile.path) `${path.basename(replaceExtension(args.path, '.css'))}`
.replace('stdin', '')}` )
); );
const adaptedOutputFiles = outputFiles.filter((file) => file !== entryFile);
await writeOnlyChanges(adaptedOutputFiles, changesMap); outputFiles.forEach((file) => {
if (file !== entryFile) {
assetOutputFiles.add(file);
}
});
if (isCssMdoule) {
return {
contents: `
export { default as file } from ${JSON.stringify(entryFilePath)};
export default ${JSON.stringify(cssModulesJson)};
`,
resolveDir,
watchFiles,
warnings,
pluginData: {
contents: entryFile.contents,
},
};
}
return { return {
contents: `export { default } from ${JSON.stringify(entryFilePath)};`, contents: `export { default } from ${JSON.stringify(entryFilePath)};`,
@@ -238,6 +222,13 @@ export const esbuildPluginStyles = (options) => {
}, },
}; };
}); });
build.onEnd((result) => {
const { outputFiles } = result;
outputFiles.push(...Array.from(assetOutputFiles));
assetOutputFiles.clear();
});
}, },
}; };
}; };
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "@~local/full-coverage",
"bin": { "bin": {
"full-coverage": "./bin/generateFullCoverage.js" "full-coverage": "./bin/generateFullCoverage.js"
}, },
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "@~local/playwright-tooling",
"main": "./src/index.js", "main": "./src/index.js",
"bin": { "bin": {
"playwright-merge-coverage": "./bin/mergeCoverage.js" "playwright-merge-coverage": "./bin/mergeCoverage.js"
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "@~local/rollup",
"exports": { "exports": {
".": "./src/createRollupConfig.js", ".": "./src/createRollupConfig.js",
"./playwright": "./src/playwright/createPlaywrightRollupConfig.js" "./playwright": "./src/playwright/createPlaywrightRollupConfig.js"
-1
View File
@@ -1,6 +1,5 @@
{ {
"private": true, "private": true,
"name": "@~local/tsconfig",
"main": "./tsconfig.json", "main": "./tsconfig.json",
"version": "0.0.0" "version": "0.0.0"
} }
+34 -37
View File
@@ -6,15 +6,16 @@
"": { "": {
"workspaces": [ "workspaces": [
"packages/*", "packages/*",
"docs/*", "docs/*"
"local/*"
], ],
"devDependencies": { "devDependencies": {
"@~local/browser-testing": "file:./local/browser-testing", "@~local/browser-testing": "file:./local/browser-testing",
"@~local/config": "file:./local/config", "@~local/config": "file:./local/config",
"@~local/esbuild": "file:./local/esbuild",
"@~local/full-coverage": "file:./local/full-coverage", "@~local/full-coverage": "file:./local/full-coverage",
"@~local/playwright-tooling": "file:./local/playwright-tooling", "@~local/playwright-tooling": "file:./local/playwright-tooling",
"@~local/rollup": "file:./local/rollup", "@~local/rollup": "file:./local/rollup",
"@~local/tailwind": "file:./local/tailwind",
"@~local/tsconfig": "file:./local/tsconfig", "@~local/tsconfig": "file:./local/tsconfig",
"@babel/core": "^7.18.2", "@babel/core": "^7.18.2",
"@babel/plugin-transform-runtime": "^7.18.2", "@babel/plugin-transform-runtime": "^7.18.2",
@@ -83,8 +84,6 @@
"react-dom": "18.2.0" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@~local-docs/esbuild": "file:./local/esbuild",
"@~local-docs/tailwind": "file:./local/tailwind",
"@types/node": "18.7.20", "@types/node": "18.7.20",
"@types/react": "18.0.21", "@types/react": "18.0.21",
"@types/react-dom": "18.0.6", "@types/react-dom": "18.0.6",
@@ -112,51 +111,50 @@
} }
}, },
"docs/v2/local/esbuild": { "docs/v2/local/esbuild": {
"dev": true "extraneous": true
}, },
"docs/v2/local/tailwind": { "docs/v2/local/tailwind": {
"dev": true "extraneous": true
}, },
"docs/v2/local/tsconfig": { "docs/v2/local/tsconfig": {
"extraneous": true "extraneous": true
}, },
"local/browser-testing": { "local/browser-testing": {
"version": "0.0.0", "version": "0.0.0",
"dev": true,
"hasInstallScript": true "hasInstallScript": true
}, },
"local/config": { "local/config": {
"name": "@~local/config", "version": "0.0.0",
"version": "0.0.0" "dev": true
},
"local/esbuild": {
"dev": true
}, },
"local/full-coverage": { "local/full-coverage": {
"name": "@~local/full-coverage",
"version": "0.0.0", "version": "0.0.0",
"dev": true,
"bin": { "bin": {
"full-coverage": "bin/generateFullCoverage.js" "full-coverage": "bin/generateFullCoverage.js"
} }
}, },
"local/playwright-tooling": { "local/playwright-tooling": {
"name": "@~local/playwright-tooling",
"version": "0.0.0", "version": "0.0.0",
"dev": true,
"bin": { "bin": {
"playwright-merge-coverage": "bin/mergeCoverage.js" "playwright-merge-coverage": "bin/mergeCoverage.js"
} }
}, },
"local/rollup": { "local/rollup": {
"name": "@~local/rollup", "version": "0.0.0",
"version": "0.0.0" "dev": true
},
"local/tailwind": {
"dev": true
}, },
"local/tsconfig": { "local/tsconfig": {
"name": "@~local/tsconfig", "version": "0.0.0",
"version": "0.0.0" "dev": true
},
"node_modules/@~local-docs/esbuild": {
"resolved": "docs/v2/local/esbuild",
"link": true
},
"node_modules/@~local-docs/tailwind": {
"resolved": "docs/v2/local/tailwind",
"link": true
}, },
"node_modules/@~local/browser-testing": { "node_modules/@~local/browser-testing": {
"resolved": "local/browser-testing", "resolved": "local/browser-testing",
@@ -166,6 +164,10 @@
"resolved": "local/config", "resolved": "local/config",
"link": true "link": true
}, },
"node_modules/@~local/esbuild": {
"resolved": "local/esbuild",
"link": true
},
"node_modules/@~local/full-coverage": { "node_modules/@~local/full-coverage": {
"resolved": "local/full-coverage", "resolved": "local/full-coverage",
"link": true "link": true
@@ -178,6 +180,10 @@
"resolved": "local/rollup", "resolved": "local/rollup",
"link": true "link": true
}, },
"node_modules/@~local/tailwind": {
"resolved": "local/tailwind",
"link": true
},
"node_modules/@~local/tsconfig": { "node_modules/@~local/tsconfig": {
"resolved": "local/tsconfig", "resolved": "local/tsconfig",
"link": true "link": true
@@ -4278,10 +4284,6 @@
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
"dev": true "dev": true
}, },
"node_modules/browser-testing": {
"resolved": "local/browser-testing",
"link": true
},
"node_modules/browserslist": { "node_modules/browserslist": {
"version": "4.21.0", "version": "4.21.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz",
@@ -13040,18 +13042,15 @@
} }
}, },
"dependencies": { "dependencies": {
"@~local-docs/esbuild": {
"version": "file:docs/v2/local/esbuild"
},
"@~local-docs/tailwind": {
"version": "file:docs/v2/local/tailwind"
},
"@~local/browser-testing": { "@~local/browser-testing": {
"version": "file:local/browser-testing" "version": "file:local/browser-testing"
}, },
"@~local/config": { "@~local/config": {
"version": "file:local/config" "version": "file:local/config"
}, },
"@~local/esbuild": {
"version": "file:local/esbuild"
},
"@~local/full-coverage": { "@~local/full-coverage": {
"version": "file:local/full-coverage" "version": "file:local/full-coverage"
}, },
@@ -13061,6 +13060,9 @@
"@~local/rollup": { "@~local/rollup": {
"version": "file:local/rollup" "version": "file:local/rollup"
}, },
"@~local/tailwind": {
"version": "file:local/tailwind"
},
"@~local/tsconfig": { "@~local/tsconfig": {
"version": "file:local/tsconfig" "version": "file:local/tsconfig"
}, },
@@ -16057,9 +16059,6 @@
"integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
"dev": true "dev": true
}, },
"browser-testing": {
"version": "file:local/browser-testing"
},
"browserslist": { "browserslist": {
"version": "4.21.0", "version": "4.21.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz",
@@ -22064,8 +22063,6 @@
"v2": { "v2": {
"version": "file:docs/v2", "version": "file:docs/v2",
"requires": { "requires": {
"@~local-docs/esbuild": "file:local/esbuild",
"@~local-docs/tailwind": "file:local/tailwind",
"@types/node": "18.7.20", "@types/node": "18.7.20",
"@types/react": "18.0.21", "@types/react": "18.0.21",
"@types/react-dom": "18.0.6", "@types/react-dom": "18.0.6",
+3 -2
View File
@@ -2,15 +2,16 @@
"private": true, "private": true,
"workspaces": [ "workspaces": [
"packages/*", "packages/*",
"docs/*", "docs/*"
"local/*"
], ],
"devDependencies": { "devDependencies": {
"@~local/browser-testing": "file:./local/browser-testing", "@~local/browser-testing": "file:./local/browser-testing",
"@~local/config": "file:./local/config", "@~local/config": "file:./local/config",
"@~local/esbuild": "file:./local/esbuild",
"@~local/full-coverage": "file:./local/full-coverage", "@~local/full-coverage": "file:./local/full-coverage",
"@~local/playwright-tooling": "file:./local/playwright-tooling", "@~local/playwright-tooling": "file:./local/playwright-tooling",
"@~local/rollup": "file:./local/rollup", "@~local/rollup": "file:./local/rollup",
"@~local/tailwind": "file:./local/tailwind",
"@~local/tsconfig": "file:./local/tsconfig", "@~local/tsconfig": "file:./local/tsconfig",
"@babel/core": "^7.18.2", "@babel/core": "^7.18.2",
"@babel/plugin-transform-runtime": "^7.18.2", "@babel/plugin-transform-runtime": "^7.18.2",