From f8eb843140c5f39976e6c1f1be8eb3bc10a8e45c Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 29 Oct 2021 12:16:58 -0400 Subject: [PATCH] Using Typescript & Centralizing Builds --- babel.config.js | 6 + jest.config.js | 12 + package.json | 46 +- rollup.config.js | 30 + src/Chartjs/Resources/assets/.babelrc | 4 - .../Resources/assets/dist/controller.js | 113 +- src/Chartjs/Resources/assets/jest.config.js | 5 + src/Chartjs/Resources/assets/package.json | 25 +- .../src/{controller.js => controller.ts} | 19 +- ...{controller.test.js => controller.test.ts} | 2 +- src/Chartjs/Resources/assets/test/setup.js | 1 - src/Cropperjs/Resources/assets/.babelrc | 4 - .../Resources/assets/dist/controller.js | 188 +- src/Cropperjs/Resources/assets/jest.config.js | 1 + src/Cropperjs/Resources/assets/package.json | 17 - .../Resources/assets/postcss.config.js | 7 - .../src/{controller.js => controller.ts} | 2 +- ...{controller.test.js => controller.test.ts} | 2 +- src/Dropzone/Resources/assets/.babelrc | 4 - .../Resources/assets/dist/controller.js | 184 +- src/Dropzone/Resources/assets/jest.config.js | 1 + src/Dropzone/Resources/assets/package.json | 16 - .../src/{controller.js => controller.ts} | 0 ...{controller.test.js => controller.test.ts} | 2 +- src/Dropzone/Resources/assets/test/setup.js | 12 - src/LazyImage/Resources/assets/.babelrc | 4 - .../Resources/assets/dist/controller.js | 97 +- src/LazyImage/Resources/assets/jest.config.js | 1 + src/LazyImage/Resources/assets/package.json | 17 - .../src/{controller.js => controller.ts} | 0 ...{controller.test.js => controller.test.ts} | 2 +- src/LazyImage/Resources/assets/test/setup.js | 12 - src/LiveComponent/assets/.npmignore | 6 - src/LiveComponent/assets/babel.config.json | 18 - .../assets/dist/live-controller.esm.js | 2132 ----------------- .../assets/dist/live_controller.js | 1533 ++++++++++++ src/LiveComponent/assets/jest.config.js | 5 + src/LiveComponent/assets/package.json | 28 +- src/LiveComponent/assets/rollup.config.js | 25 - ...ectives_parser.js => directives_parser.ts} | 54 +- ...ged.js => have_rendered_values_changed.ts} | 2 +- ...ttp_data_helper.js => http_data_helper.ts} | 24 +- ...{live_controller.js => live_controller.ts} | 180 +- src/LiveComponent/assets/src/polyfills.js | 6 - .../{set_deep_data.js => set_deep_data.ts} | 0 .../src/{string_utils.js => string_utils.ts} | 0 .../{action.test.js => action.test.ts} | 0 .../{basic.test.js => basic.test.ts} | 0 .../{child.test.js => child.test.ts} | 0 .../controller/{csrf.test.js => csrf.test.ts} | 0 .../{model.test.js => model.test.ts} | 1 - .../{render.test.js => render.test.ts} | 0 ...rser.test.js => directives_parser.test.ts} | 2 +- ...s => have_rendered_values_changed.test.ts} | 0 ...eep_data.test.js => set_deep_data.test.ts} | 2 +- src/LiveComponent/assets/test/setup.js | 2 +- ...ing_utils.test.js => string_utils.test.ts} | 0 .../assets/test/{tools.js => tools.ts} | 10 +- src/Swup/Resources/assets/.babelrc | 4 - src/Swup/Resources/assets/dist/controller.js | 146 +- src/Swup/Resources/assets/jest.config.js | 1 + src/Swup/Resources/assets/package.json | 16 - .../src/{controller.js => controller.ts} | 0 ...{controller.test.js => controller.test.ts} | 2 +- src/Swup/Resources/assets/test/setup.js | 12 - .../Bridge/Mercure/Resources/assets/.babelrc | 4 - .../assets/dist/turbo_stream_controller.js | 116 +- .../Mercure/Resources/assets/jest.config.js | 1 + .../Mercure/Resources/assets/package.json | 16 - ...ntroller.js => turbo_stream_controller.ts} | 0 .../Mercure/Resources/assets/test/setup.js | 10 - ...est.js => turbo_stream_controller.test.ts} | 2 +- src/Turbo/Resources/assets/.babelrc | 4 - .../Resources/assets/dist/turbo_controller.js | 58 +- src/Turbo/Resources/assets/jest.config.js | 1 + src/Turbo/Resources/assets/package.json | 16 - ...urbo_controller.js => turbo_controller.ts} | 0 src/Turbo/Resources/assets/test/setup.js | 10 - ...oller.test.js => turbo_controller.test.ts} | 0 .../Resources/assets/test => test}/setup.js | 0 tsconfig.json | 20 + 81 files changed, 2067 insertions(+), 3238 deletions(-) create mode 100644 babel.config.js create mode 100644 jest.config.js create mode 100644 rollup.config.js delete mode 100644 src/Chartjs/Resources/assets/.babelrc create mode 100644 src/Chartjs/Resources/assets/jest.config.js rename src/Chartjs/Resources/assets/src/{controller.js => controller.ts} (56%) rename src/Chartjs/Resources/assets/test/{controller.test.js => controller.test.ts} (98%) delete mode 100644 src/Cropperjs/Resources/assets/.babelrc create mode 100644 src/Cropperjs/Resources/assets/jest.config.js delete mode 100644 src/Cropperjs/Resources/assets/postcss.config.js rename src/Cropperjs/Resources/assets/src/{controller.js => controller.ts} (99%) rename src/Cropperjs/Resources/assets/test/{controller.test.js => controller.test.ts} (98%) delete mode 100644 src/Dropzone/Resources/assets/.babelrc create mode 100644 src/Dropzone/Resources/assets/jest.config.js rename src/Dropzone/Resources/assets/src/{controller.js => controller.ts} (100%) rename src/Dropzone/Resources/assets/test/{controller.test.js => controller.test.ts} (98%) delete mode 100644 src/Dropzone/Resources/assets/test/setup.js delete mode 100644 src/LazyImage/Resources/assets/.babelrc create mode 100644 src/LazyImage/Resources/assets/jest.config.js rename src/LazyImage/Resources/assets/src/{controller.js => controller.ts} (100%) rename src/LazyImage/Resources/assets/test/{controller.test.js => controller.test.ts} (96%) delete mode 100644 src/LazyImage/Resources/assets/test/setup.js delete mode 100644 src/LiveComponent/assets/.npmignore delete mode 100644 src/LiveComponent/assets/babel.config.json delete mode 100644 src/LiveComponent/assets/dist/live-controller.esm.js create mode 100644 src/LiveComponent/assets/dist/live_controller.js create mode 100644 src/LiveComponent/assets/jest.config.js delete mode 100644 src/LiveComponent/assets/rollup.config.js rename src/LiveComponent/assets/src/{directives_parser.js => directives_parser.ts} (86%) rename src/LiveComponent/assets/src/{have_rendered_values_changed.js => have_rendered_values_changed.ts} (96%) rename src/LiveComponent/assets/src/{http_data_helper.js => http_data_helper.ts} (76%) rename src/LiveComponent/assets/src/{live_controller.js => live_controller.ts} (82%) delete mode 100644 src/LiveComponent/assets/src/polyfills.js rename src/LiveComponent/assets/src/{set_deep_data.js => set_deep_data.ts} (100%) rename src/LiveComponent/assets/src/{string_utils.js => string_utils.ts} (100%) rename src/LiveComponent/assets/test/controller/{action.test.js => action.test.ts} (100%) rename src/LiveComponent/assets/test/controller/{basic.test.js => basic.test.ts} (100%) rename src/LiveComponent/assets/test/controller/{child.test.js => child.test.ts} (100%) rename src/LiveComponent/assets/test/controller/{csrf.test.js => csrf.test.ts} (100%) rename src/LiveComponent/assets/test/controller/{model.test.js => model.test.ts} (99%) rename src/LiveComponent/assets/test/controller/{render.test.js => render.test.ts} (100%) rename src/LiveComponent/assets/test/{directives_parser.test.js => directives_parser.test.ts} (99%) rename src/LiveComponent/assets/test/{have_rendered_values_changed.test.js => have_rendered_values_changed.test.ts} (100%) rename src/LiveComponent/assets/test/{set_deep_data.test.js => set_deep_data.test.ts} (98%) rename src/LiveComponent/assets/test/{string_utils.test.js => string_utils.test.ts} (100%) rename src/LiveComponent/assets/test/{tools.js => tools.ts} (90%) delete mode 100644 src/Swup/Resources/assets/.babelrc create mode 100644 src/Swup/Resources/assets/jest.config.js rename src/Swup/Resources/assets/src/{controller.js => controller.ts} (100%) rename src/Swup/Resources/assets/test/{controller.test.js => controller.test.ts} (97%) delete mode 100644 src/Swup/Resources/assets/test/setup.js delete mode 100644 src/Turbo/Bridge/Mercure/Resources/assets/.babelrc create mode 100644 src/Turbo/Bridge/Mercure/Resources/assets/jest.config.js rename src/Turbo/Bridge/Mercure/Resources/assets/src/{turbo_stream_controller.js => turbo_stream_controller.ts} (100%) delete mode 100644 src/Turbo/Bridge/Mercure/Resources/assets/test/setup.js rename src/Turbo/Bridge/Mercure/Resources/assets/test/{turbo_stream_controller.test.js => turbo_stream_controller.test.ts} (99%) delete mode 100644 src/Turbo/Resources/assets/.babelrc create mode 100644 src/Turbo/Resources/assets/jest.config.js rename src/Turbo/Resources/assets/src/{turbo_controller.js => turbo_controller.ts} (100%) delete mode 100644 src/Turbo/Resources/assets/test/setup.js rename src/Turbo/Resources/assets/test/{turbo_controller.test.js => turbo_controller.test.ts} (100%) rename {src/Cropperjs/Resources/assets/test => test}/setup.js (100%) create mode 100644 tsconfig.json diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000000..e7118c30a9c --- /dev/null +++ b/babel.config.js @@ -0,0 +1,6 @@ +module.exports = { + presets: [ + ['@babel/preset-env', {targets: {node: 'current'}}], + '@babel/preset-typescript', + ], +}; diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000000..9bc582d19f8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,12 @@ +const path = require('path'); + +module.exports = { + testRegex: "test/.*\\.test.ts", + testEnvironment: 'jsdom', + setupFilesAfterEnv: [ + path.join(__dirname, 'test/setup.js'), + ], + transform: { + '\\.(j|t)s$': ['babel-jest', { configFile: path.join(__dirname, './babel.config.js') }] + }, +} diff --git a/package.json b/package.json index 71cfa8b9ba6..2ae1ce06154 100644 --- a/package.json +++ b/package.json @@ -5,34 +5,56 @@ "src/**/assets" ], "scripts": { - "build": "yarn workspaces run build", - "test": "yarn workspaces run test", - "lint": "yarn workspaces run lint --fix", - "format": "prettier src/*/Resources/assets/{src,test}/*.js {,src/*/}*.{json,md} --write", + "build": "yarn rollup -c", + "test": "yarn workspaces run jest", + "lint": "yarn workspaces run eslint src test", + "format": "prettier src/*/Resources/assets/src/*.ts src/*/Resources/assets/test/*.js {,src/*/}*.{json,md} --write", "check-lint": "yarn lint --no-fix", "check-format": "yarn format --no-write --check" }, "devDependencies": { - "@babel/eslint-parser": "^7.12.1", - "eslint": "^7.15.0", - "eslint-config-prettier": "^6.15.0", - "eslint-plugin-jest": "^24.1.3", - "prettier": "^2.2.1" + "@babel/core": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-typescript": "^7.15.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-typescript": "^8.3.0", + "@symfony/stimulus-testing": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.2.0", + "@typescript-eslint/parser": "^5.2.0", + "babel-jest": "^27.3.1", + "eslint": "^8.1.0", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-jest": "^25.2.2", + "jest": "^27.3.1", + "pkg-up": "^3.1.0", + "prettier": "^2.2.1", + "rollup": "^2.52.2", + "tslib": "^2.3.1", + "typescript": "^4.4.4" }, "eslintConfig": { "root": true, - "parser": "@babel/eslint-parser", + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], "extends": [ "eslint:recommended", - "prettier" + "prettier", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" ], + "rules": { + "@typescript-eslint/no-explicit-any": "off" + }, "env": { "browser": true }, "overrides": [ { "files": [ - "src/*/Resources/assets/test/*.js" + "src/*/Resources/assets/test/**/*.ts", + "src/*/assets/test/**/*.ts" ], "extends": [ "plugin:jest/recommended" diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000000..c505c57af5b --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,30 @@ +import resolve from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; +import glob from 'glob'; +import path from 'path'; +import pkgUp from 'pkg-up'; + +const files = glob.sync("src/**/assets/src/*controller.ts"); +const packages = files.map((file) => { + const absolutePath = path.join(__dirname, file); + const packageData = require(pkgUp.sync({ cwd: absolutePath })); + const peerDependencies = [ + '@hotwired/stimulus', + ...(packageData.peerDependencies ? Object.keys(packageData.peerDependencies) : []) + ]; + + return { + input: file, + output: { + file: path.join(absolutePath, '..', '..', 'dist', path.basename(file, '.ts') + '.js'), + format: 'esm', + }, + external: peerDependencies, + plugins: [ + resolve(), + typescript(), + ], + }; +}); + +export default packages; diff --git a/src/Chartjs/Resources/assets/.babelrc b/src/Chartjs/Resources/assets/.babelrc deleted file mode 100644 index 77f182d2ca8..00000000000 --- a/src/Chartjs/Resources/assets/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/src/Chartjs/Resources/assets/dist/controller.js b/src/Chartjs/Resources/assets/dist/controller.js index e8766de2ecb..65766a5bee4 100644 --- a/src/Chartjs/Resources/assets/dist/controller.js +++ b/src/Chartjs/Resources/assets/dist/controller.js @@ -1,87 +1,32 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -'use strict'; - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _stimulus = require("@hotwired/stimulus"); - -var _chart = require("chart.js"); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -var _default = /*#__PURE__*/function (_Controller) { - _inherits(_default, _Controller); - - var _super = _createSuper(_default); - - function _default() { - _classCallCheck(this, _default); - - return _super.apply(this, arguments); - } - - _createClass(_default, [{ - key: "connect", - value: function connect() { - var payload = JSON.parse(this.element.getAttribute('data-view')); - - if (Array.isArray(payload.options) && 0 === payload.options.length) { - payload.options = {}; - } - - this._dispatchEvent('chartjs:pre-connect', { - options: payload.options - }); - - var chart = new _chart.Chart(this.element.getContext('2d'), payload); - - this._dispatchEvent('chartjs:connect', { - chart: chart - }); +import { Controller } from '@hotwired/stimulus'; +import { Chart } from 'chart.js'; + +class controller extends Controller { + connect() { + if (!(this.element instanceof HTMLCanvasElement)) { + throw new Error('Invalid element'); + } + const viewData = this.element.getAttribute('data-view'); + if (!viewData) { + throw new Error('Missing data-view attribute.'); + } + const payload = JSON.parse(viewData); + if (Array.isArray(payload.options) && 0 === payload.options.length) { + payload.options = {}; + } + this._dispatchEvent('chartjs:pre-connect', { options: payload.options }); + const canvasContext = this.element.getContext('2d'); + if (!canvasContext) { + throw new Error('Could not getContext() from Element'); + } + const chart = new Chart(canvasContext, payload); + this._dispatchEvent('chartjs:connect', { chart }); } - }, { - key: "_dispatchEvent", - value: function _dispatchEvent(name) { - var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var canBubble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var userEvent = document.createEvent('CustomEvent'); - userEvent.initCustomEvent(name, canBubble, cancelable, payload); - this.element.dispatchEvent(userEvent); + _dispatchEvent(name, payload = null, canBubble = false, cancelable = false) { + const userEvent = document.createEvent('CustomEvent'); + userEvent.initCustomEvent(name, canBubble, cancelable, payload); + this.element.dispatchEvent(userEvent); } - }]); - - return _default; -}(_stimulus.Controller); +} -exports["default"] = _default; \ No newline at end of file +export { controller as default }; diff --git a/src/Chartjs/Resources/assets/jest.config.js b/src/Chartjs/Resources/assets/jest.config.js new file mode 100644 index 00000000000..5cc9ba23dab --- /dev/null +++ b/src/Chartjs/Resources/assets/jest.config.js @@ -0,0 +1,5 @@ +const config = require('../../../../jest.config.js'); + +config.setupFilesAfterEnv.push('./test/setup.js'); + +module.exports = config; diff --git a/src/Chartjs/Resources/assets/package.json b/src/Chartjs/Resources/assets/package.json index 809002d3b61..a4c03417264 100644 --- a/src/Chartjs/Resources/assets/package.json +++ b/src/Chartjs/Resources/assets/package.json @@ -13,29 +13,14 @@ } } }, - "scripts": { - "build": "babel src -d dist", - "test": "babel src -d dist && jest", - "lint": "eslint src test" - }, "peerDependencies": { - "chart.js": "^2.9.4", - "@hotwired/stimulus": "^3.0.0" + "@hotwired/stimulus": "^3.0.0", + "chart.js": "^2.9.4" }, "devDependencies": { - "@babel/cli": "^7.12.1", - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.7", - "@symfony/stimulus-testing": "^1.1.0", + "@hotwired/stimulus": "^3.0.0", + "@types/chart.js": "^2.9.34", "chart.js": "^2.9.4", - "jest-canvas-mock": "^2.3.0", - "@hotwired/stimulus": "^3.0.0" - }, - "jest": { - "testRegex": "test/.*\\.test.js", - "setupFilesAfterEnv": [ - "./test/setup.js" - ] + "jest-canvas-mock": "^2.3.0" } } diff --git a/src/Chartjs/Resources/assets/src/controller.js b/src/Chartjs/Resources/assets/src/controller.ts similarity index 56% rename from src/Chartjs/Resources/assets/src/controller.js rename to src/Chartjs/Resources/assets/src/controller.ts index 4779efe4b6b..08032494023 100644 --- a/src/Chartjs/Resources/assets/src/controller.js +++ b/src/Chartjs/Resources/assets/src/controller.ts @@ -14,19 +14,32 @@ import { Chart } from 'chart.js'; export default class extends Controller { connect() { - const payload = JSON.parse(this.element.getAttribute('data-view')); + if (!(this.element instanceof HTMLCanvasElement)) { + throw new Error('Invalid element'); + } + + const viewData = this.element.getAttribute('data-view'); + if (!viewData) { + throw new Error('Missing data-view attribute.'); + } + + const payload = JSON.parse(viewData); if (Array.isArray(payload.options) && 0 === payload.options.length) { payload.options = {}; } this._dispatchEvent('chartjs:pre-connect', { options: payload.options }); - const chart = new Chart(this.element.getContext('2d'), payload); + const canvasContext = this.element.getContext('2d'); + if (!canvasContext) { + throw new Error('Could not getContext() from Element'); + } + const chart = new Chart(canvasContext, payload); this._dispatchEvent('chartjs:connect', { chart }); } - _dispatchEvent(name, payload = null, canBubble = false, cancelable = false) { + _dispatchEvent(name: string, payload: any = null, canBubble = false, cancelable = false) { const userEvent = document.createEvent('CustomEvent'); userEvent.initCustomEvent(name, canBubble, cancelable, payload); diff --git a/src/Chartjs/Resources/assets/test/controller.test.js b/src/Chartjs/Resources/assets/test/controller.test.ts similarity index 98% rename from src/Chartjs/Resources/assets/test/controller.test.js rename to src/Chartjs/Resources/assets/test/controller.test.ts index 8c83d4e5f3c..604c4c99787 100644 --- a/src/Chartjs/Resources/assets/test/controller.test.js +++ b/src/Chartjs/Resources/assets/test/controller.test.ts @@ -12,7 +12,7 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { clearDOM, mountDOM } from '@symfony/stimulus-testing'; -import ChartjsController from '../dist/controller'; +import ChartjsController from '../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Chartjs/Resources/assets/test/setup.js b/src/Chartjs/Resources/assets/test/setup.js index da38f5b52ea..d29398095fd 100644 --- a/src/Chartjs/Resources/assets/test/setup.js +++ b/src/Chartjs/Resources/assets/test/setup.js @@ -9,5 +9,4 @@ 'use strict'; -import '@symfony/stimulus-testing/setup'; import 'jest-canvas-mock'; diff --git a/src/Cropperjs/Resources/assets/.babelrc b/src/Cropperjs/Resources/assets/.babelrc deleted file mode 100644 index 77f182d2ca8..00000000000 --- a/src/Cropperjs/Resources/assets/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/src/Cropperjs/Resources/assets/dist/controller.js b/src/Cropperjs/Resources/assets/dist/controller.js index 2960c339f68..109c4c2b60c 100644 --- a/src/Cropperjs/Resources/assets/dist/controller.js +++ b/src/Cropperjs/Resources/assets/dist/controller.js @@ -1,133 +1,61 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -'use strict'; - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _stimulus = require("@hotwired/stimulus"); - -var _cropperjs = _interopRequireDefault(require("cropperjs")); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -var _default = /*#__PURE__*/function (_Controller) { - _inherits(_default, _Controller); - - var _super = _createSuper(_default); - - function _default() { - _classCallCheck(this, _default); - - return _super.apply(this, arguments); - } - - _createClass(_default, [{ - key: "connect", - value: function connect() { - var _this = this; - - // Create image view - var img = document.createElement('img'); - img.classList.add('cropperjs-image'); - img.src = this.element.getAttribute('data-public-url'); - var parent = this.element.parentNode; - parent.appendChild(img); // Build the cropper - - var options = { - viewMode: parseInt(this.element.getAttribute('data-view-mode')), - dragMode: this.element.getAttribute('data-drag-mode'), - responsive: this.element.hasAttribute('data-responsive'), - restore: this.element.hasAttribute('data-restore'), - checkCrossOrigin: this.element.hasAttribute('data-check-cross-origin'), - checkOrientation: this.element.hasAttribute('data-check-orientation'), - modal: this.element.hasAttribute('data-modal'), - guides: this.element.hasAttribute('data-guides'), - center: this.element.hasAttribute('data-center'), - highlight: this.element.hasAttribute('data-highlight'), - background: this.element.hasAttribute('data-background'), - autoCrop: this.element.hasAttribute('data-auto-crop'), - autoCropArea: parseFloat(this.element.getAttribute('data-auto-crop-area')), - movable: this.element.hasAttribute('data-movable'), - rotatable: this.element.hasAttribute('data-rotatable'), - scalable: this.element.hasAttribute('data-scalable'), - zoomable: this.element.hasAttribute('data-zoomable'), - zoomOnTouch: this.element.hasAttribute('data-zoom-on-touch'), - zoomOnWheel: this.element.hasAttribute('data-zoom-on-wheel'), - wheelZoomRatio: parseFloat(this.element.getAttribute('data-wheel-zoom-ratio')), - cropBoxMovable: this.element.hasAttribute('data-crop-box-movable'), - cropBoxResizable: this.element.hasAttribute('data-crop-box-resizable'), - toggleDragModeOnDblclick: this.element.hasAttribute('data-toggle-drag-mode-on-dblclick'), - minContainerWidth: parseInt(this.element.getAttribute('data-min-container-width')), - minContainerHeight: parseInt(this.element.getAttribute('data-min-container-height')), - minCanvasWidth: parseInt(this.element.getAttribute('data-min-canvas-width')), - minCanvasHeight: parseInt(this.element.getAttribute('data-min-canvas-height')), - minCropBoxWidth: parseInt(this.element.getAttribute('data-min-crop-box-width')), - minCropBoxHeight: parseInt(this.element.getAttribute('data-min-crop-box-height')) - }; - - if (this.element.getAttribute('data-aspect-ratio')) { - options.aspectRatio = parseFloat(this.element.getAttribute('data-aspect-ratio')); - } - - if (this.element.getAttribute('data-initial-aspect-ratio')) { - options.initialAspectRatio = parseFloat(this.element.getAttribute('data-initial-aspect-ratio')); - } - - var cropper = new _cropperjs["default"](img, options); - img.addEventListener('crop', function (event) { - _this.element.value = JSON.stringify(event.detail); - }); - - this._dispatchEvent('cropperjs:connect', { - cropper: cropper, - options: options, - img: img - }); +import { Controller } from '@hotwired/stimulus'; +import Cropper from 'cropperjs'; + +class controller extends Controller { + connect() { + const img = document.createElement('img'); + img.classList.add('cropperjs-image'); + img.src = this.element.getAttribute('data-public-url'); + const parent = this.element.parentNode; + parent.appendChild(img); + const options = { + viewMode: parseInt(this.element.getAttribute('data-view-mode')), + dragMode: this.element.getAttribute('data-drag-mode'), + responsive: this.element.hasAttribute('data-responsive'), + restore: this.element.hasAttribute('data-restore'), + checkCrossOrigin: this.element.hasAttribute('data-check-cross-origin'), + checkOrientation: this.element.hasAttribute('data-check-orientation'), + modal: this.element.hasAttribute('data-modal'), + guides: this.element.hasAttribute('data-guides'), + center: this.element.hasAttribute('data-center'), + highlight: this.element.hasAttribute('data-highlight'), + background: this.element.hasAttribute('data-background'), + autoCrop: this.element.hasAttribute('data-auto-crop'), + autoCropArea: parseFloat(this.element.getAttribute('data-auto-crop-area')), + movable: this.element.hasAttribute('data-movable'), + rotatable: this.element.hasAttribute('data-rotatable'), + scalable: this.element.hasAttribute('data-scalable'), + zoomable: this.element.hasAttribute('data-zoomable'), + zoomOnTouch: this.element.hasAttribute('data-zoom-on-touch'), + zoomOnWheel: this.element.hasAttribute('data-zoom-on-wheel'), + wheelZoomRatio: parseFloat(this.element.getAttribute('data-wheel-zoom-ratio')), + cropBoxMovable: this.element.hasAttribute('data-crop-box-movable'), + cropBoxResizable: this.element.hasAttribute('data-crop-box-resizable'), + toggleDragModeOnDblclick: this.element.hasAttribute('data-toggle-drag-mode-on-dblclick'), + minContainerWidth: parseInt(this.element.getAttribute('data-min-container-width')), + minContainerHeight: parseInt(this.element.getAttribute('data-min-container-height')), + minCanvasWidth: parseInt(this.element.getAttribute('data-min-canvas-width')), + minCanvasHeight: parseInt(this.element.getAttribute('data-min-canvas-height')), + minCropBoxWidth: parseInt(this.element.getAttribute('data-min-crop-box-width')), + minCropBoxHeight: parseInt(this.element.getAttribute('data-min-crop-box-height')), + }; + if (this.element.getAttribute('data-aspect-ratio')) { + options.aspectRatio = parseFloat(this.element.getAttribute('data-aspect-ratio')); + } + if (this.element.getAttribute('data-initial-aspect-ratio')) { + options.initialAspectRatio = parseFloat(this.element.getAttribute('data-initial-aspect-ratio')); + } + const cropper = new Cropper(img, options); + img.addEventListener('crop', (event) => { + this.element.value = JSON.stringify(event.detail); + }); + this._dispatchEvent('cropperjs:connect', { cropper, options, img }); } - }, { - key: "_dispatchEvent", - value: function _dispatchEvent(name) { - var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var canBubble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var userEvent = document.createEvent('CustomEvent'); - userEvent.initCustomEvent(name, canBubble, cancelable, payload); - this.element.dispatchEvent(userEvent); + _dispatchEvent(name, payload = null, canBubble = false, cancelable = false) { + const userEvent = document.createEvent('CustomEvent'); + userEvent.initCustomEvent(name, canBubble, cancelable, payload); + this.element.dispatchEvent(userEvent); } - }]); - - return _default; -}(_stimulus.Controller); +} -exports["default"] = _default; \ No newline at end of file +export { controller as default }; diff --git a/src/Cropperjs/Resources/assets/jest.config.js b/src/Cropperjs/Resources/assets/jest.config.js new file mode 100644 index 00000000000..6358ddf2772 --- /dev/null +++ b/src/Cropperjs/Resources/assets/jest.config.js @@ -0,0 +1 @@ +module.exports = require('../../../../jest.config.js'); diff --git a/src/Cropperjs/Resources/assets/package.json b/src/Cropperjs/Resources/assets/package.json index eba3c7c5bc5..bb78fe35c7d 100644 --- a/src/Cropperjs/Resources/assets/package.json +++ b/src/Cropperjs/Resources/assets/package.json @@ -17,29 +17,12 @@ } } }, - "scripts": { - "build": "babel src -d dist", - "test": "babel src -d dist && jest", - "lint": "eslint src test" - }, "peerDependencies": { "cropperjs": "^1.5.9", "@hotwired/stimulus": "^3.0.0" }, "devDependencies": { - "@babel/cli": "^7.12.1", - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.7", - "@symfony/stimulus-testing": "^1.1.0", "cropperjs": "^1.5.9", "@hotwired/stimulus": "^3.0.0" - }, - "jest": { - "testRegex": "test/.*\\.test.js", - "setupFilesAfterEnv": [ - "./test/setup.js" - ], - "testURL": "https://symfony.com" } } diff --git a/src/Cropperjs/Resources/assets/postcss.config.js b/src/Cropperjs/Resources/assets/postcss.config.js deleted file mode 100644 index ffb2269ac8c..00000000000 --- a/src/Cropperjs/Resources/assets/postcss.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - plugins: [ - require('cssnano')({ - preset: 'default', - }), - ], -}; diff --git a/src/Cropperjs/Resources/assets/src/controller.js b/src/Cropperjs/Resources/assets/src/controller.ts similarity index 99% rename from src/Cropperjs/Resources/assets/src/controller.js rename to src/Cropperjs/Resources/assets/src/controller.ts index ffb8ed7d81e..3e15fe043f9 100644 --- a/src/Cropperjs/Resources/assets/src/controller.js +++ b/src/Cropperjs/Resources/assets/src/controller.ts @@ -23,7 +23,7 @@ export default class extends Controller { parent.appendChild(img); // Build the cropper - let options = { + const options = { viewMode: parseInt(this.element.getAttribute('data-view-mode')), dragMode: this.element.getAttribute('data-drag-mode'), responsive: this.element.hasAttribute('data-responsive'), diff --git a/src/Cropperjs/Resources/assets/test/controller.test.js b/src/Cropperjs/Resources/assets/test/controller.test.ts similarity index 98% rename from src/Cropperjs/Resources/assets/test/controller.test.js rename to src/Cropperjs/Resources/assets/test/controller.test.ts index b6a785b7e56..9274efc1d5d 100644 --- a/src/Cropperjs/Resources/assets/test/controller.test.js +++ b/src/Cropperjs/Resources/assets/test/controller.test.ts @@ -12,7 +12,7 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { clearDOM, mountDOM } from '@symfony/stimulus-testing'; -import CropperjsController from '../dist/controller'; +import CropperjsController from '../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Dropzone/Resources/assets/.babelrc b/src/Dropzone/Resources/assets/.babelrc deleted file mode 100644 index 77f182d2ca8..00000000000 --- a/src/Dropzone/Resources/assets/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/src/Dropzone/Resources/assets/dist/controller.js b/src/Dropzone/Resources/assets/dist/controller.js index 9da2caba042..14304b9235f 100644 --- a/src/Dropzone/Resources/assets/dist/controller.js +++ b/src/Dropzone/Resources/assets/dist/controller.js @@ -1,142 +1,54 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -'use strict'; - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _stimulus = require("@hotwired/stimulus"); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -var _default = /*#__PURE__*/function (_Controller) { - _inherits(_default, _Controller); - - var _super = _createSuper(_default); - - function _default() { - _classCallCheck(this, _default); - - return _super.apply(this, arguments); - } - - _createClass(_default, [{ - key: "connect", - value: function connect() { - var _this = this; - - // Reset when connecting to work with Turbolinks - this.clear(); // Clear on click on clear button - - this.previewClearButtonTarget.addEventListener('click', function () { - return _this.clear(); - }); // Listen on input change and display preview - - this.inputTarget.addEventListener('change', function (event) { - return _this.onInputChange(event); - }); - - this._dispatchEvent('dropzone:connect'); +import { Controller } from '@hotwired/stimulus'; + +class default_1 extends Controller { + connect() { + this.clear(); + this.previewClearButtonTarget.addEventListener('click', () => this.clear()); + this.inputTarget.addEventListener('change', (event) => this.onInputChange(event)); + this._dispatchEvent('dropzone:connect'); } - }, { - key: "clear", - value: function clear() { - this.inputTarget.value = ''; - this.inputTarget.style.display = 'block'; - this.placeholderTarget.style.display = 'block'; - this.previewTarget.style.display = 'none'; - this.previewImageTarget.style.display = 'none'; - this.previewImageTarget.style.backgroundImage = 'none'; - this.previewFilenameTarget.textContent = ''; - - this._dispatchEvent('dropzone:clear'); + clear() { + this.inputTarget.value = ''; + this.inputTarget.style.display = 'block'; + this.placeholderTarget.style.display = 'block'; + this.previewTarget.style.display = 'none'; + this.previewImageTarget.style.display = 'none'; + this.previewImageTarget.style.backgroundImage = 'none'; + this.previewFilenameTarget.textContent = ''; + this._dispatchEvent('dropzone:clear'); } - }, { - key: "onInputChange", - value: function onInputChange(event) { - var file = event.target.files[0]; - - if (typeof file === 'undefined') { - return; - } // Hide the input and placeholder - - - this.inputTarget.style.display = 'none'; - this.placeholderTarget.style.display = 'none'; // Show the filename in preview - - this.previewFilenameTarget.textContent = file.name; - this.previewTarget.style.display = 'flex'; // If the file is an image, load it and display it as preview - - this.previewImageTarget.style.display = 'none'; - - if (file.type && file.type.indexOf('image') !== -1) { - this._populateImagePreview(file); - } - - this._dispatchEvent('dropzone:change', file); + onInputChange(event) { + const file = event.target.files[0]; + if (typeof file === 'undefined') { + return; + } + this.inputTarget.style.display = 'none'; + this.placeholderTarget.style.display = 'none'; + this.previewFilenameTarget.textContent = file.name; + this.previewTarget.style.display = 'flex'; + this.previewImageTarget.style.display = 'none'; + if (file.type && file.type.indexOf('image') !== -1) { + this._populateImagePreview(file); + } + this._dispatchEvent('dropzone:change', file); } - }, { - key: "_populateImagePreview", - value: function _populateImagePreview(file) { - var _this2 = this; - - if (typeof FileReader === 'undefined') { - // FileReader API not available, skip - return; - } - - var reader = new FileReader(); - reader.addEventListener('load', function (event) { - _this2.previewImageTarget.style.display = 'block'; - _this2.previewImageTarget.style.backgroundImage = 'url("' + event.target.result + '")'; - }); - reader.readAsDataURL(file); + _populateImagePreview(file) { + if (typeof FileReader === 'undefined') { + return; + } + const reader = new FileReader(); + reader.addEventListener('load', (event) => { + this.previewImageTarget.style.display = 'block'; + this.previewImageTarget.style.backgroundImage = 'url("' + event.target.result + '")'; + }); + reader.readAsDataURL(file); } - }, { - key: "_dispatchEvent", - value: function _dispatchEvent(name) { - var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var canBubble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var userEvent = document.createEvent('CustomEvent'); - userEvent.initCustomEvent(name, canBubble, cancelable, payload); - this.element.dispatchEvent(userEvent); + _dispatchEvent(name, payload = null, canBubble = false, cancelable = false) { + const userEvent = document.createEvent('CustomEvent'); + userEvent.initCustomEvent(name, canBubble, cancelable, payload); + this.element.dispatchEvent(userEvent); } - }]); - - return _default; -}(_stimulus.Controller); - -exports["default"] = _default; +} +default_1.targets = ['input', 'placeholder', 'preview', 'previewClearButton', 'previewFilename', 'previewImage']; -_defineProperty(_default, "targets", ['input', 'placeholder', 'preview', 'previewClearButton', 'previewFilename', 'previewImage']); \ No newline at end of file +export { default_1 as default }; diff --git a/src/Dropzone/Resources/assets/jest.config.js b/src/Dropzone/Resources/assets/jest.config.js new file mode 100644 index 00000000000..6358ddf2772 --- /dev/null +++ b/src/Dropzone/Resources/assets/jest.config.js @@ -0,0 +1 @@ +module.exports = require('../../../../jest.config.js'); diff --git a/src/Dropzone/Resources/assets/package.json b/src/Dropzone/Resources/assets/package.json index 34e9b6bf9ab..8087ae90540 100644 --- a/src/Dropzone/Resources/assets/package.json +++ b/src/Dropzone/Resources/assets/package.json @@ -16,26 +16,10 @@ } } }, - "scripts": { - "build": "babel src -d dist", - "test": "babel src -d dist && jest", - "lint": "eslint src test" - }, "peerDependencies": { "@hotwired/stimulus": "^3.0.0" }, "devDependencies": { - "@babel/cli": "^7.12.1", - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.7", - "@symfony/stimulus-testing": "^1.1.0", "@hotwired/stimulus": "^3.0.0" - }, - "jest": { - "testRegex": "test/.*\\.test.js", - "setupFilesAfterEnv": [ - "./test/setup.js" - ] } } diff --git a/src/Dropzone/Resources/assets/src/controller.js b/src/Dropzone/Resources/assets/src/controller.ts similarity index 100% rename from src/Dropzone/Resources/assets/src/controller.js rename to src/Dropzone/Resources/assets/src/controller.ts diff --git a/src/Dropzone/Resources/assets/test/controller.test.js b/src/Dropzone/Resources/assets/test/controller.test.ts similarity index 98% rename from src/Dropzone/Resources/assets/test/controller.test.js rename to src/Dropzone/Resources/assets/test/controller.test.ts index 8c7e3956592..0821b9f48e8 100644 --- a/src/Dropzone/Resources/assets/test/controller.test.js +++ b/src/Dropzone/Resources/assets/test/controller.test.ts @@ -13,7 +13,7 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import user from '@testing-library/user-event'; import { clearDOM, mountDOM } from '@symfony/stimulus-testing'; -import DropzoneController from '../dist/controller'; +import DropzoneController from '../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/Dropzone/Resources/assets/test/setup.js b/src/Dropzone/Resources/assets/test/setup.js deleted file mode 100644 index ddd4655c30e..00000000000 --- a/src/Dropzone/Resources/assets/test/setup.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -'use strict'; - -import '@symfony/stimulus-testing/setup'; diff --git a/src/LazyImage/Resources/assets/.babelrc b/src/LazyImage/Resources/assets/.babelrc deleted file mode 100644 index 77f182d2ca8..00000000000 --- a/src/LazyImage/Resources/assets/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": ["@babel/env"], - "plugins": ["@babel/plugin-proposal-class-properties"] -} diff --git a/src/LazyImage/Resources/assets/dist/controller.js b/src/LazyImage/Resources/assets/dist/controller.js index cb303cad8e7..ef8a138fe1f 100644 --- a/src/LazyImage/Resources/assets/dist/controller.js +++ b/src/LazyImage/Resources/assets/dist/controller.js @@ -1,85 +1,20 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -'use strict'; - -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; - -var _stimulus = require("@hotwired/stimulus"); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } - -function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } - -function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } - -function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } - -function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } - -function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - -function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - -var _default = /*#__PURE__*/function (_Controller) { - _inherits(_default, _Controller); - - var _super = _createSuper(_default); - - function _default() { - _classCallCheck(this, _default); - - return _super.apply(this, arguments); - } - - _createClass(_default, [{ - key: "connect", - value: function connect() { - var _this = this; - - var hd = new Image(); - hd.addEventListener('load', function () { - _this.element.src = _this.element.getAttribute('data-hd-src'); - - _this._dispatchEvent('lazy-image:ready', { - hd: hd +import { Controller } from '@hotwired/stimulus'; + +class controller extends Controller { + connect() { + const hd = new Image(); + hd.addEventListener('load', () => { + this.element.src = this.element.getAttribute('data-hd-src'); + this._dispatchEvent('lazy-image:ready', { hd }); }); - }); - hd.src = this.element.getAttribute('data-hd-src'); - - this._dispatchEvent('lazy-image:connect', { - hd: hd - }); + hd.src = this.element.getAttribute('data-hd-src'); + this._dispatchEvent('lazy-image:connect', { hd }); } - }, { - key: "_dispatchEvent", - value: function _dispatchEvent(name) { - var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - var canBubble = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var userEvent = document.createEvent('CustomEvent'); - userEvent.initCustomEvent(name, canBubble, cancelable, payload); - this.element.dispatchEvent(userEvent); + _dispatchEvent(name, payload = null, canBubble = false, cancelable = false) { + const userEvent = document.createEvent('CustomEvent'); + userEvent.initCustomEvent(name, canBubble, cancelable, payload); + this.element.dispatchEvent(userEvent); } - }]); - - return _default; -}(_stimulus.Controller); +} -exports["default"] = _default; \ No newline at end of file +export { controller as default }; diff --git a/src/LazyImage/Resources/assets/jest.config.js b/src/LazyImage/Resources/assets/jest.config.js new file mode 100644 index 00000000000..6358ddf2772 --- /dev/null +++ b/src/LazyImage/Resources/assets/jest.config.js @@ -0,0 +1 @@ +module.exports = require('../../../../jest.config.js'); diff --git a/src/LazyImage/Resources/assets/package.json b/src/LazyImage/Resources/assets/package.json index 9bab47acf6c..7114810473a 100644 --- a/src/LazyImage/Resources/assets/package.json +++ b/src/LazyImage/Resources/assets/package.json @@ -13,27 +13,10 @@ } } }, - "scripts": { - "build": "babel src -d dist", - "test": "babel src -d dist && jest", - "lint": "eslint src test" - }, "peerDependencies": { "@hotwired/stimulus": "^3.0.0" }, "devDependencies": { - "@babel/cli": "^7.12.1", - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.7", - "@symfony/stimulus-testing": "^1.1.0", "@hotwired/stimulus": "^3.0.0" - }, - "jest": { - "testRegex": "test/.*\\.test.js", - "setupFilesAfterEnv": [ - "./test/setup.js" - ], - "testURL": "https://symfony.com" } } diff --git a/src/LazyImage/Resources/assets/src/controller.js b/src/LazyImage/Resources/assets/src/controller.ts similarity index 100% rename from src/LazyImage/Resources/assets/src/controller.js rename to src/LazyImage/Resources/assets/src/controller.ts diff --git a/src/LazyImage/Resources/assets/test/controller.test.js b/src/LazyImage/Resources/assets/test/controller.test.ts similarity index 96% rename from src/LazyImage/Resources/assets/test/controller.test.js rename to src/LazyImage/Resources/assets/test/controller.test.ts index 1d96aaa91f6..aee473991e8 100644 --- a/src/LazyImage/Resources/assets/test/controller.test.js +++ b/src/LazyImage/Resources/assets/test/controller.test.ts @@ -12,7 +12,7 @@ import { Application, Controller } from '@hotwired/stimulus'; import { getByTestId, waitFor } from '@testing-library/dom'; import { clearDOM, mountDOM } from '@symfony/stimulus-testing'; -import LazyImageController from '../dist/controller'; +import LazyImageController from '../src/controller'; // Controller used to check the actual controller was properly booted class CheckController extends Controller { diff --git a/src/LazyImage/Resources/assets/test/setup.js b/src/LazyImage/Resources/assets/test/setup.js deleted file mode 100644 index ddd4655c30e..00000000000 --- a/src/LazyImage/Resources/assets/test/setup.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * This file is part of the Symfony package. - * - * (c) Fabien Potencier - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -'use strict'; - -import '@symfony/stimulus-testing/setup'; diff --git a/src/LiveComponent/assets/.npmignore b/src/LiveComponent/assets/.npmignore deleted file mode 100644 index caf56370230..00000000000 --- a/src/LiveComponent/assets/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.babelrc -.gitignore -yarn.lock -/.git -/node_modules -/test diff --git a/src/LiveComponent/assets/babel.config.json b/src/LiveComponent/assets/babel.config.json deleted file mode 100644 index 7ff86ec1c81..00000000000 --- a/src/LiveComponent/assets/babel.config.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "presets": [ - [ - "@babel/env", - { - "targets": { - "node": "current", - "ie": "11" - } - } - ] - ], - "exclude": "node_modules/**", - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-transform-runtime" - ] -} diff --git a/src/LiveComponent/assets/dist/live-controller.esm.js b/src/LiveComponent/assets/dist/live-controller.esm.js deleted file mode 100644 index 4d643cc89b0..00000000000 --- a/src/LiveComponent/assets/dist/live-controller.esm.js +++ /dev/null @@ -1,2132 +0,0 @@ -import _slicedToArray from '@babel/runtime/helpers/slicedToArray'; -import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray'; -import _classCallCheck from '@babel/runtime/helpers/classCallCheck'; -import _createClass from '@babel/runtime/helpers/createClass'; -import _assertThisInitialized from '@babel/runtime/helpers/assertThisInitialized'; -import _inherits from '@babel/runtime/helpers/inherits'; -import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn'; -import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf'; -import _defineProperty from '@babel/runtime/helpers/defineProperty'; -import { Controller } from '@hotwired/stimulus'; -import _typeof from '@babel/runtime/helpers/typeof'; -import 'core-js/web/url'; -import 'core-js/es/promise'; -import 'core-js/es/array/find-index'; - -var DOCUMENT_FRAGMENT_NODE = 11; - -function morphAttrs(fromNode, toNode) { - var toNodeAttrs = toNode.attributes; - var attr; - var attrName; - var attrNamespaceURI; - var attrValue; - var fromValue; // document-fragments dont have attributes so lets not do anything - - if (toNode.nodeType === DOCUMENT_FRAGMENT_NODE || fromNode.nodeType === DOCUMENT_FRAGMENT_NODE) { - return; - } // update attributes on original DOM element - - - for (var i = toNodeAttrs.length - 1; i >= 0; i--) { - attr = toNodeAttrs[i]; - attrName = attr.name; - attrNamespaceURI = attr.namespaceURI; - attrValue = attr.value; - - if (attrNamespaceURI) { - attrName = attr.localName || attrName; - fromValue = fromNode.getAttributeNS(attrNamespaceURI, attrName); - - if (fromValue !== attrValue) { - if (attr.prefix === 'xmlns') { - attrName = attr.name; // It's not allowed to set an attribute with the XMLNS namespace without specifying the `xmlns` prefix - } - - fromNode.setAttributeNS(attrNamespaceURI, attrName, attrValue); - } - } else { - fromValue = fromNode.getAttribute(attrName); - - if (fromValue !== attrValue) { - fromNode.setAttribute(attrName, attrValue); - } - } - } // Remove any extra attributes found on the original DOM element that - // weren't found on the target element. - - - var fromNodeAttrs = fromNode.attributes; - - for (var d = fromNodeAttrs.length - 1; d >= 0; d--) { - attr = fromNodeAttrs[d]; - attrName = attr.name; - attrNamespaceURI = attr.namespaceURI; - - if (attrNamespaceURI) { - attrName = attr.localName || attrName; - - if (!toNode.hasAttributeNS(attrNamespaceURI, attrName)) { - fromNode.removeAttributeNS(attrNamespaceURI, attrName); - } - } else { - if (!toNode.hasAttribute(attrName)) { - fromNode.removeAttribute(attrName); - } - } - } -} - -var range; // Create a range object for efficently rendering strings to elements. - -var NS_XHTML = 'http://www.w3.org/1999/xhtml'; -var doc = typeof document === 'undefined' ? undefined : document; -var HAS_TEMPLATE_SUPPORT = !!doc && 'content' in doc.createElement('template'); -var HAS_RANGE_SUPPORT = !!doc && doc.createRange && 'createContextualFragment' in doc.createRange(); - -function createFragmentFromTemplate(str) { - var template = doc.createElement('template'); - template.innerHTML = str; - return template.content.childNodes[0]; -} - -function createFragmentFromRange(str) { - if (!range) { - range = doc.createRange(); - range.selectNode(doc.body); - } - - var fragment = range.createContextualFragment(str); - return fragment.childNodes[0]; -} - -function createFragmentFromWrap(str) { - var fragment = doc.createElement('body'); - fragment.innerHTML = str; - return fragment.childNodes[0]; -} -/** - * This is about the same - * var html = new DOMParser().parseFromString(str, 'text/html'); - * return html.body.firstChild; - * - * @method toElement - * @param {String} str - */ - - -function toElement(str) { - str = str.trim(); - - if (HAS_TEMPLATE_SUPPORT) { - // avoid restrictions on content for things like `Hi` which - // createContextualFragment doesn't support - //