diff --git a/packages/webpack5/src/configuration/base.ts b/packages/webpack5/src/configuration/base.ts index 97b065dca..851c026b1 100644 --- a/packages/webpack5/src/configuration/base.ts +++ b/packages/webpack5/src/configuration/base.ts @@ -1,7 +1,10 @@ import { Configuration } from 'webpack'; +import Config from 'webpack-chain'; // todo: add base configuration that's shared across all flavors export default function (env): Configuration { + const config = new Config() + config.entry('') return { entry: { 'bundle.js': 'bundle.js', diff --git a/packages/webpack5/src/helpers/projectHelpers.ts b/packages/webpack5/src/helpers/projectHelpers.ts new file mode 100644 index 000000000..1a13d3f8f --- /dev/null +++ b/packages/webpack5/src/helpers/projectHelpers.ts @@ -0,0 +1,27 @@ + +import { existsSync } from "fs"; +import { resolve } from "path"; + +export function getPackageJson(projectDir: string) { + const packageJsonPath = getPackageJsonPath(projectDir); + const result = readJsonFile(packageJsonPath); + + return result; +} + +export function readJsonFile(filePath:string) { + return require(filePath) as { + main:string + // to be extended? + }; +} + +export function getPackageJsonPath (projectDir: string) { + const packagePath = resolve(projectDir, "package.json"); + if (existsSync(packagePath)) { + return packagePath; + } else { + return getPackageJsonPath(resolve(projectDir, '..')); + } + + } \ No newline at end of file diff --git a/packages/webpack5/src/index.ts b/packages/webpack5/src/index.ts index 75a11149d..5a70f96a9 100644 --- a/packages/webpack5/src/index.ts +++ b/packages/webpack5/src/index.ts @@ -1 +1,55 @@ export * from './configuration'; +import { existsSync } from "fs"; +import { getPackageJson } from './helpers/projectHelpers'; +import { resolve } from "path"; + + +export type Platform = 'android' | 'ios'; +/** + * Function to ensure the app directory exists + * + * @param appDirectory + */ +function verifyEntryModuleDirectory(appDirectory: string) { + if (!appDirectory) { + throw new Error("Path to app directory is not specified. Unable to find entry module."); + } + + if (!existsSync(appDirectory)) { + throw new Error(`The specified path to app directory ${appDirectory} does not exist. Unable to find entry module.`); + } +} + +function getPackageJsonEntry(appDirectory) { + const packageJsonSource = getPackageJson(appDirectory); + const entry = packageJsonSource.main; + + if (!entry) { + throw new Error(`${appDirectory}/package.json must contain a 'main' attribute!`); + } + + return entry.replace(/\.js$/i, ""); +} + + +export function getEntryModule (appDirectory: string, platform: 'android' | 'ios') { + verifyEntryModuleDirectory(appDirectory); + + const entry = getPackageJsonEntry(appDirectory); + + const tsEntryPath = resolve(appDirectory, `${entry}.ts`); + const jsEntryPath = resolve(appDirectory, `${entry}.js`); + let entryExists = existsSync(tsEntryPath) || existsSync(jsEntryPath); + if (!entryExists && platform) { + const platformTsEntryPath = resolve(appDirectory, `${entry}.${platform}.ts`); + const platformJsEntryPath = resolve(appDirectory, `${entry}.${platform}.js`); + entryExists = existsSync(platformTsEntryPath) || existsSync(platformJsEntryPath); + } + + if (!entryExists) { + throw new Error(`The entry module ${entry} specified in ` + + `${appDirectory}/package.json doesn't exist!`) + } + + return entry; +}; \ No newline at end of file diff --git a/packages/webpack5/tsconfig.json b/packages/webpack5/tsconfig.json index c29859e2e..9c28969b1 100644 --- a/packages/webpack5/tsconfig.json +++ b/packages/webpack5/tsconfig.json @@ -7,21 +7,16 @@ "declaration": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, - "lib": [ - "es2017" - ], + "lib": ["es2017"], "sourceMap": true, "skipLibCheck": true, "skipDefaultLibCheck": true, "diagnostics": true, "paths": { - "@nativescript/webpack": [ - "src" - ] + "@nativescript/webpack": ["src"] }, "esModuleInterop": true }, - "exclude": [ - "node_modules" - ] + "include": ["src"], + "exclude": ["node_modules"] }