@jpp-toolkit/rspack-config 0.0.4 → 0.0.5

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/index.mjs CHANGED
@@ -120,7 +120,12 @@ function createFivemRspackConfig(options = {}) {
120
120
  const resourceName = options.resourceName ?? path.basename(cwd);
121
121
  const configs = [];
122
122
  for (const entryType of Object.values(FivemEntryType)) {
123
- const entry = findFirstExistingPath([path.resolve(cwd, `src/${entryType}/index.ts`), path.resolve(cwd, `src/${entryType}.ts`)]);
123
+ const entry = findFirstExistingPath([
124
+ path.resolve(cwd, `src/${entryType}/index.tsx`),
125
+ path.resolve(cwd, `src/${entryType}/index.ts`),
126
+ path.resolve(cwd, `src/${entryType}.tsx`),
127
+ path.resolve(cwd, `src/${entryType}.ts`)
128
+ ]);
124
129
  if (!entry) continue;
125
130
  const config = buildConfig({
126
131
  cwd,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["configs: RspackOptions[]"],"sources":["../src/enums/environment.ts","../src/enums/fivem-entry-type.ts","../src/utils/find-first-existing-path.ts","../src/create-fivem-rspack-config.ts"],"sourcesContent":["export const Environment = {\n DEVELOPMENT: 'development',\n PRODUCTION: 'production',\n} as const;\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n","export const FivemEntryType = {\n CLIENT: 'client',\n SERVER: 'server',\n SHARED: 'shared',\n UI: 'ui',\n} as const;\nexport type FivemEntryType = (typeof FivemEntryType)[keyof typeof FivemEntryType];\n","import { existsSync } from 'node:fs';\n\nexport function findFirstExistingPath(possiblePaths: string[]): string | undefined {\n for (const p of possiblePaths) if (existsSync(p)) return p;\n return undefined;\n}\n","import path from 'node:path';\n\nimport { rspack } from '@rspack/core';\nimport type { RspackOptions } from '@rspack/core';\n\nimport { Environment, FivemEntryType } from './enums';\nimport { findFirstExistingPath } from './utils/find-first-existing-path';\n\ntype BuildConfigOptions = {\n readonly cwd: string;\n readonly entry: string;\n readonly entryType: FivemEntryType;\n readonly resourceName: string;\n readonly environment: Environment;\n};\n\nfunction buildConfig(options: BuildConfigOptions): RspackOptions {\n const { cwd, entry, entryType, resourceName, environment } = options;\n\n const htmlTemplateFile = findFirstExistingPath([\n path.resolve(cwd, `src/${entryType}/index.html`),\n path.resolve(cwd, `src/${entryType}.html`),\n ]);\n const publicPath = `https://cfx-nui-${resourceName}/dist/${entryType}/`;\n\n const isProduction = environment === 'production';\n const isUi = entryType === FivemEntryType.UI;\n\n const config: RspackOptions = {\n name: `fivem-${entryType}`,\n\n context: cwd,\n\n target: isUi ? 'web' : 'node16',\n devtool: false,\n mode: environment,\n\n entry,\n\n output: {\n clean: true,\n path: path.resolve(cwd, 'dist', entryType),\n ...(isUi ? { publicPath } : {}),\n },\n\n optimization: {\n minimize: isProduction,\n },\n\n resolve: {\n extensions: ['.js', '.jsx', '.ts', '.tsx', '.json', '.wasm'],\n extensionAlias: {\n '.js': ['.ts', '.js'],\n '.cjs': ['.cts', '.cjs'],\n '.mjs': ['.mts', '.mjs'],\n },\n tsConfig: path.resolve(cwd, 'tsconfig.json'),\n },\n\n node: {\n global: isUi,\n __filename: isUi,\n __dirname: isUi,\n },\n\n externalsPresets: {\n node: !isUi,\n web: isUi,\n },\n\n module: {\n rules: [\n {\n test: /\\.(?:ts|tsx|cts|mts)$/iu,\n type: 'javascript/auto',\n exclude: [/dist\\//u, /node_modules\\//u],\n loader: 'builtin:swc-loader',\n options: {\n minify: isProduction,\n module: { type: 'nodenext' },\n jsc: {\n target: isUi ? 'es5' : 'es2021',\n parser: {\n syntax: 'typescript',\n tsx: true,\n },\n transform: {\n react: { runtime: 'automatic' },\n useDefineForClassFields: true,\n },\n keepClassNames: true,\n externalHelpers: false,\n },\n },\n },\n ...(isUi ?\n [\n {\n test: /\\.(?:jpe?g|png|gif|svg)$/iu,\n type: 'asset/resource',\n },\n ]\n : []),\n ],\n },\n\n ...(isUi ? { experiments: { css: true } } : {}),\n\n ...(isUi && htmlTemplateFile ?\n { plugins: [new rspack.HtmlRspackPlugin({ template: htmlTemplateFile, publicPath })] }\n : {}),\n\n watchOptions: {\n aggregateTimeout: 200,\n ignored: [\n '**/.git',\n '**/.turbo',\n '**/coverage',\n '**/dist',\n '**/generated',\n '**/old',\n '**/tmp',\n ],\n },\n };\n\n return config;\n}\n\nexport type CreateFivemRspackConfigOptions = {\n readonly resourceName?: string | undefined;\n readonly environment?: Environment | undefined;\n readonly cwd?: string | undefined;\n};\n\nexport function createFivemRspackConfig(\n options: CreateFivemRspackConfigOptions = {},\n): RspackOptions[] {\n const environment =\n options.environment\n ?? (process.env.NODE_ENV === Environment.PRODUCTION ?\n Environment.PRODUCTION\n : Environment.DEVELOPMENT);\n const cwd = options.cwd ?? process.cwd();\n const resourceName = options.resourceName ?? path.basename(cwd);\n\n const configs: RspackOptions[] = [];\n\n for (const entryType of Object.values(FivemEntryType)) {\n const entry = findFirstExistingPath([\n path.resolve(cwd, `src/${entryType}/index.ts`),\n path.resolve(cwd, `src/${entryType}.ts`),\n ]);\n\n if (!entry) continue;\n\n const config = buildConfig({ cwd, entry, entryType, environment, resourceName });\n configs.push(config);\n }\n\n if (configs.length === 0) throw new Error('No valid FiveM resource entries found.');\n\n return configs;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["configs: RspackOptions[]"],"sources":["../src/enums/environment.ts","../src/enums/fivem-entry-type.ts","../src/utils/find-first-existing-path.ts","../src/create-fivem-rspack-config.ts"],"sourcesContent":["export const Environment = {\n DEVELOPMENT: 'development',\n PRODUCTION: 'production',\n} as const;\nexport type Environment = (typeof Environment)[keyof typeof Environment];\n","export const FivemEntryType = {\n CLIENT: 'client',\n SERVER: 'server',\n SHARED: 'shared',\n UI: 'ui',\n} as const;\nexport type FivemEntryType = (typeof FivemEntryType)[keyof typeof FivemEntryType];\n","import { existsSync } from 'node:fs';\n\nexport function findFirstExistingPath(possiblePaths: string[]): string | undefined {\n for (const p of possiblePaths) if (existsSync(p)) return p;\n return undefined;\n}\n","import path from 'node:path';\n\nimport { rspack } from '@rspack/core';\nimport type { RspackOptions } from '@rspack/core';\n\nimport { Environment, FivemEntryType } from './enums';\nimport { findFirstExistingPath } from './utils/find-first-existing-path';\n\ntype BuildConfigOptions = {\n readonly cwd: string;\n readonly entry: string;\n readonly entryType: FivemEntryType;\n readonly resourceName: string;\n readonly environment: Environment;\n};\n\nfunction buildConfig(options: BuildConfigOptions): RspackOptions {\n const { cwd, entry, entryType, resourceName, environment } = options;\n\n const htmlTemplateFile = findFirstExistingPath([\n path.resolve(cwd, `src/${entryType}/index.html`),\n path.resolve(cwd, `src/${entryType}.html`),\n ]);\n const publicPath = `https://cfx-nui-${resourceName}/dist/${entryType}/`;\n\n const isProduction = environment === 'production';\n const isUi = entryType === FivemEntryType.UI;\n\n const config: RspackOptions = {\n name: `fivem-${entryType}`,\n\n context: cwd,\n\n target: isUi ? 'web' : 'node16',\n devtool: false,\n mode: environment,\n\n entry,\n\n output: {\n clean: true,\n path: path.resolve(cwd, 'dist', entryType),\n ...(isUi ? { publicPath } : {}),\n },\n\n optimization: {\n minimize: isProduction,\n },\n\n resolve: {\n extensions: ['.js', '.jsx', '.ts', '.tsx', '.json', '.wasm'],\n extensionAlias: {\n '.js': ['.ts', '.js'],\n '.cjs': ['.cts', '.cjs'],\n '.mjs': ['.mts', '.mjs'],\n },\n tsConfig: path.resolve(cwd, 'tsconfig.json'),\n },\n\n node: {\n global: isUi,\n __filename: isUi,\n __dirname: isUi,\n },\n\n externalsPresets: {\n node: !isUi,\n web: isUi,\n },\n\n module: {\n rules: [\n {\n test: /\\.(?:ts|tsx|cts|mts)$/iu,\n type: 'javascript/auto',\n exclude: [/dist\\//u, /node_modules\\//u],\n loader: 'builtin:swc-loader',\n options: {\n minify: isProduction,\n module: { type: 'nodenext' },\n jsc: {\n target: isUi ? 'es5' : 'es2021',\n parser: {\n syntax: 'typescript',\n tsx: true,\n },\n transform: {\n react: { runtime: 'automatic' },\n useDefineForClassFields: true,\n },\n keepClassNames: true,\n externalHelpers: false,\n },\n },\n },\n ...(isUi ?\n [\n {\n test: /\\.(?:jpe?g|png|gif|svg)$/iu,\n type: 'asset/resource',\n },\n ]\n : []),\n ],\n },\n\n ...(isUi ? { experiments: { css: true } } : {}),\n\n ...(isUi && htmlTemplateFile ?\n { plugins: [new rspack.HtmlRspackPlugin({ template: htmlTemplateFile, publicPath })] }\n : {}),\n\n watchOptions: {\n aggregateTimeout: 200,\n ignored: [\n '**/.git',\n '**/.turbo',\n '**/coverage',\n '**/dist',\n '**/generated',\n '**/old',\n '**/tmp',\n ],\n },\n };\n\n return config;\n}\n\nexport type CreateFivemRspackConfigOptions = {\n readonly resourceName?: string | undefined;\n readonly environment?: Environment | undefined;\n readonly cwd?: string | undefined;\n};\n\nexport function createFivemRspackConfig(\n options: CreateFivemRspackConfigOptions = {},\n): RspackOptions[] {\n const environment =\n options.environment\n ?? (process.env.NODE_ENV === Environment.PRODUCTION ?\n Environment.PRODUCTION\n : Environment.DEVELOPMENT);\n const cwd = options.cwd ?? process.cwd();\n const resourceName = options.resourceName ?? path.basename(cwd);\n\n const configs: RspackOptions[] = [];\n\n for (const entryType of Object.values(FivemEntryType)) {\n const entry = findFirstExistingPath([\n path.resolve(cwd, `src/${entryType}/index.tsx`),\n path.resolve(cwd, `src/${entryType}/index.ts`),\n path.resolve(cwd, `src/${entryType}.tsx`),\n path.resolve(cwd, `src/${entryType}.ts`),\n ]);\n\n if (!entry) continue;\n\n const config = buildConfig({ cwd, entry, entryType, environment, resourceName });\n configs.push(config);\n }\n\n if (configs.length === 0) throw new Error('No valid FiveM resource entries found.');\n\n return configs;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jpp-toolkit/rspack-config",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "Rspack configurations for JS/TS projects.",
5
5
  "keywords": [
6
6
  "jpp",
@@ -148,7 +148,9 @@ export function createFivemRspackConfig(
148
148
 
149
149
  for (const entryType of Object.values(FivemEntryType)) {
150
150
  const entry = findFirstExistingPath([
151
+ path.resolve(cwd, `src/${entryType}/index.tsx`),
151
152
  path.resolve(cwd, `src/${entryType}/index.ts`),
153
+ path.resolve(cwd, `src/${entryType}.tsx`),
152
154
  path.resolve(cwd, `src/${entryType}.ts`),
153
155
  ]);
154
156