entcore 4.6.0-dev.1 → 4.6.0-dev.202210281154

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.
Files changed (68) hide show
  1. package/bundle/ng-app.js +13 -13
  2. package/bundle/ng-app.js.map +1 -1
  3. package/dist/ng-app.js +456 -0
  4. package/dist/ng-app.js.map +1 -0
  5. package/{src → dist}/template/attachments.html +0 -0
  6. package/{src → dist}/template/calendar-default-display-options-template.html +0 -0
  7. package/{src → dist}/template/calendar.html +0 -0
  8. package/{src → dist}/template/carousel.html +0 -0
  9. package/{src → dist}/template/cgu-lightbox.html +0 -0
  10. package/{src → dist}/template/compression.html +0 -0
  11. package/{src → dist}/template/embedder.html +0 -0
  12. package/{src → dist}/template/file-picker-list/list.html +0 -0
  13. package/{src → dist}/template/file-picker-list/pick.html +0 -0
  14. package/{src → dist}/template/image-editor/blur.html +0 -0
  15. package/{src → dist}/template/image-editor/crop.html +0 -0
  16. package/{src → dist}/template/image-editor/main.html +0 -0
  17. package/{src → dist}/template/image-editor/properties.html +0 -0
  18. package/{src → dist}/template/image-editor/resize.html +0 -0
  19. package/{src → dist}/template/image-editor/rotate.html +0 -0
  20. package/{src → dist}/template/linker.html +0 -0
  21. package/{src → dist}/template/media-library/browse.html +0 -0
  22. package/{src → dist}/template/media-library/icons.html +0 -0
  23. package/{src → dist}/template/media-library/list.html +0 -0
  24. package/{src → dist}/template/media-library/loading.html +0 -0
  25. package/{src → dist}/template/media-library/main.html +0 -0
  26. package/{src → dist}/template/media-library/record.html +0 -0
  27. package/{src → dist}/template/media-library/upload.html +0 -0
  28. package/{src → dist}/template/media-library/virtual-media-library/virtual-media-content.html +0 -0
  29. package/{src → dist}/template/media-library/virtual-media-library/virtual-media-folder.html +0 -0
  30. package/{src → dist}/template/multi-combo.html +0 -0
  31. package/{src → dist}/template/recorder.html +0 -0
  32. package/{src → dist}/template/share-panel-table-mobile.html +0 -0
  33. package/{src → dist}/template/share-panel-table.html +0 -0
  34. package/{src → dist}/template/share-panel.html +0 -0
  35. package/{src → dist}/template/video/browse.html +0 -0
  36. package/{src → dist}/template/video/integration.html +0 -0
  37. package/{src → dist}/template/video/main.html +0 -0
  38. package/{src → dist}/template/video/onboarding.html +0 -0
  39. package/{src → dist}/template/video/record.html +0 -0
  40. package/{src → dist}/template/video/upload.html +0 -0
  41. package/{src → dist}/template/widgets.html +0 -0
  42. package/{src → dist}/template/wizard.html +0 -0
  43. package/gulpfile.js +51 -28
  44. package/package.json +27 -24
  45. package/types/src/ts/entcore.d.ts +1 -0
  46. package/types/src/ts/video/VideoController.d.ts +6 -0
  47. package/types/src/ts/video/index.d.ts +4 -0
  48. package/CHANGELOG.md +0 -185
  49. package/CONTRIBUTING.md +0 -53
  50. package/Jenkinsfile +0 -27
  51. package/bower.json +0 -30
  52. package/browsers.json +0 -40
  53. package/build.sh +0 -70
  54. package/docker-compose.yml +0 -16
  55. package/karma-base.conf.json +0 -49
  56. package/karma-compatibility.conf.js +0 -25
  57. package/karma.conf.js +0 -5
  58. package/src/ts/deps.d.ts +0 -52
  59. package/src/ts/directives/virtual-folder/README.md +0 -209
  60. package/src/ts/editor/matchers.d.ts +0 -6
  61. package/src/ts/libs/angular/angular.js +0 -11
  62. package/src/ts/libs/angular/angular.js.map +0 -1
  63. package/src/ts/libs/underscore/underscore.js +0 -8
  64. package/src/ts/libs/underscore/underscore.js.map +0 -1
  65. package/tsconfig.spec.json +0 -11
  66. package/wdio.conf.js +0 -44
  67. package/webpack-dev.config.js +0 -25
  68. package/webpack.config.js +0 -31
package/build.sh DELETED
@@ -1,70 +0,0 @@
1
- #!/bin/bash
2
-
3
- if [ ! -e node_modules ]
4
- then
5
- mkdir node_modules
6
- fi
7
-
8
- if [ -z ${USER_UID:+x} ]
9
- then
10
- export USER_UID=1000
11
- export GROUP_GID=1000
12
- fi
13
-
14
- # options
15
- SPRINGBOARD="recette"
16
- for i in "$@"
17
- do
18
- case $i in
19
- -s=*|--springboard=*)
20
- SPRINGBOARD="${i#*=}"
21
- shift
22
- ;;
23
- *)
24
- ;;
25
- esac
26
- done
27
-
28
- build () {
29
- local extras=$1
30
- docker-compose run --rm -u "$USER_UID:$GROUP_GID" node sh -c "node_modules/gulp/bin/gulp.js build ${extras}"
31
- }
32
-
33
- install () {
34
- docker-compose run --rm -u "$USER_UID:$GROUP_GID" node sh -c "npm install"
35
- }
36
-
37
- watch () {
38
- docker-compose run --rm -u "$USER_UID:$GROUP_GID" node sh -c "node_modules/gulp/bin/gulp.js watch --springboard=/home/node/$SPRINGBOARD"
39
- }
40
-
41
- publish () {
42
- LOCAL_BRANCH=`echo $GIT_BRANCH | sed -e "s|origin/||g"`
43
- docker-compose run --rm -u "$USER_UID:$GROUP_GID" node sh -c "npm publish --tag $LOCAL_BRANCH"
44
- }
45
-
46
- for param in "$@"
47
- do
48
- case $param in
49
- deps)
50
- install
51
- ;;
52
- build)
53
- build
54
- ;;
55
- install)
56
- install && build "--springboard=/home/node/${SPRINGBOARD}"
57
- ;;
58
- watch)
59
- watch
60
- ;;
61
- publish)
62
- publish
63
- ;;
64
- *)
65
- echo "Invalid argument : $param"
66
- esac
67
- if [ ! $? -eq 0 ]; then
68
- exit 1
69
- fi
70
- done
@@ -1,16 +0,0 @@
1
- gradle:
2
- image: gradle:4.5-alpine
3
- working_dir: /home/gradle/project
4
- volumes:
5
- - ./:/home/gradle/project
6
- - ~/.m2:/home/gradle/.m2
7
- - ~/.gradle:/home/gradle/.gradle
8
-
9
- node:
10
- image: opendigitaleducation/node:10-alpine
11
- working_dir: /home/node/app
12
- volumes:
13
- - ./:/home/node/app
14
- - ~/.npm:/.npm
15
- - ../paris:/home/node/paris
16
- - ../recette:/home/node/recette # TODO : rendre générique pour appliquer à tous les springboards
@@ -1,49 +0,0 @@
1
- {
2
- "basePath": "",
3
- "files": [
4
- "node_modules/jquery/dist/jquery.js",
5
- "node_modules/mathjax/MathJax.js",
6
- "node_modules/angular/angular.js",
7
- "node_modules/angular-mocks/angular-mocks.js",
8
- "node_modules/angular-route/angular-route.js",
9
- "node_modules/angular-sanitize/angular-sanitize.js",
10
- "src/ts/lib.ts",
11
- "src/ts/ng-start.ts",
12
- "src/ts/modelDefinitions.ts",
13
- "src/ts/http.ts",
14
- "src/ts/idiom.ts",
15
- "src/ts/calendar.ts",
16
- "src/ts/ui.ts",
17
- "src/ts/me.ts",
18
- "src/ts/skin.ts",
19
- "src/ts/globals.ts",
20
- "src/ts/notify.ts",
21
- "src/ts/workspace/*.ts",
22
- "src/ts/edumedia/*.ts",
23
- "src/ts/behaviours.ts",
24
- "src/ts/rights.ts",
25
- "src/ts/toasts.ts",
26
- "src/ts/entcore.ts",
27
- "src/ts/sniplets.ts",
28
- "src/ts/template.ts",
29
- "src/ts/widget.ts",
30
- "src/ts/libs/**/*.ts",
31
- "src/ts/editor.ts",
32
- "src/ts/editor.spec.ts",
33
- "src/ts/editor/**/*.ts",
34
- "src/ts/library/*.ts",
35
- "src/ts/directives/userRole.ts",
36
- "src/ts/directives/userRole.spec.ts"
37
- ],
38
- "preprocessors": {
39
- "src/**/*.ts": ["karma-typescript"]
40
- },
41
-
42
- "reporters": ["progress", "karma-typescript"],
43
- "singleRun": false,
44
- "frameworks": ["jasmine", "karma-typescript"],
45
- "browsers": ["Chrome", "Firefox"],
46
- "karmaTypescriptConfig": {
47
- "tsconfig": "./tsconfig.spec.json"
48
- }
49
- }
@@ -1,25 +0,0 @@
1
- const karmaBaseConf = require('./karma-base.conf');
2
- const browsers = require('./browsers');
3
- const customLaunchers = {};
4
-
5
- browsers.forEach(browser => customLaunchers[browser.name] = {
6
- base: 'BrowserStack',
7
- browser: browser.browser,
8
- os: browser.os,
9
- os_version: browser.os_version,
10
- browser_version: browser.browser_version
11
- });
12
-
13
- module.exports = function (config) {
14
- const karmaCompatibilityConf = Object.assign({}, karmaBaseConf, {
15
- browserStack: {
16
- username: process.env.BROWSERSTACK_USERNAME,
17
- accessKey: process.env.BROWSERSTACK_ACCESSKEY
18
- },
19
- customLaunchers,
20
- browsers: Object.keys(customLaunchers),
21
- singleRun: true
22
- });
23
-
24
- config.set(karmaCompatibilityConf)
25
- };
package/karma.conf.js DELETED
@@ -1,5 +0,0 @@
1
- const karmaBaseConf = require('./karma-base.conf');
2
-
3
- module.exports = function (config) {
4
- config.set(karmaBaseConf);
5
- };
package/src/ts/deps.d.ts DELETED
@@ -1,52 +0,0 @@
1
- // angular is loaded globally
2
- declare let angular;
3
-
4
- //webpack stuff
5
- declare function require(path:string);
6
-
7
- declare interface require{
8
- ensure(modulesPaths: string[], cb: (modules) => void);
9
- }
10
-
11
- // allow parsing strings as int
12
- declare function parseInt(data:any, radix?:number);
13
-
14
- declare interface Range{
15
- intersectsNode(item: HTMLElement): boolean;
16
- }
17
-
18
- declare interface Blob{
19
- name: string;
20
- }
21
-
22
- declare interface Document{
23
- caretRangeFromPoint(x: number, y: number);
24
- caretPositionFromPoint(x: number, y: number);
25
- }
26
-
27
- declare interface Xiti {
28
- conf: any;
29
- ATInternet: any;
30
- ATTag: any;
31
- structure: any;
32
- run(path?: string): Promise<void>;
33
- click(name: string, element: Element): Promise<void>;
34
- }
35
-
36
- declare interface Window{
37
- MathJax: any;
38
- Prism: any;
39
- entcore: any;
40
- html_beautify: any;
41
- jQuery: any;
42
- notLoggedIn: boolean;
43
- xiti: Xiti;
44
- }
45
-
46
- declare interface Node{
47
- innerHTML: string;
48
- }
49
-
50
- declare interface Object{
51
- toJSON(): string | {}
52
- }
@@ -1,209 +0,0 @@
1
- ## Virtual Folder
2
-
3
- Virtual Folder is an extension of Media-Library component in order to create your own virtual documents
4
- if you wish to make it exportable to all apps.
5
-
6
- Each Virtual Folder must be implemented by an App using Behaviours.
7
-
8
- ### 1. Requirement
9
-
10
- Must add public configuration to Workspace App :
11
- <pre>
12
- ## Workspace configuration
13
- {
14
- ...
15
- "config": {
16
- ...
17
- "publicConf": {
18
- "folder-service": ["appName", "appName2", ...]
19
- }
20
- }
21
- }
22
- </pre>
23
-
24
- Note : `appName` (`or appName2`) must be written correctly in order to load their behaviours (e.g `Behaviours.load(appName)`)
25
-
26
-
27
- ## Implementation usage as an App
28
-
29
- In your behaviours, you must add a field named `mediaLibraryService` (could be an object/class)
30
-
31
- It should be accessible via `Behaviours.applicationsBehaviours[appName].mediaLibraryService`
32
-
33
- `mediaLibraryService` must implement `VirtualMediaLibraryScope` as an object or class
34
-
35
-
36
- ### 1. Interface
37
-
38
- This is the interface that each app must implement :
39
- ```
40
- interface IVirtualMediaLibraryScope{
41
- folders: Array<Document>;
42
-
43
- documents: Array<Document>;
44
-
45
- openedTree: FolderTreeProps;
46
-
47
- enableInitFolderTree(): boolean;
48
-
49
- initFolderTree(): Promise<void>;
50
-
51
- openFolder(folder: Document): Promise<void>;
52
-
53
- onSelectVirtualDocumentsBefore(documents: Array<any>): Promise<Array<Document>>;
54
-
55
- clearCopiedDocumentsAfterSelect(documents: Array<Document>): Promise<void>;
56
- }
57
- ```
58
- ### 2. Interface Description
59
-
60
- Each app must implement these scopes in their own behaviours as `mediaLibraryservice` (using `object` or `class` typescript)
61
-
62
-
63
- | Scope | Type | Description - Ideal implementation
64
- | ------------------------- | ----- | -----------------------------------------------------------------------------------
65
- | `folders` | ` Array<Document>` | An Array of documents that must contain folder type
66
- | `documents` | `Array<Document>` | An Array of documents that must contain simply documents type
67
- | `openedTree` | `FolderTreeProps` | The current opened tree loaded from behaviours (will store your current behaviours media library service)
68
- | `enableInitFolderTree` | `boolean` | Method that will allow your virtual folder to be displayed as a `tree` service in media-library
69
- | `initFolderTree` | `Promise<void>` | Initialize your folder `tree` service (using `folder-tree` directive). this method **requires** `folders` and `documents` members to be populated
70
- | `openFolder` | `Promise<void>` | open folder children from your `tree` service. this method **requires** `folders` and `documents` members to be populated
71
- | `onSelectVirtualDocumentsBefore` | `Promise<Array<Document>>` | This method will execute the behaviour's action before its executes the media library scope `selectDocuments()`.
72
- | `clearCopiedDocumentsAfterSelect` | `Promise<void>` | Allows clear copied documents (if you decided in your method `onSelectVirtualDocumentsBefore()`)
73
-
74
- ### 3. Interface Implementation example
75
-
76
- ```
77
- Behaviours.register(appName, {
78
- right {
79
- ...
80
- }
81
- mediaLibraryService: new MediaLibraryService(), // mediaLibraryService
82
- ...
83
- })
84
- ```
85
-
86
- Creation object :
87
- ```
88
- export const mediaLibraryService: IVirtualMediaLibraryScope = {
89
- // implements all methods
90
- };
91
- ```
92
- or class :
93
- ```
94
- export class MediaLibraryService implements VirtualMediaLibraryScope {
95
- // implements all methods
96
- };
97
- ```
98
-
99
- ### 4. Example implementation for each method
100
-
101
- Say we are implementing `MediaLibraryService` from a specific module that needs to display its own tree to the media library
102
-
103
- ```typescript
104
- export class MediaLibraryService implements IVirtualMediaLibraryScope {
105
- openedTree: any;
106
- folders: Array<Document>;
107
- documents: Array<Document>;
108
-
109
- constructor() {
110
- this.folders = [];
111
- this.documents = [];
112
- }
113
-
114
- enableInitFolderTree(): boolean {
115
- return true // or anything, you make your own condition to determine whether it should be displayed in your virtual folder tree
116
- }
117
-
118
- async initFolderTree(): Promise<void> {
119
- // apicall() or method() from your own that will fetch data and use for assigning your folders and this documents
120
- // (e.g):
121
- let documents: any = apiCall();
122
-
123
- // populate folder content to media library behaviours
124
- this.folders = documents.filter(filterFoldersOnly());
125
-
126
- // populate file content to media library behaviours
127
- this.documents = documents.filter(filterDocumentsOnly()); // See below the example of field Document object must have
128
- }
129
-
130
- async openFolder(folder: models.Element): Promise<void> {
131
- // apicall() or method() from your own that will fetch data and use for assigning your folders and this documents
132
- // you can add extra business logic, it will depend what you seek for
133
- // (e.g):
134
- let documents: any = anotherCall();
135
-
136
- // populate folder content to media library behaviours
137
- this.folders = documents.filter(filterFoldersOnly());
138
-
139
- // populate file content to media library behaviours
140
- this.documents = documents.filter(filterDocumentsOnly()); // See below the example of field Document object must have
141
- }
142
-
143
- async onSelectVirtualDocumentsBefore(documents: Array<any>): Promise<Array<Document>> {
144
- // apicall() or method() from your own that will do any action you like
145
- // IMPORTANT this must return {Promise<Array<Document>>} containing a "real" document since this will be used for media library ng model
146
-
147
- let resDocuments = await anotherCall(documents); // could be calling your own API/method to duplicate or choose different documents
148
- return resDocuments;
149
-
150
- }
151
-
152
- async clearCopiedDocumentsAfterSelect(documents: Array<Document>): Promise<void> {
153
- if (documents && documents.length)
154
- service.deleteAll(documents); // SUGGESTED method that will clear any documents
155
- // note: service.deleteAll comes from workspaceService
156
- }
157
-
158
- }
159
- ```
160
-
161
- As for the `Document` model, these fields should be available :
162
- ```
163
- {
164
- name: {string}
165
- comments: {string},
166
- metadata: {
167
- 'content-type': {string},
168
- role: {string},
169
- extension: {string},
170
- filename: {string},
171
- size: {number}
172
- }, // metadata as the workspace object
173
- owner: {string},
174
- ownerName: {string}
175
- }
176
- ```
177
- Example fictive data of a document
178
- ```
179
- {
180
- "_id": {string} (e.g "id"),
181
- "name": {string} (e.g "name"),
182
- "title": {string} (e.g "title"),
183
- "created": {string} (e.g "2022-06-02T12:06:00.000Z"),
184
- "children": {Array<this} file/folder content (recommanded to avoid TypeError)
185
- "documents": {Array<this>} file content
186
- "folders": {Array<this>} folder content // not mandatory if you decide to lazy load your current folder
187
- "eParent": {string},
188
- "eType": {string}, "file" | "folder"
189
- "metadata":{
190
- "name": {string} (e.g "insert title"),
191
- "filename": {string}, (e.g "insert title.png"),
192
- "content-type": {string} (e.g "image/png"),
193
- "charset": {string} (e.g "UTF-8"),
194
- "size": {number} (e.g 77287),
195
- "extension": {string} (e.g "png"),
196
- "role": {string}, (e.g "img")
197
- },
198
- "version": {number} (e.g 50),
199
- "link": {string} (e.g "/workspace/document/id"),
200
- "icon":" {string} (e.g "/workspace/document/id"),
201
- "owner":{
202
- "userId": {string} (e.g "user id"),
203
- "displayName": {string} (e.g "display name")
204
- },
205
- "shared":[]
206
- }
207
- ```
208
-
209
-
@@ -1,6 +0,0 @@
1
- declare module jasmine {
2
- interface Matchers<T> {
3
- toBeEditedAs(expected: Expected<string>, expectationFailOutput?: any): boolean;
4
- toBeStyledAs(expected: Expected<string>, expectationFailOutput?: any): boolean;
5
- }
6
- }
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require('angular');
4
- require('angular-route');
5
- require('angular-sanitize');
6
- exports.angular = window.angular;
7
- if (!window.entcore) {
8
- window.entcore = {};
9
- }
10
- window.entcore.angular = exports.angular;
11
- //# sourceMappingURL=angular.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular.js","sourceRoot":"","sources":["angular.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,SAAS,CAAC,CAAC;AACnB,OAAO,CAAC,eAAe,CAAC,CAAC;AACzB,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjB,QAAA,OAAO,GAAI,MAAc,CAAC,OAAO,CAAC;AAC7C,EAAE,CAAA,CAAC,CAAE,MAAc,CAAC,OAAO,CAAC,CAAA,CAAC;IACxB,MAAc,CAAC,OAAO,GAAG,EAAE,CAAC;AACjC,CAAC;AACA,MAAc,CAAC,OAAO,CAAC,OAAO,GAAG,eAAO,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._ = require('underscore');
4
- if (!window.entcore) {
5
- window.entcore = {};
6
- }
7
- window.entcore._ = exports._;
8
- //# sourceMappingURL=underscore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"underscore.js","sourceRoot":"","sources":["underscore.ts"],"names":[],"mappings":";;AAAW,QAAA,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACrC,EAAE,CAAA,CAAC,CAAE,MAAc,CAAC,OAAO,CAAC,CAAA,CAAC;IACxB,MAAc,CAAC,OAAO,GAAG,EAAE,CAAC;AACjC,CAAC;AACA,MAAc,CAAC,OAAO,CAAC,CAAC,GAAG,SAAC,CAAC"}
@@ -1,11 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "module": "commonjs",
5
- "declaration": false,
6
- "moduleResolution": "node",
7
- "sourceMap": true,
8
- "noImplicitAny": false,
9
- "lib": ["es2015", "dom"]
10
- }
11
- }
package/wdio.conf.js DELETED
@@ -1,44 +0,0 @@
1
- const os = require('os');
2
- const browsers = require('./browsers');
3
-
4
- let capabilities = os.type() === 'Darwin'?
5
- [{"browserName": "safari"}] : [{"browserName": "chrome"}, {"browserName": "firefox"}];
6
-
7
- let services = ['selenium-standalone'];
8
- let user;
9
- let key;
10
- if (process.env.BROWSERSTACK === 'true') {
11
- services = ['browserstack'];
12
- user = process.env.BROWSERSTACK_USERNAME;
13
- key = process.env.BROWSERSTACK_ACCESSKEY;
14
- capabilities = browsers
15
- .map(browser => Object.assign({}, {browserName: browser.browser.toLowerCase()}, browser));
16
- }
17
-
18
- exports.config = {
19
- specs: [
20
- './test/specs/**/*.ts'
21
- ],
22
- capabilities,
23
- sync: true,
24
- logLevel: 'silent',
25
- coloredLogs: true,
26
- deprecationWarnings: true,
27
- bail: 0,
28
- screenshotPath: './errorShots/',
29
- baseUrl: process.env.E2E_BASE_URL || 'http://localhost:8090',
30
- waitforTimeout: 20000,
31
- connectionRetryTimeout: 90000,
32
- connectionRetryCount: 3,
33
- services,
34
- user,
35
- key,
36
- browserstackLocal: true,
37
- framework: 'jasmine',
38
- jasmineNodeOpts: {
39
- defaultTimeoutInterval: 60000
40
- },
41
- before: function () {
42
- require('ts-node/register');
43
- }
44
- };
@@ -1,25 +0,0 @@
1
- var webpack = require('webpack');
2
- var path = require('path');
3
-
4
- module.exports = {
5
- context: path.resolve(__dirname, './'),
6
- entry: {
7
- 'ng-app': './src/ts/ng-app'
8
- },
9
- output: {
10
- filename: './bundle/[name].js'
11
- },
12
- resolve: {
13
- modulesDirectories: ['node_modules'],
14
- extensions: ['', '.ts', '.js']
15
- },
16
- devtool: "inline-source-map",
17
- module: {
18
- loaders: [
19
- {
20
- test: /\.ts$/,
21
- loader: 'awesome-typescript-loader'
22
- }
23
- ]
24
- }
25
- }
package/webpack.config.js DELETED
@@ -1,31 +0,0 @@
1
- var webpack = require('webpack');
2
- var path = require('path');
3
- const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
4
-
5
- module.exports = {
6
- context: path.resolve(__dirname, './'),
7
- entry: {
8
- 'ng-app': './src/ts/ng-app'
9
- },
10
- output: {
11
- filename: './bundle/[name].js'
12
- },
13
- resolve: {
14
- modulesDirectories: ['node_modules'],
15
- extensions: ['', '.ts', '.js']
16
- },
17
- devtool: "source-map",
18
- module: {
19
- loaders: [
20
- {
21
- test: /\.ts$/,
22
- loader: 'awesome-typescript-loader'
23
- }
24
- ]
25
- },
26
- plugins: [
27
- new UglifyJSPlugin({
28
- sourceMap: true
29
- })
30
- ]
31
- }