diff --git a/packages/overlayscrollbars-ngx/build.js b/packages/overlayscrollbars-ngx/build.js index 43eafc7..a7f8670 100644 --- a/packages/overlayscrollbars-ngx/build.js +++ b/packages/overlayscrollbars-ngx/build.js @@ -61,18 +61,56 @@ gulp.task('prepare', function (done) { gulp.task('ngc', function (done) { sh.echo('> Compile with "ngc"'); + + // aot compile .metadata.json: https://github.com/ng-packagr/ng-packagr/blob/master/docs/DESIGN.md#build-artefacts + /* + * make sure metadata.json origins paths are correct, to do that + * create a aotEntry dummy file which for that purpose + */ + let aotEntryFile = `${filesInfo.typingsFolder}/index.ts`; + let srcEntryFile = `${filesInfo.srcFolder}/index.ts`; + let aotImportPath = path.relative(path.dirname(path.resolve(aotEntryFile)), path.dirname(path.resolve(srcEntryFile))); + sh.mkdir('-p', path.dirname(aotEntryFile)); + sh.ShellString(`export * from '${aotImportPath.split(path.sep).join('/')}/index'`).to(aotEntryFile); + let newTsconfigJson = { ...tsconfigJson, + // https://github.com/angular/angular/blob/master/packages/compiler-cli/src/transformers/api.ts#L40 + angularCompilerOptions: { + ...tsconfigJson.angularCompilerOptions, + skipMetadataEmit: false, + strictMetadataEmit: true, + fullTemplateTypeCheck: true, + flatModuleOutFile: `${packageName}.js`, + flatModuleId: packageName + }, compilerOptions: { ...tsconfigJson.compilerOptions, declarationDir: filesInfo.ngcFolder, outDir: filesInfo.ngcFolder, }, - include: [filesInfo.srcFolder], + files: [aotEntryFile], + include: undefined, exclude: [filesInfo.distFolder, filesInfo.exampleFolder, 'node_modules'] }; sh.ShellString(JSON.stringify(newTsconfigJson, null, 4)).to(filesInfo.tsconfigJsonPath); sh.exec('ngc -p tsconfig.json'); + + // delete the aotEntry dummy file + sh.rm('-f', aotEntryFile); + + // rename and move metadata.json to correct folder + let aotMetadataJsonPath = path.normalize(`${filesInfo.ngcFolder}/${filesInfo.typingsFolder}/${packageName}.metadata.json`); + let aotMetadataJsonPathNew = path.normalize(`${filesInfo.typingsFolder}/index.metadata.json`); + if (sh.test('-f', aotMetadataJsonPath)) { + sh.echo(chalk.yellowBright(' [metadata.json]: ') + chalk.greenBright(`${aotMetadataJsonPath} → ${aotMetadataJsonPathNew}`)); + sh.mv(aotMetadataJsonPath, aotMetadataJsonPathNew); + } + else { + sh.echo(chalk.redBright(`Couldn't find metadata.json: "${aotMetadataJsonPath}"`)); + return; + } + done(); }); @@ -85,6 +123,7 @@ gulp.task('tsconfigJson', function (done) { declarationDir: filesInfo.typingsFolder, outDir: filesInfo.distFolder, }, + files: undefined, include: [filesInfo.srcFolder], exclude: [filesInfo.distFolder, filesInfo.exampleFolder, 'node_modules'] }; diff --git a/packages/overlayscrollbars-ngx/dist/types/index.metadata.json b/packages/overlayscrollbars-ngx/dist/types/index.metadata.json new file mode 100644 index 0000000..0d9d571 --- /dev/null +++ b/packages/overlayscrollbars-ngx/dist/types/index.metadata.json @@ -0,0 +1 @@ +{"__symbolic":"module","version":4,"metadata":{"OverlayScrollbarsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"overlay-scrollbars","template":"","styles":[":host { display: block; }"]}]}],"members":{"_options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":5},"arguments":["options"]}]}],"_extensions":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":5},"arguments":["extensions"]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":14,"character":30}]}],"osInstance":[{"__symbolic":"method"}],"osTarget":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}]}},"OverlayscrollbarsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":3,"character":1},"arguments":[{"imports":[],"declarations":[{"__symbolic":"reference","name":"OverlayScrollbarsComponent"}],"exports":[{"__symbolic":"reference","name":"OverlayScrollbarsComponent"}]}]}],"members":{}}},"origins":{"OverlayScrollbarsComponent":"../../src/overlayscrollbars.component","OverlayscrollbarsModule":"../../src/overlayscrollbars.module"},"importAs":"overlayscrollbars-ngx"} \ No newline at end of file diff --git a/packages/overlayscrollbars-ngx/package.json b/packages/overlayscrollbars-ngx/package.json index 402411b..62de86b 100644 --- a/packages/overlayscrollbars-ngx/package.json +++ b/packages/overlayscrollbars-ngx/package.json @@ -51,7 +51,7 @@ "setup": "npm i && cd example && npm i && cd ..", "build": "node build.js", "example": "cd example && npx ng serve", - "build-example": "cd example && npx ng build --prod --base-href \"/OverlayScrollbars/frameworks/angular/\" --aot=false --build-optimizer=false", + "build-example": "cd example && npx ng build --prod --base-href \"/OverlayScrollbars/frameworks/angular/\"", "test": "echo \"Error: no test specified\" && exit 1" } } \ No newline at end of file diff --git a/packages/overlayscrollbars-ngx/tsconfig.json b/packages/overlayscrollbars-ngx/tsconfig.json index 99ce574..f0baeb5 100644 --- a/packages/overlayscrollbars-ngx/tsconfig.json +++ b/packages/overlayscrollbars-ngx/tsconfig.json @@ -2,9 +2,11 @@ "angularCompilerOptions": { "annotateForClosureCompiler": true, "skipTemplateCodegen": true, + "skipMetadataEmit": false, "strictMetadataEmit": true, "fullTemplateTypeCheck": true, - "strictInjectionParameters": true + "flatModuleOutFile": "overlayscrollbars-ngx.js", + "flatModuleId": "overlayscrollbars-ngx" }, "compilerOptions": { "allowJs": false, @@ -30,12 +32,12 @@ "moduleResolution": "node", "removeComments": true }, - "include": [ - "./src" - ], "exclude": [ "./dist", "./example", "node_modules" + ], + "include": [ + "./src" ] } \ No newline at end of file