shakapacker 8.0.2 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.eslintignore +1 -0
- data/.eslintrc.fast.js +40 -0
- data/.eslintrc.js +48 -0
- data/.github/STATUS.md +1 -0
- data/.github/workflows/claude-code-review.yml +54 -0
- data/.github/workflows/claude.yml +50 -0
- data/.github/workflows/dummy.yml +9 -4
- data/.github/workflows/generator.yml +32 -10
- data/.github/workflows/node.yml +23 -1
- data/.github/workflows/ruby.yml +33 -2
- data/.github/workflows/test-bundlers.yml +170 -0
- data/.gitignore +20 -0
- data/.husky/pre-commit +2 -0
- data/.npmignore +56 -0
- data/.prettierignore +3 -0
- data/.rubocop.yml +1 -0
- data/.yalcignore +26 -0
- data/CHANGELOG.md +302 -16
- data/CLAUDE.md +29 -0
- data/CONTRIBUTING.md +138 -20
- data/Gemfile.lock +83 -89
- data/README.md +343 -105
- data/Rakefile +39 -4
- data/TODO.md +50 -0
- data/TODO_v9.md +87 -0
- data/bin/export-bundler-config +11 -0
- data/conductor-setup.sh +70 -0
- data/conductor.json +7 -0
- data/docs/cdn_setup.md +379 -0
- data/docs/common-upgrades.md +615 -0
- data/docs/css-modules-export-mode.md +512 -0
- data/docs/deployment.md +62 -9
- data/docs/optional-peer-dependencies.md +198 -0
- data/docs/peer-dependencies.md +60 -0
- data/docs/react.md +6 -14
- data/docs/releasing.md +197 -0
- data/docs/rspack.md +190 -0
- data/docs/rspack_migration_guide.md +305 -0
- data/docs/subresource_integrity.md +54 -0
- data/docs/transpiler-migration.md +209 -0
- data/docs/transpiler-performance.md +179 -0
- data/docs/troubleshooting.md +157 -22
- data/docs/typescript-migration.md +379 -0
- data/docs/typescript.md +99 -0
- data/docs/using_esbuild_loader.md +3 -3
- data/docs/using_swc_loader.md +112 -10
- data/docs/v6_upgrade.md +10 -0
- data/docs/v8_upgrade.md +3 -5
- data/docs/v9_upgrade.md +458 -0
- data/gemfiles/Gemfile-rails.6.0.x +2 -1
- data/gemfiles/Gemfile-rails.6.1.x +1 -1
- data/gemfiles/Gemfile-rails.7.0.x +2 -2
- data/gemfiles/Gemfile-rails.7.1.x +1 -2
- data/gemfiles/Gemfile-rails.7.2.x +11 -0
- data/gemfiles/Gemfile-rails.8.0.x +11 -0
- data/lib/install/bin/export-bundler-config +11 -0
- data/lib/install/bin/shakapacker +4 -6
- data/lib/install/bin/shakapacker-dev-server +1 -1
- data/lib/install/config/rspack/rspack.config.js +6 -0
- data/lib/install/config/rspack/rspack.config.ts +7 -0
- data/lib/install/config/shakapacker.yml +25 -5
- data/lib/install/config/webpack/webpack.config.ts +7 -0
- data/lib/install/package.json +38 -0
- data/lib/install/template.rb +194 -44
- data/lib/shakapacker/bundler_switcher.rb +329 -0
- data/lib/shakapacker/compiler.rb +2 -1
- data/lib/shakapacker/compiler_strategy.rb +2 -2
- data/lib/shakapacker/configuration.rb +173 -2
- data/lib/shakapacker/dev_server_runner.rb +29 -8
- data/lib/shakapacker/digest_strategy.rb +2 -1
- data/lib/shakapacker/doctor.rb +905 -0
- data/lib/shakapacker/helper.rb +64 -16
- data/lib/shakapacker/manifest.rb +10 -3
- data/lib/shakapacker/mtime_strategy.rb +1 -1
- data/lib/shakapacker/railtie.rb +4 -4
- data/lib/shakapacker/rspack_runner.rb +19 -0
- data/lib/shakapacker/runner.rb +159 -10
- data/lib/shakapacker/swc_migrator.rb +384 -0
- data/lib/shakapacker/utils/manager.rb +15 -2
- data/lib/shakapacker/version.rb +1 -1
- data/lib/shakapacker/version_checker.rb +2 -2
- data/lib/shakapacker/webpack_runner.rb +6 -43
- data/lib/shakapacker.rb +22 -11
- data/lib/tasks/shakapacker/doctor.rake +8 -0
- data/lib/tasks/shakapacker/export_bundler_config.rake +72 -0
- data/lib/tasks/shakapacker/install.rake +12 -2
- data/lib/tasks/shakapacker/migrate_to_swc.rake +13 -0
- data/lib/tasks/shakapacker/switch_bundler.rake +82 -0
- data/lib/tasks/shakapacker.rake +2 -0
- data/package/.npmignore +4 -0
- data/package/babel/preset.ts +56 -0
- data/package/config.ts +175 -0
- data/package/configExporter/cli.ts +683 -0
- data/package/configExporter/configDocs.ts +102 -0
- data/package/configExporter/fileWriter.ts +92 -0
- data/package/configExporter/index.ts +5 -0
- data/package/configExporter/types.ts +36 -0
- data/package/configExporter/yamlSerializer.ts +266 -0
- data/package/{dev_server.js → dev_server.ts} +8 -5
- data/package/env.ts +92 -0
- data/package/environments/__type-tests__/rspack-plugin-compatibility.ts +30 -0
- data/package/environments/{base.js → base.ts} +56 -60
- data/package/environments/development.ts +90 -0
- data/package/environments/production.ts +80 -0
- data/package/environments/test.ts +53 -0
- data/package/environments/types.ts +98 -0
- data/package/esbuild/index.ts +42 -0
- data/package/index.d.ts +3 -60
- data/package/index.ts +55 -0
- data/package/loaders.d.ts +28 -0
- data/package/optimization/rspack.ts +36 -0
- data/package/optimization/webpack.ts +57 -0
- data/package/plugins/rspack.ts +103 -0
- data/package/plugins/webpack.ts +62 -0
- data/package/rspack/index.ts +64 -0
- data/package/rules/{babel.js → babel.ts} +2 -2
- data/package/rules/{coffee.js → coffee.ts} +1 -1
- data/package/rules/css.ts +3 -0
- data/package/rules/{erb.js → erb.ts} +1 -1
- data/package/rules/esbuild.ts +10 -0
- data/package/rules/file.ts +40 -0
- data/package/rules/{jscommon.js → jscommon.ts} +4 -4
- data/package/rules/{less.js → less.ts} +4 -4
- data/package/rules/raw.ts +25 -0
- data/package/rules/rspack.ts +176 -0
- data/package/rules/{sass.js → sass.ts} +7 -3
- data/package/rules/{stylus.js → stylus.ts} +4 -8
- data/package/rules/swc.ts +10 -0
- data/package/rules/webpack.ts +16 -0
- data/package/swc/index.ts +56 -0
- data/package/types/README.md +88 -0
- data/package/types/index.ts +61 -0
- data/package/types.ts +108 -0
- data/package/utils/configPath.ts +6 -0
- data/package/utils/debug.ts +49 -0
- data/package/utils/defaultConfigPath.ts +4 -0
- data/package/utils/errorCodes.ts +219 -0
- data/package/utils/errorHelpers.ts +143 -0
- data/package/utils/getStyleRule.ts +64 -0
- data/package/utils/helpers.ts +85 -0
- data/package/utils/{inliningCss.js → inliningCss.ts} +3 -3
- data/package/utils/pathValidation.ts +139 -0
- data/package/utils/requireOrError.ts +15 -0
- data/package/utils/snakeToCamelCase.ts +5 -0
- data/package/utils/typeGuards.ts +342 -0
- data/package/utils/validateDependencies.ts +61 -0
- data/package/webpack-types.d.ts +33 -0
- data/package/webpackDevServerConfig.ts +117 -0
- data/package-lock.json +13047 -0
- data/package.json +154 -18
- data/scripts/remove-use-strict.js +45 -0
- data/scripts/type-check-no-emit.js +27 -0
- data/test/helpers.js +1 -1
- data/test/package/config.test.js +43 -0
- data/test/package/env.test.js +42 -7
- data/test/package/environments/base.test.js +5 -1
- data/test/package/rules/babel.test.js +16 -0
- data/test/package/rules/esbuild.test.js +1 -1
- data/test/package/rules/raw.test.js +40 -7
- data/test/package/rules/swc.test.js +1 -1
- data/test/package/rules/webpack.test.js +35 -0
- data/test/package/staging.test.js +4 -3
- data/test/package/transpiler-defaults.test.js +127 -0
- data/test/peer-dependencies.sh +85 -0
- data/test/scripts/remove-use-strict.test.js +125 -0
- data/test/typescript/build.test.js +118 -0
- data/test/typescript/environments.test.js +107 -0
- data/test/typescript/pathValidation.test.js +142 -0
- data/test/typescript/securityValidation.test.js +182 -0
- data/tools/README.md +124 -0
- data/tools/css-modules-v9-codemod.js +179 -0
- data/tsconfig.eslint.json +16 -0
- data/tsconfig.json +38 -0
- data/yarn.lock +4165 -2706
- metadata +129 -41
- data/package/babel/preset.js +0 -37
- data/package/config.js +0 -54
- data/package/env.js +0 -48
- data/package/environments/development.js +0 -13
- data/package/environments/production.js +0 -88
- data/package/environments/test.js +0 -3
- data/package/esbuild/index.js +0 -40
- data/package/index.js +0 -40
- data/package/rules/css.js +0 -3
- data/package/rules/esbuild.js +0 -10
- data/package/rules/file.js +0 -29
- data/package/rules/index.js +0 -20
- data/package/rules/raw.js +0 -5
- data/package/rules/swc.js +0 -10
- data/package/swc/index.js +0 -50
- data/package/utils/configPath.js +0 -4
- data/package/utils/defaultConfigPath.js +0 -2
- data/package/utils/getStyleRule.js +0 -40
- data/package/utils/helpers.js +0 -58
- data/package/utils/snakeToCamelCase.js +0 -5
- data/package/webpackDevServerConfig.js +0 -71
- data/test/package/rules/index.test.js +0 -16
data/package/rules/file.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const { dirname } = require("path")
|
|
2
|
-
const {
|
|
3
|
-
additional_paths: additionalPaths,
|
|
4
|
-
source_path: sourcePath
|
|
5
|
-
} = require("../config")
|
|
6
|
-
|
|
7
|
-
module.exports = {
|
|
8
|
-
test: /\.(bmp|gif|jpe?g|png|tiff|ico|avif|webp|eot|otf|ttf|woff|woff2|svg)$/,
|
|
9
|
-
exclude: /\.(js|mjs|jsx|ts|tsx)$/,
|
|
10
|
-
type: "asset/resource",
|
|
11
|
-
generator: {
|
|
12
|
-
filename: (pathData) => {
|
|
13
|
-
const path = dirname(pathData.filename)
|
|
14
|
-
const stripPaths = [...additionalPaths, sourcePath]
|
|
15
|
-
|
|
16
|
-
const selectedStripPath = stripPaths.find((includePath) =>
|
|
17
|
-
path.startsWith(includePath)
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
const folders = path
|
|
21
|
-
.replace(`${selectedStripPath}`, "")
|
|
22
|
-
.split("/")
|
|
23
|
-
.filter(Boolean)
|
|
24
|
-
|
|
25
|
-
const foldersWithStatic = ["static", ...folders].join("/")
|
|
26
|
-
return `${foldersWithStatic}/[name]-[hash][ext][query]`
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
data/package/rules/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/* eslint global-require: 0 */
|
|
2
|
-
/* eslint import/no-dynamic-require: 0 */
|
|
3
|
-
|
|
4
|
-
const rules = {
|
|
5
|
-
raw: require("./raw"),
|
|
6
|
-
file: require("./file"),
|
|
7
|
-
css: require("./css"),
|
|
8
|
-
sass: require("./sass"),
|
|
9
|
-
babel: require("./babel"),
|
|
10
|
-
swc: require("./swc"),
|
|
11
|
-
esbuild: require("./esbuild"),
|
|
12
|
-
erb: require("./erb"),
|
|
13
|
-
coffee: require("./coffee"),
|
|
14
|
-
less: require("./less"),
|
|
15
|
-
stylus: require("./stylus")
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
module.exports = Object.keys(rules)
|
|
19
|
-
.filter((key) => !!rules[key])
|
|
20
|
-
.map((key) => rules[key])
|
data/package/rules/raw.js
DELETED
data/package/rules/swc.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const { loaderMatches } = require("../utils/helpers")
|
|
2
|
-
const { getSwcLoaderConfig } = require("../swc")
|
|
3
|
-
const { webpack_loader: webpackLoader } = require("../config")
|
|
4
|
-
const jscommon = require("./jscommon")
|
|
5
|
-
|
|
6
|
-
module.exports = loaderMatches(webpackLoader, "swc", () => ({
|
|
7
|
-
test: /\.(ts|tsx|js|jsx|mjs|coffee)?(\.erb)?$/,
|
|
8
|
-
...jscommon,
|
|
9
|
-
use: ({ resource }) => getSwcLoaderConfig(resource)
|
|
10
|
-
}))
|
data/package/swc/index.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/* eslint global-require: 0 */
|
|
2
|
-
/* eslint import/no-dynamic-require: 0 */
|
|
3
|
-
|
|
4
|
-
const { resolve } = require("path")
|
|
5
|
-
const { existsSync } = require("fs")
|
|
6
|
-
const { merge } = require("webpack-merge")
|
|
7
|
-
|
|
8
|
-
const isJsxFile = (filename) => !!filename.match(/\.(jsx|tsx)?(\.erb)?$/)
|
|
9
|
-
|
|
10
|
-
const isTypescriptFile = (filename) => !!filename.match(/\.(ts|tsx)?(\.erb)?$/)
|
|
11
|
-
|
|
12
|
-
const getCustomConfig = () => {
|
|
13
|
-
const path = resolve("config", "swc.config.js")
|
|
14
|
-
if (existsSync(path)) {
|
|
15
|
-
return require(path)
|
|
16
|
-
}
|
|
17
|
-
return {}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const getSwcLoaderConfig = (filenameToProcess) => {
|
|
21
|
-
const customConfig = getCustomConfig()
|
|
22
|
-
const defaultConfig = {
|
|
23
|
-
loader: require.resolve("swc-loader"),
|
|
24
|
-
options: {
|
|
25
|
-
jsc: {
|
|
26
|
-
parser: {
|
|
27
|
-
dynamicImport: true,
|
|
28
|
-
syntax: isTypescriptFile(filenameToProcess)
|
|
29
|
-
? "typescript"
|
|
30
|
-
: "ecmascript",
|
|
31
|
-
[isTypescriptFile(filenameToProcess) ? "tsx" : "jsx"]:
|
|
32
|
-
isJsxFile(filenameToProcess)
|
|
33
|
-
},
|
|
34
|
-
loose: true
|
|
35
|
-
},
|
|
36
|
-
sourceMaps: true,
|
|
37
|
-
env: {
|
|
38
|
-
coreJs: 3,
|
|
39
|
-
exclude: ["transform-typeof-symbol"],
|
|
40
|
-
mode: "entry"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return merge(defaultConfig, customConfig)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
module.exports = {
|
|
49
|
-
getSwcLoaderConfig
|
|
50
|
-
}
|
data/package/utils/configPath.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/* eslint global-require: 0 */
|
|
2
|
-
const { canProcess, moduleExists } = require("./helpers")
|
|
3
|
-
const inliningCss = require("./inliningCss")
|
|
4
|
-
|
|
5
|
-
const getStyleRule = (test, preprocessors = []) => {
|
|
6
|
-
if (moduleExists("css-loader")) {
|
|
7
|
-
const tryPostcss = () =>
|
|
8
|
-
canProcess("postcss-loader", (loaderPath) => ({
|
|
9
|
-
loader: loaderPath,
|
|
10
|
-
options: { sourceMap: true }
|
|
11
|
-
}))
|
|
12
|
-
|
|
13
|
-
// style-loader is required when using css modules with HMR on the webpack-dev-server
|
|
14
|
-
|
|
15
|
-
const use = [
|
|
16
|
-
inliningCss ? "style-loader" : require("mini-css-extract-plugin").loader,
|
|
17
|
-
{
|
|
18
|
-
loader: require.resolve("css-loader"),
|
|
19
|
-
options: {
|
|
20
|
-
sourceMap: true,
|
|
21
|
-
importLoaders: 2,
|
|
22
|
-
modules: {
|
|
23
|
-
auto: true
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
tryPostcss(),
|
|
28
|
-
...preprocessors
|
|
29
|
-
].filter(Boolean)
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
test,
|
|
33
|
-
use
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return null
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
module.exports = getStyleRule
|
data/package/utils/helpers.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
const isBoolean = (str) => /^true/.test(str) || /^false/.test(str)
|
|
2
|
-
|
|
3
|
-
const ensureTrailingSlash = (path) => (path.endsWith("/") ? path : `${path}/`)
|
|
4
|
-
|
|
5
|
-
const resolvedPath = (packageName) => {
|
|
6
|
-
try {
|
|
7
|
-
return require.resolve(packageName)
|
|
8
|
-
} catch (e) {
|
|
9
|
-
if (e.code !== "MODULE_NOT_FOUND") {
|
|
10
|
-
throw e
|
|
11
|
-
}
|
|
12
|
-
return null
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const moduleExists = (packageName) => !!resolvedPath(packageName)
|
|
17
|
-
|
|
18
|
-
const canProcess = (rule, fn) => {
|
|
19
|
-
const modulePath = resolvedPath(rule)
|
|
20
|
-
|
|
21
|
-
if (modulePath) {
|
|
22
|
-
return fn(modulePath)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return null
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const loaderMatches = (configLoader, loaderToCheck, fn) => {
|
|
29
|
-
if (configLoader !== loaderToCheck) {
|
|
30
|
-
return null
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const loaderName = `${configLoader}-loader`
|
|
34
|
-
|
|
35
|
-
if (!moduleExists(loaderName)) {
|
|
36
|
-
throw new Error(
|
|
37
|
-
`Your Shakapacker config specified using ${configLoader}, but ${loaderName} package is not installed. Please install ${loaderName} first.`
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return fn()
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const packageMajorVersion = (packageName) => {
|
|
45
|
-
// eslint-disable-next-line import/no-dynamic-require
|
|
46
|
-
const packageJsonPath = require.resolve(`${packageName}/package.json`)
|
|
47
|
-
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
48
|
-
return require(packageJsonPath).version.match(/^\d+/)[0]
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
module.exports = {
|
|
52
|
-
isBoolean,
|
|
53
|
-
ensureTrailingSlash,
|
|
54
|
-
canProcess,
|
|
55
|
-
moduleExists,
|
|
56
|
-
loaderMatches,
|
|
57
|
-
packageMajorVersion
|
|
58
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
const shakapackerDevServerYamlConfig = require("./dev_server")
|
|
2
|
-
const snakeToCamelCase = require("./utils/snakeToCamelCase")
|
|
3
|
-
const { outputPath: contentBase, publicPath } = require("./config")
|
|
4
|
-
|
|
5
|
-
const webpackDevServerMappedKeys = new Set([
|
|
6
|
-
// client, server, liveReload, devMiddleware are handled separately
|
|
7
|
-
"allowedHosts",
|
|
8
|
-
"bonjour",
|
|
9
|
-
"compress",
|
|
10
|
-
"headers",
|
|
11
|
-
"historyApiFallback",
|
|
12
|
-
"host",
|
|
13
|
-
"hot",
|
|
14
|
-
"http2",
|
|
15
|
-
"https",
|
|
16
|
-
"ipc",
|
|
17
|
-
"magicHtml",
|
|
18
|
-
"onAfterSetupMiddleware",
|
|
19
|
-
"onBeforeSetupMiddleware",
|
|
20
|
-
"open",
|
|
21
|
-
"port",
|
|
22
|
-
"proxy",
|
|
23
|
-
"server",
|
|
24
|
-
"setupExitSignals",
|
|
25
|
-
"setupMiddlewares",
|
|
26
|
-
"watchFiles",
|
|
27
|
-
"webSocketServer"
|
|
28
|
-
])
|
|
29
|
-
|
|
30
|
-
function createDevServerConfig() {
|
|
31
|
-
const devServerYamlConfig = { ...shakapackerDevServerYamlConfig }
|
|
32
|
-
const liveReload =
|
|
33
|
-
devServerYamlConfig.live_reload !== undefined
|
|
34
|
-
? devServerYamlConfig.live_reload
|
|
35
|
-
: !devServerYamlConfig.hmr
|
|
36
|
-
delete devServerYamlConfig.live_reload
|
|
37
|
-
|
|
38
|
-
const config = {
|
|
39
|
-
devMiddleware: {
|
|
40
|
-
publicPath
|
|
41
|
-
},
|
|
42
|
-
liveReload,
|
|
43
|
-
historyApiFallback: {
|
|
44
|
-
disableDotRule: true
|
|
45
|
-
},
|
|
46
|
-
static: {
|
|
47
|
-
publicPath: contentBase
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (devServerYamlConfig.static) {
|
|
52
|
-
config.static = { ...config.static, ...devServerYamlConfig.static }
|
|
53
|
-
delete devServerYamlConfig.static
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (devServerYamlConfig.client) {
|
|
57
|
-
config.client = devServerYamlConfig.client
|
|
58
|
-
delete devServerYamlConfig.client
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
Object.keys(devServerYamlConfig).forEach((yamlKey) => {
|
|
62
|
-
const camelYamlKey = snakeToCamelCase(yamlKey)
|
|
63
|
-
if (webpackDevServerMappedKeys.has(camelYamlKey)) {
|
|
64
|
-
config[camelYamlKey] = devServerYamlConfig[yamlKey]
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
return config
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
module.exports = createDevServerConfig
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const rules = require("../../../package/rules/index")
|
|
2
|
-
|
|
3
|
-
jest.mock("../../../package/utils/helpers", () => {
|
|
4
|
-
const original = jest.requireActual("../../../package/utils/helpers")
|
|
5
|
-
const moduleExists = () => false
|
|
6
|
-
return {
|
|
7
|
-
...original,
|
|
8
|
-
moduleExists
|
|
9
|
-
}
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
describe("index", () => {
|
|
13
|
-
test("rule tests are regexes", () => {
|
|
14
|
-
rules.forEach((rule) => expect(rule.test instanceof RegExp).toBe(true))
|
|
15
|
-
})
|
|
16
|
-
})
|