diff --git a/.eslintignore b/.eslintignore index 4a113378ce..a0ca1e55c8 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,7 +1,14 @@ -src/shared -shared.js -store.js -test/test.js -test/setup.js **/_actual.js -**/expected.js \ No newline at end of file +**/expected.js +test/*/samples/*/output.js +node_modules + +# output files +animate/*.js +esing/*.js +internal/*.js +motion/*.js +store/*.js +transition/*.js +index.js +compiler.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..2c7f2ed1b4 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,99 @@ +module.exports = { + root: true, + rules: { + indent: 'off', + 'no-unused-vars': 'off', + semi: [2, 'always'], + 'keyword-spacing': [2, { before: true, after: true }], + 'space-before-blocks': [2, 'always'], + 'no-mixed-spaces-and-tabs': [2, 'smart-tabs'], + 'no-cond-assign': 0, + 'object-shorthand': [2, 'always'], + 'no-const-assign': 2, + 'no-class-assign': 2, + 'no-this-before-super': 2, + 'no-var': 2, + 'no-unreachable': 2, + 'valid-typeof': 2, + 'quote-props': [2, 'as-needed'], + 'one-var': [2, 'never'], + 'prefer-arrow-callback': 2, + 'prefer-const': [2, { destructuring: 'all' }], + 'arrow-spacing': 2, + 'no-inner-declarations': 0, + 'require-atomic-updates': 'off', + '@typescript-eslint/indent': [ + 'error', + 'tab', + { + SwitchCase: 1, + ignoredNodes: ['TemplateLiteral'] + } + ], + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/array-type': ['error', 'array-simple'], + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + argsIgnorePattern: '^_' + } + ], + '@typescript-eslint/no-object-literal-type-assertion': [ + 'error', + { + allowAsParameter: true + } + ], + '@typescript-eslint/no-unused-vars': 'off' + }, + globals: { + globalThis: false + }, + env: { + es6: true, + browser: true, + node: true, + mocha: true + }, + extends: [ + 'eslint:recommended', + 'plugin:import/errors', + 'plugin:import/warnings', + 'plugin:import/typescript', + 'plugin:@typescript-eslint/recommended' + ], + parserOptions: { + ecmaVersion: 9, + sourceType: 'module' + }, + plugins: ['svelte3'], + settings: { + 'import/core-modules': [ + 'svelte', + 'svelte/internal', + 'svelte/store', + 'svelte/easing', + 'estree' + ], + 'svelte3/compiler': require('./compiler') + }, + overrides: [ + { + files: ['*.js'], + rules: { + '@typescript-eslint/no-var-requires': 'off' + } + }, + { + files: ['*.svelte'], + processor: 'svelte3/svelte3', + rules: { + '@typescript-eslint/indent': 'off' + } + } + ] +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7e8c26382a..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "root": true, - "rules": { - "indent": [2, "tab", { "SwitchCase": 1 }], - "semi": [2, "always"], - "keyword-spacing": [2, { "before": true, "after": true }], - "space-before-blocks": [2, "always"], - "no-mixed-spaces-and-tabs": [2, "smart-tabs"], - "no-cond-assign": 0, - "no-unused-vars": 2, - "object-shorthand": [2, "always"], - "no-const-assign": 2, - "no-class-assign": 2, - "no-this-before-super": 2, - "no-var": 2, - "no-unreachable": 2, - "valid-typeof": 2, - "quote-props": [2, "as-needed"], - "one-var": [2, "never"], - "prefer-arrow-callback": 2, - "prefer-const": [2, { "destructuring": "all" }], - "arrow-spacing": 2, - "no-inner-declarations": 0 - }, - "env": { - "es6": true, - "browser": true, - "node": true, - "mocha": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings" - ], - "parserOptions": { - "ecmaVersion": 9, - "sourceType": "module" - }, - "settings": { - "import/core-modules": ["svelte"], - "svelte3/extensions": ["html"] - } -} diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 2ed2b0c713..0000000000 --- a/.flowconfig +++ /dev/null @@ -1,9 +0,0 @@ -[ignore] -/dist/.* - -[include] - -[libs] - -[options] -strip_root=true diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index eb49e78156..0000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.svelte linguist-language=HTML diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index e7bd60d3f4..6871094f5c 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,21 +1,26 @@ - +Thanks for being part of Svelte! +------- diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..f5369e9991 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,52 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'Bug' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**Logs** +Please include browser console and server logs around the time this bug occurred. + +**To Reproduce** +To help us help you, if you've found a bug please consider the following: + +* If you can demonstrate the bug using https://svelte.dev/repl, please do. +* If that's not possible, we recommend creating a small repo that illustrates the problem. +* Reproductions should be small, self-contained, correct examples – http://sscce.org. + +Occasionally, this won't be possible, and that's fine – we still appreciate you raising the issue. But please understand that Svelte is run by unpaid volunteers in their free time, and issues that follow these instructions will get fixed faster. + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Stacktraces** +If you have a stack trace to include, we recommend putting inside a `
` block for the sake of the thread's readability: + +
+ Stack trace + + Stack trace goes here... +
+ +**Information about your Svelte project:** +- Your browser and the version: (e.x. Chrome 52.1, Firefox 48.0, IE 10) + +- Your operating system: (e.x. OS X 10, Ubuntu Linux 19.10, Windows XP, etc) + +- Svelte version (Please check you can reproduce the issue with the latest release!) + +- Whether your project uses Webpack or Rollup + +**Severity** +How severe an issue is this bug to you? Is this annoying, blocking some users, blocking an upgrade or blocking your usage of Svelte entirely? + +Note: the more honest and specific you are here the more we will take you seriously. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..e533c21c96 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,23 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: 'New Feature' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. For example: I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**How important is this feature to you?** +Note: the more honest and specific you are here the more we will take you seriously. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/questions-and-help.md b/.github/ISSUE_TEMPLATE/questions-and-help.md new file mode 100644 index 0000000000..a6e0dc6e19 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/questions-and-help.md @@ -0,0 +1,12 @@ +--- +name: Questions and help +about: If you think you need help with something related to Svelte +title: '' +labels: 'Question' +assignees: '' + +--- + +This issue tracker is intended to collect bug reports and feature requests. + +For help with installation, information on how features work, or questions about specific features of Svelte, please come and join us in the [Svelte Discord](https://svelte.dev/chat), or ask your question on [Stack Overflow](https://stackoverflow.com/questions/tagged/svelte). Any issues open for help requests will be closed to keep from clogging up the issue tracker. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d2882acf4a..1e77e0337a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,8 @@ - + +### Before submitting the PR, please make sure you do the following +- [ ] It's really useful if your PR relates to an outstanding issue, so please reference it in your PR, or create an explanatory one for discussion. In many cases features are absent for a reason. +- [ ] This message body should clearly illustrate what problems it solves. If there are related issues, remember to reference them. +- [ ] Ideally, include a test that fails without this PR but passes with it. PRs will only be merged once they pass CI. (Remember to `npm run lint`!) +### Tests +- [ ] Run the tests tests with `npm test` or `yarn test`) diff --git a/.gitignore b/.gitignore index 06671edc2b..590bd1d88e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,18 @@ +.idea .DS_Store .nyc_output node_modules *.map -/src/compile/internal-exports.ts -/compiler.js -/index.js -/internal.* -/store.js -/easing.js -/motion.* -/transition.js -/animate.js +/src/compiler/compile/internal_exports.ts +/compiler.d.ts +/compiler.*js +/index.*js +/internal +/store +/easing +/motion +/transition +/animate /scratch/ /coverage/ /coverage.lcov/ @@ -20,6 +22,7 @@ node_modules /test/sourcemaps/samples/*/output.css.map /yarn-error.log _actual*.* +/types /site/cypress/screenshots/ /site/__sapper__/ @@ -27,5 +30,6 @@ _actual*.* /site/.sessions /site/static/svelte-app.json /site/static/contributors.jpg +/site/static/workers /site/scripts/svelte-app /site/src/routes/_contributors.js diff --git a/.travis.yml b/.travis.yml index aeadd48f8d..a4603a26e2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: node_js node_js: - - "node" - + - "8" + - "10" + - "12" env: global: - BUILD_TIMEOUT=20000 diff --git a/CHANGELOG.md b/CHANGELOG.md index 884b2bae9f..553e83c735 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,173 @@ # Svelte changelog +## 3.6.9 + +* Always update derived stores with a derived input whose value does not change ([#3191](https://github.com/sveltejs/svelte/issues/3191)) + +## 3.6.8 + +* Preserve global keyframes that don't match local elements ([#3228](https://github.com/sveltejs/svelte/issues/3228)) +* Fix spread/`class:` combination ([#3242](https://github.com/sveltejs/svelte/pull/3242)) +* Never scope `:root` selector ([#3250](https://github.com/sveltejs/svelte/pull/3250)) +* Prevent trailing commas in function arguments ([#3255](https://github.com/sveltejs/svelte/pull/3260)) + +## 3.6.7 + +* Prevent corruption of outro callbacks with nested keyed each blocks ([#3209](https://github.com/sveltejs/svelte/pull/3209)) +* Prevent cursor jumping in bound input in Safari ([#3199](https://github.com/sveltejs/svelte/issues/3199)) +* Make resize listener object unfocusable ([#3206](https://github.com/sveltejs/svelte/issues/3206)) + +## 3.6.6 + +* Prevent dynamic components being detached twice ([#3113](https://github.com/sveltejs/svelte/issues/3113), [#2086](https://github.com/sveltejs/svelte/issues/2086)) + +## 3.6.5 + +* Handle RxJS-style observables with `get` ([#3153](https://github.com/sveltejs/svelte/issues/3153)) +* Pass `let` values to bindings ([#3140](https://github.com/sveltejs/svelte/issues/3140)) +* Escape `@` symbols in props ([#3173](https://github.com/sveltejs/svelte/issues/3173)) +* Scale crossfaded elements ([#3175](https://github.com/sveltejs/svelte/pull/3175)) + +## 3.6.4 + +* Run `onMount` functions in correct order, and before initial `afterUpdate` functions ([#2281](https://github.com/sveltejs/svelte/issues/2281)) +* Fix code transformation for shorthand methods ([#2906](https://github.com/sveltejs/svelte/issues/2906)) +* Fix assignments in inline functions ([#3038](https://github.com/sveltejs/svelte/issues/3038)) + +## 3.6.3 + +* Fix await block mounting inside removed if block ([#1496](https://github.com/sveltejs/svelte/issues/1496)) +* Update when element references are removed ([#2034](https://github.com/sveltejs/svelte/issues/2034)) +* Don't attempt to serialize non-string values in server-rendered bindings ([#2135](https://github.com/sveltejs/svelte/issues/2135)) +* Recognise dependencies in function expressions ([#2693](https://github.com/sveltejs/svelte/issues/2693)) +* Scope pseudo-class selectors without class/type ([#1705](https://github.com/sveltejs/svelte/issues/1705)) +* Allow nested at-rules ([#3135](https://github.com/sveltejs/svelte/issues/3135)) +* Allow attributes to contain `=` characters ([#3149](https://github.com/sveltejs/svelte/pull/3149)) + +## 3.6.2 + +* Fix placement of each-else block ([#2917](https://github.com/sveltejs/svelte/issues/2917)) +* Make context accessible to `bind:this` ([#2806](https://github.com/sveltejs/svelte/issues/2806)) +* Pass hoisted values to slots ([#2586](https://github.com/sveltejs/svelte/issues/2586)) + +## 3.6.1 + +* Fix escaping of `@` in dev mode debug filename ([#3114](https://github.com/sveltejs/svelte/pull/3114)) + +## 3.6.0 + +* Add `innerHTML` and `textContent` bindings for `contenteditable` elements ([#2996](https://github.com/sveltejs/svelte/pull/2996)) +* Fix destructuring assignments where targets are member expressions ([#3092](https://github.com/sveltejs/svelte/issues/3092)) +* Deconflict with used globals ([#2963](https://github.com/sveltejs/svelte/pull/2963)) +* Always run `onDestroy` functions, not just for detaching components ([#3058](https://github.com/sveltejs/svelte/issues/3058)) +* Fix scope analysis around catch clauses ([#3064](https://github.com/sveltejs/svelte/issues/3064)) +* Add error constructors to known globals ([#3064](https://github.com/sveltejs/svelte/issues/3064)) +* Always bail out of hoisting on encountering local state in function definition ([#3044](https://github.com/sveltejs/svelte/issues/3044)) +* Fix incorrect merging of top-level text nodes ([#3027](https://github.com/sveltejs/svelte/issues/3027)) +* Handle removal of components in each blocks without props ([#3035](https://github.com/sveltejs/svelte/issues/3035)) +* Only call subscriber once when resubscribing to a store ([#3022](https://github.com/sveltejs/svelte/issues/3022)) +* Check for existence of dynamic component before introing ([#3054](https://github.com/sveltejs/svelte/issues/3054)) +* Sanitize names of bubbled event handlers ([#2923](https://github.com/sveltejs/svelte/issues/2923)) + + +## 3.5.4 + +* Preserve whitespace at the boundaries of `{#each}` blocks ([#713](https://github.com/sveltejs/svelte/issues/713)) +* Fix dynamic `bind:this` on components ([#2333](https://github.com/sveltejs/svelte/issues/2333)) +* Fix binding to values in a component when it uses `$$props` ([#2725](https://github.com/sveltejs/svelte/issues/2725)) +* Fix parsing ambiguous HTML entities ([#3071](https://github.com/sveltejs/svelte/pull/3071)) + +## 3.5.3 + +* Don't double-destroy keyed each blocks with outros ([#3055](https://github.com/sveltejs/svelte/issues/3055)) + +## 3.5.2 + +* Prevent duplicated outros causing errors ([#3001](https://github.com/sveltejs/svelte/issues/3001)) +* Fix automatic name generation ([#2843](https://github.com/sveltejs/svelte/issues/2843)) +* Fix .d.ts stubs ([#3009](https://github.com/sveltejs/svelte/pull/3009)) +* Don't strip non-breaking spaces ([#3014](https://github.com/sveltejs/svelte/issues/3014)) +* Fix `requestAnimationFrame` context ([#2933](https://github.com/sveltejs/svelte/issues/2933)) +* Allow space before attribute value ([#3026](https://github.com/sveltejs/svelte/issues/3026)) +* Remove null/undefined attributes ([#1434](https://github.com/sveltejs/svelte/issues/1434)) +* Fix whitespace in static markup ([#3030](https://github.com/sveltejs/svelte/pull/3030)) + +## 3.5.1 + +* Accommodate webpack idiosyncracies + +## 3.5.0 + +* Update package folder structure ([#2887](https://github.com/sveltejs/svelte/pull/2887)) +* Support `once` modifier on component events ([#2654](https://github.com/sveltejs/svelte/issues/2654)) +* Allow empty `` tags ([#2980](https://github.com/sveltejs/svelte/issues/2980)) +* Render textarea binding values inside element ([#2975](https://github.com/sveltejs/svelte/pull/2975)) +* Fix delayed animation glitch ([#2871](https://github.com/sveltejs/svelte/issues/2871)) +* Solve diamond dependencies problem with stores ([#2660](https://github.com/sveltejs/svelte/issues/2660)) +* Fix missing outros inside each blocks ([#2689](https://github.com/sveltejs/svelte/issues/2689)) +* Support animations without transitions ([#2908](https://github.com/sveltejs/svelte/issues/2908)) +* Add missing transition events ([#2912](https://github.com/sveltejs/svelte/pull/2912)) + + +## 3.4.4 + +* Publish type declaration files ([#2874](https://github.com/sveltejs/svelte/issues/2874)) +* Don't trigger updates for unreferenced values ([#2865](https://github.com/sveltejs/svelte/pull/2865)) +* Omit readonly bindings from SSR output ([#2339](https://github.com/sveltejs/svelte/issues/2339)) +* Prevent outdated animation CSS ([#2871](https://github.com/sveltejs/svelte/issues/2871)) +* Repair dynamic `{@html ...}` in head ([#2880](https://github.com/sveltejs/svelte/pull/2880)) +* Don't create unknown prop warnings for internal props, or if component has `$$props` ([#2881](https://github.com/sveltejs/svelte/pull/2881)) + + +## 3.4.3 + +* Add type declaration files for everything ([#2842](https://github.com/sveltejs/svelte/pull/2842)) +* Prevent `svelte/store` being bundled ([#2786](https://github.com/sveltejs/svelte/issues/2786)) +* Warn on unknown props in dev mode ([#2840](https://github.com/sveltejs/svelte/pull/2840)) +* Treat `requestAnimationFrame` as a no-op on the server ([#2856](https://github.com/sveltejs/svelte/pull/2856)) +* Add `raw` property to AST's `Text` nodes ([#2714](https://github.com/sveltejs/svelte/issues/2714)) +* Add `<details bind:open>` ([#2854](https://github.com/sveltejs/svelte/issues/2854)) + +## 3.4.2 + +* Use empty string for empty data attributes ([#2804](https://github.com/sveltejs/svelte/pull/2804)) +* Support `customElement: true` with no `<svelte:options>` ([#2821](https://github.com/sveltejs/svelte/issues/2821)) +* Add docstrings to `svelte/store` ([#2795](https://github.com/sveltejs/svelte/pull/2795)) + +## 3.4.1 + +* Handle non-falsy non-function return values from derivers ([#2780](https://github.com/sveltejs/svelte/issues/2780)) +* Allow `spring` to work server-side ([#2773](https://github.com/sveltejs/svelte/issues/2773)) + +## 3.4.0 + +* Allow custom element to be defined without a `tag` ([#2417](https://github.com/sveltejs/svelte/issues/2417)) +* Fix parsing of quote marks inside attribute values ([#2715](https://github.com/sveltejs/svelte/pull/2754)) +* Convert `svelte/store` to TypeScript ([#2733](https://github.com/sveltejs/svelte/pull/2733)) +* Allow `debug` tags to include hoisted values ([#2764](https://github.com/sveltejs/svelte/issues/2764)) +* Parse error if attribute name is missing `=` ([#1513](https://github.com/sveltejs/svelte/pull/2770)) +* Allow reactive declarations to depend on mutated `const` values ([#2728](https://github.com/sveltejs/svelte/issues/2728)) + +## 3.3.0 + +* Allow multiple event listeners on a single node ([#2688](https://github.com/sveltejs/svelte/issues/2688)) +* Allow derivers to return a cleanup function ([#2553](https://github.com/sveltejs/svelte/issues/2553)) +* Support namespaced components (`<Foo.Bar/>`) ([#2743](https://github.com/sveltejs/svelte/pull/2743)) + +## 3.2.2 + +* Add `window` and `document` to expected globals ([#2722](https://github.com/sveltejs/svelte/pull/2722)) +* Prevent hoisting of functions that depend on reactive state ([#2703](https://github.com/sveltejs/svelte/pull/2703)) +* Generate correct code when slot has no changes ([#2697](https://github.com/sveltejs/svelte/issues/2697)) +* Prevent `Object.prototype`-related bugs ([#2696](https://github.com/sveltejs/svelte/pull/2696)) + +## 3.2.1 + +* Use same comparison logic for `derived` as for other stores ([#2644](https://github.com/sveltejs/svelte/issues/2644)) +* Invalidate dependencies of reactive declarations ([#2444](https://github.com/sveltejs/svelte/issues/2444)) +* Fix instrumentation of auto-subscription self-assignments ([#2681](https://github.com/sveltejs/svelte/issues/2681)) +* Warn on non-top-level or module-context statements labeled with `$:` ([#2176](https://github.com/sveltejs/svelte/issues/2176)) + ## 3.2.0 * Improve `spring` animations, and add `hard`/`soft` options ([#2627](https://github.com/sveltejs/svelte/pull/2627)) diff --git a/README.md b/README.md index b60b1ad653..dc747668b0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,24 @@ -<p align="center"> +<p> <a href="https://svelte.dev"> <img alt="Cybernetically enhanced web apps: Svelte" src="https://svelte-assets.surge.sh/banner.png"> </a> + + <a href="https://www.npmjs.com/package/svelte"> + <img src="https://img.shields.io/npm/v/svelte.svg" alt="npm version"> + </a> + + <a href="https://packagephobia.now.sh/result?p=svelte"> + <img src="https://packagephobia.now.sh/badge?p=svelte" alt="install size"> + </a> + + <a href="https://travis-ci.org/sveltejs/svelte"> + <img src="https://api.travis-ci.org/sveltejs/svelte.svg?branch=master" + alt="build status"> + </a> + + <a href="https://github.com/sveltejs/svelte/blob/master/LICENSE"> + <img src="https://img.shields.io/npm/l/svelte.svg" alt="license"> + </a> </p> @@ -9,7 +26,7 @@ Svelte is a new way to build web applications. It's a compiler that takes your declarative components and converts them into efficient JavaScript that surgically updates the DOM. -Learn more at the [Svelte website](https://svelte.dev), or stop by the [Discord chatroom](https://discord.gg/yy75DKs). +Learn more at the [Svelte website](https://svelte.dev), or stop by the [Discord chatroom](https://svelte.dev/chat). ## Development @@ -19,11 +36,16 @@ Pull requests are encouraged and always welcome. [Pick an issue](https://github. To install and work on Svelte locally: ```bash -git clone git@github.com:sveltejs/svelte.git +git clone https://github.com/sveltejs/svelte.git cd svelte npm install ``` +> Many tests depend on newlines being preserved as `<LF>`. On Windows, you can ensure this by cloning with: +> ```bash +> git -c core.autocrlf=false clone https://github.com/sveltejs/svelte.git +> ``` + To build the compiler, and all the other modules included in the package: ```bash @@ -36,7 +58,7 @@ To watch for changes and continually rebuild the package (this is useful if you' npm run dev ``` -The compiler is written in [TypeScript](https://www.typescriptlang.org/), but don't let that put you off — it's basically just JavaScript with type annotations. You'll pick it up in no time. If you're using an editor other than [VSCode](https://code.visualstudio.com/) you may need to install a plugin in order to get syntax highlighting and code hints etc. +The compiler is written in [TypeScript](https://www.typescriptlang.org/), but don't let that put you off — it's basically just JavaScript with type annotations. You'll pick it up in no time. If you're using an editor other than [Visual Studio Code](https://code.visualstudio.com/) you may need to install a plugin in order to get syntax highlighting and code hints etc. ### Running Tests diff --git a/animate.mjs b/animate.mjs deleted file mode 100644 index f22fabe401..0000000000 --- a/animate.mjs +++ /dev/null @@ -1,25 +0,0 @@ -import { cubicOut } from './easing'; -import { is_function } from './internal'; - -export function flip(node, animation, params) { - const style = getComputedStyle(node); - const transform = style.transform === 'none' ? '' : style.transform; - - const dx = animation.from.left - animation.to.left; - const dy = animation.from.top - animation.to.top; - - const d = Math.sqrt(dx * dx + dy * dy); - - const { - delay = 0, - duration = d => Math.sqrt(d) * 120, - easing = cubicOut - } = params; - - return { - delay, - duration: is_function(duration) ? duration(d) : duration, - easing, - css: (t, u) => `transform: ${transform} translate(${u * dx}px, ${u * dy}px);` - }; -} \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 249f61abf4..23a3ac3505 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -9,12 +9,13 @@ init: environment: matrix: - # node.js + - nodejs_version: 8 - nodejs_version: 10 + - nodejs_version: 12 install: - - ps: Install-Product node $env:nodejs_version - - npm install + - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) + - npm ci || npm install build: off diff --git a/package-lock.json b/package-lock.json index 3e1cb96d40..bcde04de20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "svelte", - "version": "3.2.0", + "version": "3.6.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -14,9 +14,9 @@ } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -25,20 +25,16 @@ } }, "@bcoe/v8-coverage": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.1.0.tgz", - "integrity": "sha512-UdVB1rSL7H8TS8674fH02p5lRbhfIqQ18YKLxLKEnHFztHUH6bhMqjebMxgSTmWVrs5raS5JSLJIKKHFT4WfPg==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.1.tgz", + "integrity": "sha512-KioOCsSvSvXx6xUNLiJz+P+VMb7NRcePjoefOr74Y5P6lEKsiOn35eZyZzgpK4XCNJdXTDR7+zykj0lwxRvZ2g==", "dev": true }, - "@sveltejs/svelte-repl": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.0.5.tgz", - "integrity": "sha512-SKSX4xkqwH0XcUHQozwTNm3OCqatk66CXYZnqOW9Jf4E1B6opyQUb9f96KwAxh7ghZMbeePRv51oOWsw6n0Yww==", - "dev": true, - "requires": { - "codemirror": "^5.45.0", - "yootils": "0.0.15" - } + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true }, "@types/estree": { "version": "0.0.39", @@ -52,18 +48,78 @@ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=", "dev": true }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, "@types/mocha": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", - "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", "dev": true }, "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", + "version": "8.10.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.50.tgz", + "integrity": "sha512-+ZbcUwJdaBgOZpwXeT0v+gHC/jQbEfzoc9s4d0rN0JIKeQbuTrT+A2n1aQY6LpZjrLXJT7avVUqiCecCJeeZxA==", "dev": true }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.11.0.tgz", + "integrity": "sha512-mXv9ccCou89C8/4avKHuPB2WkSZyY/XcTQUXd5LFZAcLw1I3mWYVjUu6eS9Ja0QkP/ClolbcW9tb3Ov/pMdcqw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "1.11.0", + "eslint-utils": "^1.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^2.0.1", + "tsutils": "^3.7.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.11.0.tgz", + "integrity": "sha512-7LbfaqF6B8oa8cp/315zxKk8FFzosRzzhF8Kn/ZRsRsnpm7Qcu25cR/9RnAQo5utZ2KIWVgaALr+ZmcbG47ruw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "1.11.0", + "eslint-scope": "^4.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.11.0.tgz", + "integrity": "sha512-5xBExyXaxVyczrZvbRKEXvaTUFFq7gIM9BynXukXZE0zF3IQP/FxF4mPmmh3gJ9egafZFqByCpPTFm3dk4SY7Q==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "1.11.0", + "@typescript-eslint/typescript-estree": "1.11.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.11.0.tgz", + "integrity": "sha512-fquUHF5tAx1sM2OeRCC7wVxFd1iMELWMGCzOSmJ3pLzArj9+kRixdlC4d5MncuzXpjEqc6045p3KwM0o/3FuUA==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + } + }, "abab": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", @@ -71,9 +127,9 @@ "dev": true }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", + "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", "dev": true }, "acorn-dynamic-import": { @@ -83,9 +139,9 @@ "dev": true }, "acorn-globals": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", - "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -99,9 +155,9 @@ "dev": true }, "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, "agadoo": { @@ -127,18 +183,18 @@ } }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" } }, "ajv": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz", - "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.1.tgz", + "integrity": "sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -147,16 +203,22 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -195,29 +257,21 @@ "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", "dev": true }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } }, "asn1": { "version": "0.2.4", @@ -234,27 +288,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -267,12 +306,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -291,73 +324,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -396,106 +362,41 @@ "dev": true }, "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", "dev": true }, "c8": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-3.4.0.tgz", - "integrity": "sha512-LJcCHZlcWzTeRdUciC3fTq2AoIjBAZ18oHMG3StFVpKHxN+6IDUesrG6uiK3DlRm2PaDBfEOyp2N69VqQte1XA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/c8/-/c8-5.0.1.tgz", + "integrity": "sha512-63V/XrzqX2wgByuJyafJYuaudvxxmGrm/acqRJpvbtKvRUj6h/85EFrVweQ14j1F7wRASp0W9zyZqj8fnWI+4Q==", "dev": true, "requires": { - "@bcoe/v8-coverage": "^0.1.0", + "@bcoe/v8-coverage": "^0.2.1", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "furi": "^1.3.0", "istanbul-lib-coverage": "^2.0.1", "istanbul-lib-report": "^2.0.1", - "istanbul-reports": "^2.0.0", + "istanbul-reports": "^2.2.4", "rimraf": "^2.6.2", "test-exclude": "^5.0.0", - "uuid": "^3.3.2", - "v8-to-istanbul": "^2.0.2", - "yargs": "^12.0.5", + "v8-to-istanbul": "^3.1.3", + "yargs": "^13.1.0", "yargs-parser": "^10.1.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caseless": { @@ -513,49 +414,25 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "has-flag": "^3.0.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -572,14 +449,14 @@ "dev": true }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "code-point-at": { @@ -589,34 +466,18 @@ "dev": true }, "codecov": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.1.0.tgz", - "integrity": "sha512-aWQc/rtHbcWEQLka6WmBAOpV58J2TwyXqlpAQGhQaSiEUoigTTUk6lLd2vB3kXkhnDyzyH74RXfmV4dq2txmdA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.5.0.tgz", + "integrity": "sha512-/OsWOfIHaQIr7aeZ4pY0UC1PZT6kimoKFOFYFNb6wxo3iw12nRrh+mNGH72rnXxNsq6SGfesVPizm/6Q3XqcFQ==", "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "request": "^2.87.0", + "js-yaml": "^3.13.1", + "teeny-request": "^3.11.3", "urlgrey": "^0.4.4" } }, - "codemirror": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.45.0.tgz", - "integrity": "sha512-c19j644usCE8gQaXa0jqn2B/HN9MnB2u6qPIrrhrMkB+QAP42y8G4QnTwuwbVSoUS1jEl7JU9HZMGhCDL0nsAw==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -633,24 +494,18 @@ "dev": true }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "concat-map": { @@ -669,32 +524,6 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "contains-path": { @@ -703,11 +532,14 @@ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } }, "core-util-is": { "version": "1.0.2", @@ -716,15 +548,12 @@ "dev": true }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", + "lru-cache": "^4.0.1", "which": "^1.2.9" } }, @@ -747,18 +576,18 @@ } }, "cssom": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, "cssstyle": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", - "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.3.0.tgz", + "integrity": "sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg==", "dev": true, "requires": { - "cssom": "0.3.x" + "cssom": "~0.3.6" } }, "dashdash": { @@ -782,9 +611,9 @@ } }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -796,69 +625,19 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "object-keys": "^1.0.12" } }, "delayed-stream": { @@ -874,38 +653,14 @@ "dev": true }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -915,25 +670,6 @@ "webidl-conversions": "^4.0.2" } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -944,6 +680,12 @@ "safer-buffer": "^2.1.0" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -953,12 +695,6 @@ "once": "^1.4.0" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -968,10 +704,35 @@ "is-arrayish": "^0.2.1" } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { @@ -990,9 +751,9 @@ "dev": true }, "escodegen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -1011,48 +772,92 @@ } }, "eslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.1.tgz", - "integrity": "sha512-54NV+JkTpTu0d8+UYSA8mMKAG4XAsaOrozA9rCW7tgneg1mevcL7wIotPC+fZ0SkWwdhNqoXoxnQCTBp7UvTsg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.0.1.tgz", + "integrity": "sha512-DyQRaMmORQ+JsWShYsSg4OPTjY56u1nCjAmICrE8vLWqyLKxhFXOthwMj1SA8xwfrv0CofLNVnqbfyhwCkaO0w==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", + "espree": "^6.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^3.1.0", "globals": "^11.7.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.2.2", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.11", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", - "table": "^5.0.2", + "table": "^5.2.3", "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "eslint-import-resolver-node": { @@ -1083,9 +888,9 @@ } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "dev": true, "requires": { "debug": "^2.6.8", @@ -1109,31 +914,23 @@ } } }, - "eslint-plugin-html": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-5.0.0.tgz", - "integrity": "sha512-f7p/7YQdgQUFVAX3nB4dnMQbrDeTalcA01PDhuvTLk0ZadCwM4Pb+639SRuqEf1zMkIxckLY+ckCr0hVP5zl6A==", - "dev": true, - "requires": { - "htmlparser2": "^3.10.0" - } - }, "eslint-plugin-import": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.15.0.tgz", - "integrity": "sha512-LEHqgR+RcnpGqYW7h9WMkPb/tP+ekKxWdQDztfTtZeV43IHF+X8lXU+1HOCcR4oXD24qRgEwNSxIweD5uNKGVg==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.0.tgz", + "integrity": "sha512-PZpAEC4gj/6DEMMoU2Df01C5c50r7zdGIN52Yfi7CvvWaYssG7Jt5R9nFG5gmqodxNOz9vQS87xk6Izdtpdrig==", "dev": true, "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.3.0", + "eslint-module-utils": "^2.4.0", "has": "^1.0.3", "lodash": "^4.17.11", "minimatch": "^3.0.4", "read-pkg-up": "^2.0.0", - "resolve": "^1.9.0" + "resolve": "^1.11.0" }, "dependencies": { "debug": { @@ -1155,18 +952,124 @@ "isarray": "^1.0.0" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } } } }, + "eslint-plugin-svelte3": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-2.6.0.tgz", + "integrity": "sha512-HtoVRGo/Bjkv/S+OyPZFL/O8kwLAQpWvW4QJMP9BKDyBkrAPMlEdXCLPMFAOH4cEJmkdfgJIWuTNwOPX8W571A==", + "dev": true + }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -1186,12 +1089,12 @@ "dev": true }, "espree": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", - "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", + "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", "dev": true, "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -1227,9 +1130,9 @@ "dev": true }, "estree-walker": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", - "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, "esutils": { @@ -1251,35 +1154,29 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -1363,40 +1260,47 @@ } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "is-buffer": "~2.0.3" } }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, "foreground-child": { @@ -1407,18 +1311,6 @@ "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } } }, "forever-agent": { @@ -1438,15 +1330,6 @@ "mime-types": "^2.1.12" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1476,9 +1359,9 @@ } }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { @@ -1490,12 +1373,6 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -1506,9 +1383,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1519,16 +1396,37 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", + "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", "dev": true }, "globrex": { @@ -1538,9 +1436,9 @@ "dev": true }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", "dev": true }, "growl": { @@ -1550,12 +1448,12 @@ "dev": true }, "handlebars": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", - "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" @@ -1592,70 +1490,16 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { + "has-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true }, "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hosted-git-info": { @@ -1673,20 +1517,6 @@ "whatwg-encoding": "^1.0.1" } }, - "htmlparser2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", - "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.0.6" - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -1699,24 +1529,13 @@ } }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } } }, "iconv-lite": { @@ -1744,9 +1563,9 @@ } }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -1770,45 +1589,57 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.4.1.tgz", + "integrity": "sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", + "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^6.1.0", + "rxjs": "^6.4.0", "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "ansi-regex": "^4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } } } @@ -1819,14 +1650,11 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -1835,52 +1663,27 @@ "dev": true }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { @@ -1889,29 +1692,21 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -1919,20 +1714,38 @@ "dev": true }, "is-reference": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.1.tgz", - "integrity": "sha512-URlByVARcyP2E2GC7d3Ur702g3vqW391VKCHuF5Goo/M8IT97k4RU/+56OYImwDdX1J/V/VRxECE/wJqB0I2tg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz", + "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==", "dev": true, "requires": { "@types/estree": "0.0.39" } }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -1964,29 +1777,29 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-report": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz", - "integrity": "sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "supports-color": "^5.4.0" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" } }, "istanbul-reports": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.0.1.tgz", - "integrity": "sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "^4.1.2" } }, "js-tokens": { @@ -1996,9 +1809,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -2012,36 +1825,48 @@ "dev": true }, "jsdom": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-12.2.0.tgz", - "integrity": "sha512-QPOggIJ8fquWPLaYYMoh+zqUmdphDtu1ju0QGTitZT1Yd8I5qenPpXM1etzUegu3MjVp8XPzgZxdn8Yj7e40ig==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.1.1.tgz", + "integrity": "sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ==", "dev": true, "requires": { "abab": "^2.0.0", - "acorn": "^6.0.2", - "acorn-globals": "^4.3.0", + "acorn": "^6.1.1", + "acorn-globals": "^4.3.2", "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.0.1", + "cssom": "^0.3.6", + "cssstyle": "^1.2.2", + "data-urls": "^1.1.0", "domexception": "^1.0.1", - "escodegen": "^1.11.0", + "escodegen": "^1.11.1", "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.0.9", + "nwsapi": "^2.1.4", "parse5": "5.1.0", "pn": "^1.1.0", "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.3", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.4.3", + "tough-cookie": "^3.0.1", "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", "webidl-conversions": "^4.0.2", "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.2.0", + "whatwg-mimetype": "^2.3.0", "whatwg-url": "^7.0.0", - "ws": "^6.1.0", + "ws": "^7.0.0", "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "ws": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.0.1.tgz", + "integrity": "sha512-ILHfMbuqLJvnSgYXLgy4kMntroJpe8hT41dOVWM8bxRuw6TK4mgMp9VJUNsZTEc5Bh+Mbs0DJT4M0N+wBG9l9A==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } } }, "json-parse-better-errors": { @@ -2086,19 +1911,10 @@ "verror": "1.10.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, "kleur": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.1.tgz", - "integrity": "sha512-P3kRv+B+Ra070ng2VKQqW4qW7gd/v3iD8sy/zOdcYRsfiD+QBokQNOps/AfP6Hr48cBhIIBFWckB9aO+IZhrWg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, "lcid": { @@ -2127,15 +1943,23 @@ "dev": true }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "locate-character": { @@ -2145,12 +1969,12 @@ "dev": true }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, @@ -2166,6 +1990,21 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -2177,27 +2016,28 @@ } }, "magic-string": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", - "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true } } @@ -2217,21 +2057,6 @@ "p-defer": "^1.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "mdn-data": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.2.0.tgz", @@ -2239,41 +2064,41 @@ "dev": true }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { @@ -2286,32 +2111,11 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -2319,40 +2123,80 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", + "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", "dev": true, "requires": { + "ansi-colors": "3.2.3", "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", + "debug": "3.2.6", "diff": "3.5.0", "escape-string-regexp": "1.0.5", - "glob": "7.1.2", + "find-up": "3.0.0", + "glob": "7.1.3", "growl": "1.10.5", - "he": "1.1.1", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", "minimatch": "3.0.4", "mkdirp": "0.5.1", - "supports-color": "5.4.0" + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.2.2", + "yargs-parser": "13.0.0", + "yargs-unparser": "1.5.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "ms": "2.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2364,26 +2208,111 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { "has-flag": "^3.0.0" } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stream": { @@ -2403,57 +2332,48 @@ "thenify-all": "^1.0.0" } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "dev": true + }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", @@ -2461,13 +2381,13 @@ "dev": true }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -2488,9 +2408,9 @@ "dev": true }, "nwsapi": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", - "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", "dev": true }, "oauth-sign": { @@ -2505,60 +2425,32 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "once": { @@ -2577,6 +2469,14 @@ "dev": true, "requires": { "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + } } }, "optimist": { @@ -2587,14 +2487,6 @@ "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } } }, "optionator": { @@ -2609,6 +2501,14 @@ "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } } }, "os-locale": { @@ -2641,51 +2541,52 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse5": { @@ -2694,10 +2595,10 @@ "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, "path-exists": { @@ -2712,12 +2613,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -2731,12 +2626,20 @@ "dev": true }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "pend": { @@ -2752,15 +2655,15 @@ "dev": true }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", - "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" @@ -2773,26 +2676,59 @@ "dev": true, "requires": { "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -2800,9 +2736,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -2824,9 +2760,9 @@ "dev": true }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", + "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==", "dev": true }, "pump": { @@ -2846,9 +2782,9 @@ "dev": true }, "puppeteer": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.13.0.tgz", - "integrity": "sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.18.1.tgz", + "integrity": "sha512-luUy0HPSuWPsPZ1wAp6NinE0zgetWtudf5zwZ6dHjMWfYpTQcmKveFRox7VBNhQ98OjNA9PQ9PzQyX8k/KrxTg==", "dev": true, "requires": { "debug": "^4.1.0", @@ -2859,6 +2795,17 @@ "proxy-from-env": "^1.0.0", "rimraf": "^2.6.1", "ws": "^6.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, "qs": { @@ -2868,45 +2815,47 @@ "dev": true }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "regexpp": { @@ -2915,18 +2864,6 @@ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -2953,26 +2890,56 @@ "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } } }, "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "dev": true, "requires": { - "lodash": "^4.13.1" + "lodash": "^4.17.11" } }, "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", "dev": true, "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } } }, "require-directory": { @@ -2982,15 +2949,15 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -3002,12 +2969,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -3018,12 +2979,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -3034,73 +2989,67 @@ } }, "rollup": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.1.2.tgz", - "integrity": "sha512-OkdMxqMl8pWoQc5D8y1cIinYQPPLV8ZkfLgCzL6SytXeNA2P7UHynEQXI9tYxuAjAMsSyvRaWnyJDLHMxq0XAg==", + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.16.6.tgz", + "integrity": "sha512-oM3iKkzPCq9Da95wCnNfS8YlNZjgCD5c/TceKnJIthI9FOeJqnO3PUr/C5Suv9Kjzh0iphKL02PLeja3A5AMIA==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "*", - "acorn": "^6.0.5" + "@types/node": "^12.0.10", + "acorn": "^6.1.1" + }, + "dependencies": { + "@types/node": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.12.tgz", + "integrity": "sha512-Uy0PN4R5vgBUXFoJrKryf5aTk3kJ8Rv3PdlHjl6UaX+Cqp1QE0yPQ68MPXGrZOfG7gZVNDIJZYyot0B9ubXUrQ==", + "dev": true + } } }, "rollup-plugin-commonjs": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", - "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz", + "integrity": "sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA==", "dev": true, "requires": { - "estree-walker": "^0.5.2", - "magic-string": "^0.25.1", - "resolve": "^1.8.1", - "rollup-pluginutils": "^2.3.3" - }, - "dependencies": { - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - } + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" } }, "rollup-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", - "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", + "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", "dev": true, "requires": { - "rollup-pluginutils": "^2.3.1" + "rollup-pluginutils": "^2.5.0" } }, "rollup-plugin-node-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz", - "integrity": "sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", "dev": true, "requires": { - "builtin-modules": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", "is-module": "^1.0.0", - "resolve": "^1.8.1" - }, - "dependencies": { - "builtin-modules": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", - "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", - "dev": true - } + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" } }, "rollup-plugin-replace": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz", - "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz", + "integrity": "sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA==", "dev": true, "requires": { - "magic-string": "^0.25.1", - "minimatch": "^3.0.2", - "rollup-pluginutils": "^2.0.1" + "magic-string": "^0.25.2", + "rollup-pluginutils": "^2.6.0" } }, "rollup-plugin-sucrase": { @@ -3114,13 +3063,13 @@ } }, "rollup-plugin-typescript": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript/-/rollup-plugin-typescript-1.0.0.tgz", - "integrity": "sha512-d2KDNMJXgaaB//dDGd/YmyMiopt1Pz965Iu3zmEoL08YqNcKRBz26uHqqc47rFGfrJV5kFqifC9IYlh6dpSCLg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript/-/rollup-plugin-typescript-1.0.1.tgz", + "integrity": "sha512-rwJDNn9jv/NsKZuyBb/h0jsclP4CJ58qbvZt2Q9zDIGILF2LtdtvCqMOL+Gq9IVq5MTrTlHZNrn8h7VjQgd8tw==", "dev": true, "requires": { - "resolve": "^1.8.1", - "rollup-pluginutils": "^2.3.1" + "resolve": "^1.10.0", + "rollup-pluginutils": "^2.5.0" } }, "rollup-plugin-virtual": { @@ -3130,304 +3079,12 @@ "dev": true }, "rollup-pluginutils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz", - "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", "dev": true, "requires": { - "estree-walker": "^0.6.0", - "micromatch": "^3.1.10" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "estree-walker": "^0.6.1" } }, "run-async": { @@ -3440,9 +3097,9 @@ } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -3454,15 +3111,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3470,18 +3118,18 @@ "dev": true }, "saxes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.6.tgz", - "integrity": "sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w==", + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", "dev": true, "requires": { - "xmlchars": "^1.3.1" + "xmlchars": "^2.1.1" } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, "set-blocking": { @@ -3490,29 +3138,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -3535,9 +3160,9 @@ "dev": true }, "slice-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", - "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { "ansi-styles": "^3.2.0", @@ -3545,174 +3170,26 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "sourcemap-codec": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", - "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", "dev": true }, "spdx-correct": { @@ -3742,20 +3219,11 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -3763,9 +3231,9 @@ "dev": true }, "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -3779,27 +3247,6 @@ "tweetnacl": "~0.14.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -3807,31 +3254,40 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -3853,167 +3309,67 @@ "dev": true }, "sucrase": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.9.5.tgz", - "integrity": "sha512-gvNjd3PJ0WAXxWUAQzCw/nlG4J5a2j7q8jN+sX8Fwe3ryIsl9UrEcWPxWoEzBPrj3Fias4U05iN84m4/IFQLdw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.10.1.tgz", + "integrity": "sha512-nMOs6rFWwkYRxcKHHDjyQmC5CmLbHN2LwRyWF1n2i0kb/pq0xcB9M19TdY5Ivfcj1BsWfs+az9Ga5B0tFdE5ww==", "dev": true, "requires": { "commander": "^2.19.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.0" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "table": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.1.tgz", - "integrity": "sha512-qmhNs2GEHNqY5fd2Mo+8N1r2sw/rvTAAvBZTaTx+Y7PHLypqyrxr1MdIu0pLw6Xvl/Gi4ONu/sdceP8vvUjkyA==", - "dev": true, - "requires": { - "ajv": "^6.6.1", - "lodash": "^4.17.11", - "slice-ansi": "2.0.0", - "string-width": "^2.1.1" - } - }, - "test-exclude": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.0.0.tgz", - "integrity": "sha512-bO3Lj5+qFa9YLfYW2ZcXMOV1pmQvw+KS/DpjqhyX6Y6UZ8zstpZJ+mA2ERkXfpOqhxsJlQiLeVXD3Smsrs6oLw==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - } - } - }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.1.tgz", + "integrity": "sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w==", + "dev": true, + "requires": { + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "teeny-request": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-3.11.3.tgz", + "integrity": "sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1", + "node-fetch": "^2.2.0", + "uuid": "^3.3.2" + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4063,64 +3419,15 @@ "os-tmpdir": "~1.0.2" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "tr46": { @@ -4133,24 +3440,41 @@ } }, "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", "dev": true, "requires": { "arg": "^4.1.0", - "diff": "^3.1.0", + "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.6", "yn": "^3.0.0" + }, + "dependencies": { + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", + "dev": true + } } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, + "tsutils": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", + "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -4182,110 +3506,20 @@ "dev": true }, "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", + "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, "optional": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - } - } - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } } }, "uri-js": { @@ -4297,24 +3531,12 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "urlgrey": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4328,10 +3550,23 @@ "dev": true }, "v8-to-istanbul": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-2.0.2.tgz", - "integrity": "sha512-39Z8JhWATTDDHlTEbSOv/G4j4xFWJy7ESMhfCLoj6IEd6yu4DOaexdTW89GTqE29d51PyH2lSS12c2HJhlRd1A==", - "dev": true + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-3.2.3.tgz", + "integrity": "sha512-B8d/oxMtc/x0TYXr9b+Ywu5KexA/on4QMQ9M1kTYnoGZzKdo8LLk9ySlWePdDOtr2G0/2Injgcp3sOR9gU+3vQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } }, "validate-npm-package-license": { "version": "3.0.4", @@ -4363,6 +3598,17 @@ "browser-process-hrtime": "^0.1.2" } }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -4410,59 +3656,59 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "^1.0.2 || 2" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" } } } }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4470,18 +3716,18 @@ "dev": true }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { "mkdirp": "^0.5.1" } }, "ws": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz", - "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { "async-limiter": "~1.0.0" @@ -4494,9 +3740,9 @@ "dev": true }, "xmlchars": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz", - "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", + "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==", "dev": true }, "y18n": { @@ -4512,73 +3758,178 @@ "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + }, + "dependencies": { + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true - }, - "find-up": { + } + } + }, + "yargs-unparser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", + "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.11", + "yargs": "^12.0.5" + }, + "dependencies": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "p-try": "^2.0.0" + "ansi-regex": "^3.0.0" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "p-limit": "^2.0.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } }, "yargs-parser": { "version": "11.1.1", @@ -4592,23 +3943,6 @@ } } }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, "yauzl": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", @@ -4619,15 +3953,9 @@ } }, "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", - "dev": true - }, - "yootils": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.15.tgz", - "integrity": "sha512-GvGLuJ7XHJPGEUQ52vh8fh+vPjfikuGcu7yBswfrsNsHqnAoytOVuSb69eM0j8wQIjMz0U3kY3YsfwMhJgfG9w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", + "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", "dev": true } } diff --git a/package.json b/package.json index 7114264e0c..1f40d17821 100644 --- a/package.json +++ b/package.json @@ -1,37 +1,43 @@ { "name": "svelte", - "version": "3.2.0", + "version": "3.6.9", "description": "Cybernetically enhanced web apps", "module": "index.mjs", "main": "index", "files": [ - "compiler.js", + "types", + "compiler.*", "register.js", "index.*", - "internal.*", - "store.*", - "animate.*", - "transition.*", - "easing.*", - "motion.*", + "internal", + "store", + "animate", + "transition", + "easing", + "motion", "svelte", "README.md" ], + "engines": { + "node": ">= 8" + }, + "types": "types/runtime/index.d.ts", "scripts": { "test": "mocha --opts mocha.opts", - "test:unit": "mocha --require sucrase/register --recursive ./**/__test__.ts", + "test:unit": "mocha --require sucrase/register --recursive src/**/__test__.ts", "quicktest": "mocha --opts mocha.opts", "precoverage": "c8 mocha --opts mocha.coverage.opts", "coverage": "c8 report --reporter=text-lcov > coverage.lcov && c8 report --reporter=html", "codecov": "codecov", "precodecov": "npm run coverage", - "lint": "eslint src test/*.js", - "build": "rollup -c", + "build": "rollup -c && npm run tsd", "prepare": "npm run build", "dev": "rollup -cw", "pretest": "npm run build", - "posttest": "agadoo src/internal/index.js", - "prepublishOnly": "export PUBLISH=true && npm run lint && npm test" + "posttest": "agadoo internal/index.mjs", + "prepublishOnly": "npm run lint && PUBLISH=true npm test", + "tsd": "tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly", + "lint": "eslint \"{src,test}/**/*.{ts,js}\"" }, "repository": { "type": "git", @@ -50,40 +56,41 @@ }, "homepage": "https://github.com/sveltejs/svelte#README", "devDependencies": { - "@sveltejs/svelte-repl": "0.0.5", - "@types/mocha": "^5.2.0", - "@types/node": "^10.5.5", - "acorn": "^6.1.1", + "@types/mocha": "^5.2.7", + "@types/node": "=8", + "@typescript-eslint/eslint-plugin": "^1.11.0", + "@typescript-eslint/parser": "^1.11.0", + "acorn": "^6.2.0", "acorn-dynamic-import": "^4.0.0", "agadoo": "^1.0.1", - "c8": "^3.4.0", - "codecov": "^3.0.0", + "c8": "^5.0.1", + "codecov": "^3.5.0", "css-tree": "1.0.0-alpha22", - "eslint": "^5.3.0", - "eslint-plugin-html": "^5.0.0", - "eslint-plugin-import": "^2.11.0", - "estree-walker": "^0.6.0", - "is-reference": "^1.1.1", - "jsdom": "^12.2.0", - "kleur": "^3.0.0", + "eslint": "^6.0.1", + "eslint-plugin-import": "^2.18.0", + "eslint-plugin-svelte3": "^2.6.0", + "estree-walker": "^0.6.1", + "is-reference": "^1.1.3", + "jsdom": "^15.1.1", + "kleur": "^3.0.3", "locate-character": "^2.0.5", - "magic-string": "^0.25.2", - "mocha": "^5.2.0", - "puppeteer": "^1.13.0", - "rollup": "^1.1.2", - "rollup-plugin-commonjs": "^9.1.0", - "rollup-plugin-json": "^3.0.0", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-replace": "^2.0.0", + "magic-string": "^0.25.3", + "mocha": "^6.1.4", + "puppeteer": "^1.18.1", + "rollup": "^1.16.6", + "rollup-plugin-commonjs": "^10.0.1", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-replace": "^2.2.0", "rollup-plugin-sucrase": "^2.1.0", - "rollup-plugin-typescript": "^1.0.0", + "rollup-plugin-typescript": "^1.0.1", "rollup-plugin-virtual": "^1.0.1", - "source-map": "0.6", - "source-map-support": "^0.5.4", - "tiny-glob": "^0.2.1", - "ts-node": "^8.0.2", - "tslib": "^1.8.0", - "typescript": "^3.0.1" + "source-map": "^0.6.1", + "source-map-support": "^0.5.12", + "tiny-glob": "^0.2.6", + "ts-node": "^8.3.0", + "tslib": "^1.10.0", + "typescript": "^3.5.2" }, "nyc": { "include": [ diff --git a/register.js b/register.js index 2c0069c241..3278c1cbf5 100644 --- a/register.js +++ b/register.js @@ -2,7 +2,7 @@ const fs = require('fs'); const path = require('path'); const { compile } = require('./compiler.js'); -let extensions = ['.svelte', '.html']; +const extensions = ['.svelte', '.html']; let compileOptions = {}; function capitalise(name) { @@ -25,8 +25,7 @@ function deregisterExtension(extension) { function registerExtension(extension) { require.extensions[extension] = function(module, filename) { - const name = path.basename(filename) - .slice(0, -path.extname(filename).length) + const name = path.parse(filename).name .replace(/^\d/, '_$&') .replace(/[^a-zA-Z0-9_$]/g, ''); @@ -46,4 +45,4 @@ function registerExtension(extension) { registerExtension('.svelte'); registerExtension('.html'); -module.exports = register; \ No newline at end of file +module.exports = register; diff --git a/rollup.config.js b/rollup.config.js index f7b2d07d4b..8c3068dcbd 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -9,36 +9,82 @@ import pkg from './package.json'; const is_publish = !!process.env.PUBLISH; +const ts_plugin = is_publish + ? typescript({ + include: 'src/**', + typescript: require('typescript') + }) + : sucrase({ + transforms: ['typescript'] + }); + +const external = id => id.startsWith('svelte/'); + +fs.writeFileSync(`./compiler.d.ts`, `export * from './types/compiler/index';`); + export default [ - /* internal.[m]js */ + /* runtime */ { - input: `src/internal/index.js`, + input: `src/runtime/index.ts`, output: [ { - file: `internal.mjs`, + file: `index.mjs`, format: 'esm', - paths: id => id.startsWith('svelte/') && id.replace('svelte', '.') + paths: id => id.startsWith('svelte/') && `${id.replace('svelte', '.')}` }, { - file: `internal.js`, + file: `index.js`, format: 'cjs', - paths: id => id.startsWith('svelte/') && id.replace('svelte', '.') + paths: id => id.startsWith('svelte/') && `${id.replace('svelte', '.')}` } ], - external: id => id.startsWith('svelte/'), - plugins: [{ - generateBundle(options, bundle) { - const mod = bundle['internal.mjs']; - if (mod) { - fs.writeFileSync('src/compile/internal-exports.ts', `// This file is automatically generated\nexport default new Set(${JSON.stringify(mod.exports)});`); - } - } - }] + external, + plugins: [ts_plugin] }, + ...fs.readdirSync('src/runtime') + .filter(dir => fs.statSync(`src/runtime/${dir}`).isDirectory()) + .map(dir => ({ + input: `src/runtime/${dir}/index.ts`, + output: [ + { + file: `${dir}/index.mjs`, + format: 'esm', + paths: id => id.startsWith('svelte/') && `${id.replace('svelte', '..')}` + }, + { + file: `${dir}/index.js`, + format: 'cjs', + paths: id => id.startsWith('svelte/') && `${id.replace('svelte', '..')}` + } + ], + external, + plugins: [ + ts_plugin, + { + writeBundle(bundle) { + if (dir === 'internal') { + const mod = bundle['index.mjs']; + if (mod) { + fs.writeFileSync('src/compiler/compile/internal_exports.ts', `// This file is automatically generated\nexport default new Set(${JSON.stringify(mod.exports)});`); + } + } + + fs.writeFileSync(`${dir}/package.json`, JSON.stringify({ + main: './index', + module: './index.mjs', + types: './index.d.ts' + }, null, ' ')); + + fs.writeFileSync(`${dir}/index.d.ts`, `export * from '../types/runtime/${dir}/index';`); + } + } + ] + })), + /* compiler.js */ { - input: 'src/index.ts', + input: 'src/compiler/index.ts', plugins: [ replace({ __VERSION__: pkg.version @@ -48,15 +94,7 @@ export default [ include: ['node_modules/**'] }), json(), - is_publish - ? typescript({ - include: 'src/**', - exclude: 'src/internal/**', - typescript: require('typescript') - }) - : sucrase({ - transforms: ['typescript'] - }) + ts_plugin ], output: { file: 'compiler.js', @@ -67,34 +105,5 @@ export default [ external: is_publish ? [] : id => id === 'acorn' || id === 'magic-string' || id.startsWith('css-tree') - }, - - /* motion.mjs */ - { - input: `src/motion/index.js`, - output: [ - { - file: `motion.mjs`, - format: 'esm', - paths: id => id.startsWith('svelte/') && id.replace('svelte', '.') - }, - { - file: `motion.js`, - format: 'cjs', - paths: id => id.startsWith('svelte/') && id.replace('svelte', '.') - } - ], - external: id => id.startsWith('svelte/') - }, - - // everything else - ...['index', 'store', 'easing', 'transition', 'animate'].map(name => ({ - input: `${name}.mjs`, - output: { - file: `${name}.js`, - format: 'cjs', - paths: id => id.startsWith('svelte/') && id.replace('svelte', '.') - }, - external: id => id !== `${name}.mjs` - })) + } ]; diff --git a/site/.eslintrc.js b/site/.eslintrc.js new file mode 100644 index 0000000000..a436f7bbe4 --- /dev/null +++ b/site/.eslintrc.js @@ -0,0 +1,52 @@ +module.exports = { + root: true, + rules: { + indent: [2, 'tab', { SwitchCase: 1 }], + semi: [2, 'always'], + 'keyword-spacing': [2, { before: true, after: true }], + 'space-before-blocks': [2, 'always'], + 'no-mixed-spaces-and-tabs': [2, 'smart-tabs'], + 'no-cond-assign': 0, + 'no-unused-vars': 2, + 'object-shorthand': [2, 'always'], + 'no-const-assign': 2, + 'no-class-assign': 2, + 'no-this-before-super': 2, + 'no-var': 2, + 'no-unreachable': 2, + 'valid-typeof': 2, + 'quote-props': [2, 'as-needed'], + 'one-var': [2, 'never'], + 'prefer-arrow-callback': 2, + 'prefer-const': [2, { destructuring: 'all' }], + 'arrow-spacing': 2, + 'no-inner-declarations': 0, + 'require-atomic-updates': 0 + }, + env: { + es6: true, + browser: true, + node: true, + mocha: true + }, + extends: [ + 'eslint:recommended', + 'plugin:import/errors', + 'plugin:import/warnings' + ], + plugins: ['svelte3'], + overrides: [ + { + files: ['*.svelte'], + processor: 'svelte3/svelte3' + } + ], + parserOptions: { + ecmaVersion: 9, + sourceType: 'module' + }, + settings: { + 'import/core-modules': ['svelte'], + 'svelte3/compiler': require('svelte/compiler') + } +}; diff --git a/site/.eslintrc.json b/site/.eslintrc.json deleted file mode 100644 index 98a3b0889c..0000000000 --- a/site/.eslintrc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "root": true, - "rules": { - "indent": [2, "tab", { "SwitchCase": 1 }], - "semi": [2, "always"], - "keyword-spacing": [2, { "before": true, "after": true }], - "space-before-blocks": [2, "always"], - "no-mixed-spaces-and-tabs": [2, "smart-tabs"], - "no-cond-assign": 0, - "no-unused-vars": 2, - "object-shorthand": [2, "always"], - "no-const-assign": 2, - "no-class-assign": 2, - "no-this-before-super": 2, - "no-var": 2, - "no-unreachable": 2, - "valid-typeof": 2, - "quote-props": [2, "as-needed"], - "one-var": [2, "never"], - "prefer-arrow-callback": 2, - "prefer-const": [2, { "destructuring": "all" }], - "arrow-spacing": 2, - "no-inner-declarations": 0 - }, - "env": { - "es6": true, - "browser": true, - "node": true, - "mocha": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings" - ], - "plugins": ["svelte3"], - "parserOptions": { - "ecmaVersion": 8, - "sourceType": "module" - }, - "settings": { - "import/core-modules": ["svelte"] - } -} diff --git a/site/Dockerfile b/site/Dockerfile index f53e6a0c4a..c2a65122d9 100644 --- a/site/Dockerfile +++ b/site/Dockerfile @@ -1,4 +1,4 @@ -FROM mhart/alpine-node:11.14 +FROM mhart/alpine-node:12 # install dependencies WORKDIR /app @@ -9,7 +9,7 @@ RUN npm ci --production # Only copy over the Node pieces we need # ~> Saves 35MB ### -FROM mhart/alpine-node:base-11.14 +FROM mhart/alpine-node:slim-12 WORKDIR /app COPY --from=0 /app . diff --git a/site/Makefile b/site/Makefile index c8d8b236a6..4c432dc6c9 100644 --- a/site/Makefile +++ b/site/Makefile @@ -19,4 +19,4 @@ docker: deploy: sapper docker @echo "\n~> deploying $(SERVICE) to Cloud Run servers" - @gcloud beta run deploy $(SERVICE) --allow-unauthenticated --region us-central1 --image $(IMAGE) --memory=512Mi + @gcloud beta run deploy $(SERVICE) --allow-unauthenticated --platform managed --region us-central1 --image $(IMAGE) --memory=512Mi diff --git a/site/README.md b/site/README.md index c438bda5ca..259e956003 100644 --- a/site/README.md +++ b/site/README.md @@ -4,7 +4,10 @@ Set up the project: ```bash git clone https://github.com/sveltejs/svelte.git -cd svelte/site +cd svelte +npm ci +PUBLISH=1 npm run build +cd site npm ci npm run update ``` @@ -13,7 +16,11 @@ Start the server with `npm run dev`, and navigate to [localhost:3000](http://loc ## Using a local copy of Svelte -By default, the REPL will fetch the most recent version of Svelte from https://unpkg.com/svelte. To use the local copy of the compiler and runtime from this repo, you can navigate to [localhost:3000/repl?version=local](http://localhost:3000/repl?version=local). To produce the proper browser-compatible UMD build, you will need to run `npm run build` with the `PUBLISH` environment variable set (to any non-empty string). +By default, the REPL will fetch the most recent version of Svelte from https://unpkg.com/svelte. When running the site locally, you can also use your local copy of Svelte. + +To produce the proper browser-compatible UMD build of the compiler, you will need to run `npm run build` (or `npm run dev`) in the root of this repository with the `PUBLISH` environment variable set to any non-empty string. + +Then visit the REPL at [localhost:3000/repl?version=local](http://localhost:3000/repl?version=local). Please note that the local REPL only works with `npm run dev` and not when building the site for production usage. ## REPL GitHub integration @@ -28,6 +35,13 @@ In order for the REPL's GitHub integration to work properly when running locally GITHUB_CLIENT_SECRET=[your app's Client Secret] BASEURL=http://localhost:3000 ``` +## Building the site + +To build the website, run `npm run sapper`. The output can be found in `__sapper__/build`. + +## Testing + +Tests can be run using `npm run test`. ## Translating the API docs diff --git a/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md b/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md index e91166430c..9d4c661615 100644 --- a/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md +++ b/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md @@ -44,9 +44,11 @@ In the terminal, you can instantly create a new project like so: npx degit sveltejs/template my-svelte-project cd my-svelte-project npm install -npm run dev & open http://localhost:5000 +npm run dev ``` +This will create a new project in the `my-svelte-project` directory, install its dependencies, and start a server on http://localhost:5000. + Once you've tinkered a bit and understood how everything fits together, you can fork [sveltejs/template](https://github.com/sveltejs/template) and start doing this instead: ```bash @@ -55,4 +57,4 @@ npx degit your-name/template my-new-project And that's it! Do `npm run build` to create a production-ready version of your app, and check the project template's [README](https://github.com/sveltejs/template/blob/master/README.md) for instructions on how to easily deploy your app to the web with [Now](https://zeit.co/now) or [Surge](http://surge.sh/). -You're not restricted to using Rollup — there are also integrations for [webpack](https://github.com/sveltejs/svelte-loader), [Browserify](https://github.com/tehshrike/sveltify) and others, or you can use the [Svelte CLI](https://github.com/sveltejs/svelte-cli) (Update from 2019: with Svelte 3 the CLI was deprecated and we now use [sirv-cli](https://www.npmjs.com/package/sirv-cli) in our template. Feel free to use whatever tool you like!) or the [API](https://github.com/sveltejs/svelte/tree/v2#api) directly. If you make a project template using one of these tools, please share it with the [Svelte Discord chatroom](https://discord.gg/yy75DKs), or via [@sveltejs](https://twitter.com/sveltejs) on Twitter! +You're not restricted to using Rollup — there are also integrations for [webpack](https://github.com/sveltejs/svelte-loader), [Browserify](https://github.com/tehshrike/sveltify) and others, or you can use the [Svelte CLI](https://github.com/sveltejs/svelte-cli) (Update from 2019: with Svelte 3 the CLI was deprecated and we now use [sirv-cli](https://www.npmjs.com/package/sirv-cli) in our template. Feel free to use whatever tool you like!) or the [API](https://github.com/sveltejs/svelte/tree/v2#api) directly. If you make a project template using one of these tools, please share it with the [Svelte Discord chatroom](chat), or via [@sveltejs](https://twitter.com/sveltejs) on Twitter! diff --git a/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md b/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md index 040e95a8c3..8799fdacce 100644 --- a/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md +++ b/site/content/blog/2017-12-31-sapper-towards-the-ideal-web-app-framework.md @@ -81,4 +81,4 @@ I believe the next frontier of web performance is 'whole-app optimisation'. Curr Speaking of Glimmer, the idea of compiling components to bytecode is one that we'll probably steal in 2018. A framework like Sapper could conceivably determine which compilation mode to use based on the characteristics of your app. It could even serve JavaScript for the initial route for the fastest possible startup time, then lazily serve a bytecode interpreter for subsequent routes, resulting in the optimal combination of startup size and total app size. -Mostly, though, we want the direction of Sapper to be determined by its users. If you're the kind of developer who enjoys life on the bleeding edge and would like to help shape the future of how we build web apps, please join us on [GitHub](https://github.com/sveltejs/svelte) and [Discord](https://discord.gg/yy75DKs). +Mostly, though, we want the direction of Sapper to be determined by its users. If you're the kind of developer who enjoys life on the bleeding edge and would like to help shape the future of how we build web apps, please join us on [GitHub](https://github.com/sveltejs/svelte) and [Discord](chat). diff --git a/site/content/blog/2018-04-18-version-2.md b/site/content/blog/2018-04-18-version-2.md index 778d703b1d..900debc0fb 100644 --- a/site/content/blog/2018-04-18-version-2.md +++ b/site/content/blog/2018-04-18-version-2.md @@ -12,7 +12,7 @@ Almost a year after we first started talking about version 2 on the Svelte issue ## tl;dr -Each of these items is described in more depth below. If you get stuck, ask for help in our friendly [Discord chatroom](https://discord.gg/yy75DKs). +Each of these items is described in more depth below. If you get stuck, ask for help in our friendly [Discord chatroom](chat). - Install Svelte v2 from npm - Upgrade your templates with [svelte-upgrade](https://github.com/sveltejs/svelte-upgrade) @@ -201,4 +201,4 @@ Before, there was a `svelte.validate` method which checked your component was va ## My app is broken! Help! -Hopefully this covers everything, and the update should be easier for you than it was for us. But if you find bugs, or discover things that aren't mentioned here, swing by [Discord chatroom](https://discord.gg/yy75DKs) or raise an issue on the [tracker](https://github.com/sveltejs/svelte/issues). +Hopefully this covers everything, and the update should be easier for you than it was for us. But if you find bugs, or discover things that aren't mentioned here, swing by [Discord chatroom](chat) or raise an issue on the [tracker](https://github.com/sveltejs/svelte/issues). diff --git a/site/content/blog/2019-01-31-svelte-on-the-changelog.md b/site/content/blog/2019-01-31-svelte-on-the-changelog.md index 936c50240e..0b8e1894e4 100644 --- a/site/content/blog/2019-01-31-svelte-on-the-changelog.md +++ b/site/content/blog/2019-01-31-svelte-on-the-changelog.md @@ -14,9 +14,8 @@ Earlier this month, I had the privilege of appearing on [The Changelog](https:// ...and, most importantly, Svelte 3. -Unless you hang out in our [Discord server](https://discord.gg/yy75DKs) or follow [@sveltejs](https://twitter.com/sveltejs) on Twitter, you might not know that Svelte 3 is just around the corner, and it's going to be a huge release. We've rethought the developer experience from the ground up, and while it *will* be a nuisance if you need to upgrade a Svelte 2 app (more on that soon) we think you're going to love it. +Unless you hang out in our [Discord server](chat) or follow [@sveltejs](https://twitter.com/sveltejs) on Twitter, you might not know that Svelte 3 is just around the corner, and it's going to be a huge release. We've rethought the developer experience from the ground up, and while it *will* be a nuisance if you need to upgrade a Svelte 2 app (more on that soon) we think you're going to love it. On the podcast [Adam](https://twitter.com/adamstac), [Jerod](https://twitter.com/jerodsanto) and I talk about some of the changes and why we're making them. You can listen here or on the [podcast page](https://changelog.com/podcast/332). <audio data-theme="night" style="width: 100%" data-src="https://changelog.com/podcast/332/embed" src="https://cdn.changelog.com/uploads/podcast/332/the-changelog-332.mp3" preload="none" class="changelog-episode" controls></audio><p><a href="https://changelog.com/podcast/332">The Changelog 332: A UI framework without the framework</a> – Listen on <a href="https://changelog.com/">Changelog.com</a></p><script async src="//cdn.changelog.com/embed.js"></script> - diff --git a/site/content/blog/2019-04-15-setting-up-your-editor.md b/site/content/blog/2019-04-15-setting-up-your-editor.md index c157682e44..bea7f4c762 100644 --- a/site/content/blog/2019-04-15-setting-up-your-editor.md +++ b/site/content/blog/2019-04-15-setting-up-your-editor.md @@ -10,4 +10,24 @@ draft: true * eslint-plugin-svelte3 * svelte-vscode -* associating .svelte files with HTML in VSCode, Sublime, Atom, etc etc etc \ No newline at end of file +* associating .svelte files with HTML in VSCode, Sublime, Atom, etc etc etc + +## Vim/Neovim + +To treat all `*.svelte` files as HTML, add the following line to your `init.vim`: + +```bash +au! BufNewFile,BufRead *.svelte set ft=html +``` + +To temporarily turn on HTML syntax highlighting for the current buffer, use: + +```bash +:set ft=html +``` + +To set the filetype for a single file, use a [modeline](https://vim.fandom.com/wiki/Modeline_magic): + +```bash +<!-- vim: set ft=html :--> +``` diff --git a/site/content/blog/2019-04-22-svelte-3-rethinking-reactivity.md b/site/content/blog/2019-04-22-svelte-3-rethinking-reactivity.md index 0721c09692..3ae0085e86 100644 --- a/site/content/blog/2019-04-22-svelte-3-rethinking-reactivity.md +++ b/site/content/blog/2019-04-22-svelte-3-rethinking-reactivity.md @@ -94,4 +94,4 @@ We don't take this lightly: hopefully once you've experienced Svelte 3 you'll un As grueling as this release has been, we're nowhere near finished. We have a ton of ideas for generating smarter, more compact code, and a long feature wish-list. [Sapper](https://sapper.svelte.dev), our Next.js-style app framework, is still in the middle of being updated to use Svelte 3. The [Svelte Native](https://svelte-native.technology/) community project, which allows you to write Android and iOS apps in Svelte, is making solid progress but deserves more complete support from core. We don't yet have the bounty of editor extensions, syntax highlighters, component kits, devtools and so on that other frameworks have, and we should fix that. We *really* want to add first-class TypeScript support. -But in the meantime we think Svelte 3 is the best way to build web apps yet. Take an hour to go through the [tutorial](tutorial) and we hope to convince you of the same. Either way, we'd love to see you in our [Discord chatroom](https://discord.gg/yy75DKs) and on [GitHub](https://github.com/sveltejs/svelte) — everyone is welcome, especially you. \ No newline at end of file +But in the meantime we think Svelte 3 is the best way to build web apps yet. Take an hour to go through the [tutorial](tutorial) and we hope to convince you of the same. Either way, we'd love to see you in our [Discord chatroom](chat) and on [GitHub](https://github.com/sveltejs/svelte) — everyone is welcome, especially you. \ No newline at end of file diff --git a/site/content/docs/00-introduction.md b/site/content/docs/00-introduction.md index c218cdfb5f..2456b85f9c 100644 --- a/site/content/docs/00-introduction.md +++ b/site/content/docs/00-introduction.md @@ -2,7 +2,7 @@ title: Before we begin --- -> Temporary note: This document is a work-in-progress. Please forgive any missing or misleading parts, and don't be shy about asking for help in the [Discord chatroom](https://discord.gg/yy75DKs). The [tutorial](tutorial) is more complete; start there. +> Temporary note: This document is a work-in-progress. Please forgive any missing or misleading parts, and don't be shy about asking for help in the [Discord chatroom](chat). The [tutorial](tutorial) is more complete; start there. This page contains detailed API reference documentation. It's intended to be a resource for people who already have some familiarity with Svelte. diff --git a/site/content/docs/01-component-format.md b/site/content/docs/01-component-format.md index b689196d17..3d349af51d 100644 --- a/site/content/docs/01-component-format.md +++ b/site/content/docs/01-component-format.md @@ -28,26 +28,60 @@ A `<script>` block contains JavaScript that runs when a component instance is cr --- -Svelte uses the `export` keyword to mark a variable declaration as a *property* or *prop*, which means it becomes accessible to consumers of the component: +Svelte uses the `export` keyword to mark a variable declaration as a *property* or *prop*, which means it becomes accessible to consumers of the component (see the section on [attributes and props](docs#Attributes_and_props) for more information). ```html <script> - // these properties can be set externally export let foo; - export let bar = 'optional default value'; - - // this property is readonly externally - export const buzz = 'buzz'; // Values that are passed in as props // are immediately available - console.log(foo, bar); + console.log({ foo }); +</script> +``` + +--- + +You can specify a default value, which will be used if the component's consumer doesn't specify a prop. - // function declarations cannot be set externally, - // but can be accessed from outside - export function instanceMethod() { - alert(foo); +In development mode (see the [compiler options](docs#svelte_compile)), a warning will be printed if no default is provided and the consumer does not specify a value. To squelch this warning, ensure that a default is specified, even if it is `undefined`. + +```html +<script> + export let bar = 'optional default value'; + export let baz = undefined; +</script> +``` + +--- + +If you export a `const`, `class` or `function`, it is readonly from outside the component. Function *expressions* are valid props, however. + +```html +<script> + // these are readonly + export const thisIs = 'readonly'; + + export function greet(name) { + alert(`hello ${name}!`); } + + // this is a prop + export let format = n => n.toFixed(2); +</script> +``` + +--- + +You can use reserved words as prop names. + +```html +<script> + let className; + + // creates a `class` property, even + // though it is a reserved word + export { className as class }; </script> ``` @@ -66,8 +100,8 @@ Because Svelte's reactivity is based on assignments, using array methods like `. let count = 0; function handleClick () { - // calling this function will trigger a re-render - // if the markup references `count` + // calling this function will trigger an + // update if the markup references `count` count = count + 1; } </script> @@ -77,7 +111,7 @@ Because Svelte's reactivity is based on assignments, using array methods like `. --- -Any top-level statement (i.e. not inside a block or a function) can be made reactive by prefixing it with the `$:` label. Reactive statements run immediately before the component updates, whenever the values that they depend on have changed. +Any top-level statement (i.e. not inside a block or a function) can be made reactive by prefixing it with the `$:` [JS label syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label). Reactive statements run immediately before the component updates, whenever the values that they depend on have changed. ```html <script> @@ -113,8 +147,29 @@ If a statement consists entirely of an assignment to an undeclared variable, Sve --- +A *store* is any object that allows reactive access to a value via a simple *store contract*. + +The [`svelte/store` module](docs#svelte_store) contains minimal store implementations which fulfil this contract. You can use these as the basis for your own stores, or you can implement your stores from scratch. + +A store must contain a `.subscribe` method, which must accept as its argument a subscription function. This subscription function must be immediately and synchronously called with the store's current value upon calling `.subscribe`. All of a store's active subscription functions must later be synchronously called whenever the store's value changes. The `.subscribe` method must also return an unsubscription function. Calling an unsubscription function must stop its subscription, and its corresponding subscription function must not be called again by the store. + +A store may optionally contain a `.set` method, which must accept as its argument a new value for the store, and which synchronously calls all of the store's active subscription functions. Such a store is called a *writable store*. + +```js +const unsubscribe = store.subscribe(value => { + console.log(value); +}); // logs `value` + +// later... +unsubscribe(); +``` + +--- + Any time you have a reference to a store, you can access its value inside a component by prefixing it with the `$` character. This causes Svelte to declare the prefixed variable, and set up a store subscription that will be unsubscribed when appropriate. +Assignments to `$`-prefixed variables require that the variable be a writable store, and will result in a call to the store's `.set` method. + Note that the store must be declared at the top level of the component — not inside an `if` block or a function, for example. Local variables (that do not represent store values) must *not* have a `$` prefix. @@ -128,6 +183,9 @@ Local variables (that do not represent store values) must *not* have a `$` prefi count.set(1); console.log($count); // logs 1 + + $count = 2; + console.log($count); // logs 2 </script> ``` @@ -142,6 +200,8 @@ You can `export` bindings from this block, and they will become exports of the c You cannot `export default`, since the default export is the component itself. +> Variables defined in `module` scripts are not reactive — reassigning them will not trigger a rerender even though the variable itself will update. For values shared between multiple components, consider using a [store](https://svelte.dev/docs#svelte_store). + ```html <script context="module"> let totalComponents = 0; diff --git a/site/content/docs/02-template-syntax.md b/site/content/docs/02-template-syntax.md index 917673a7b0..3d396f2f24 100644 --- a/site/content/docs/02-template-syntax.md +++ b/site/content/docs/02-template-syntax.md @@ -7,7 +7,7 @@ title: Template syntax --- -A lowercase tag, like `<div>`, denotes a regular HTML element. A capitalised tag, such as `<Widget>`, indicates a *component*. +A lowercase tag, like `<div>`, denotes a regular HTML element. A capitalised tag, such as `<Widget>` or `<Namespace.Widget>`, indicates a *component*. ```html <script> @@ -20,7 +20,7 @@ A lowercase tag, like `<div>`, denotes a regular HTML element. A capitalised tag ``` -### Attributes +### Attributes and props --- @@ -76,6 +76,16 @@ When the attribute name and value match (`name={name}`), they can be replaced wi --- +By convention, values passed to components are referred to as *properties* or *props* rather than *attributes*, which are a feature of the DOM. + +As with elements, `name={name}` can be replaced with the `{name}` shorthand. + +```html +<Widget foo={bar} answer={42} text="hello"/> +``` + +--- + *Spread attributes* allow many attributes or properties to be passed to an element or component at once. An element or component can have multiple spread attributes, interspersed with regular ones. @@ -101,27 +111,7 @@ Text can also contain JavaScript expressions: ``` -### HTML expressions - -```sv -{@html expression} -``` - ---- - -In a text expression, characters like `<` and `>` are escaped. With HTML expressions, they're not. - -> Svelte does not sanitize expressions before injecting HTML. If the data comes from an untrusted source, you must sanitize it, or you are exposing your users to an XSS vulnerability. - -```html -<div class="blog-post"> - <h1>{post.title}</h1> - {@html post.content} -</div> -``` - - -### If blocks +### {#if ...} ```sv {#if expression}...{/if} @@ -158,7 +148,7 @@ Additional conditions can be added with `{:else if expression}`, optionally endi ``` -### Each blocks +### {#each ...} ```sv {#each expression as name}...{/each} @@ -208,12 +198,20 @@ If a *key* expression is provided — which must uniquely identify each list ite --- -You can freely use destructuring patterns in each blocks. +You can freely use destructuring and rest patterns in each blocks. ```html {#each items as { id, name, qty }, i (id)} <li>{i + 1}: {name} x {qty}</li> {/each} + +{#each objects as { id, ...rest }} + <li><span>{id}</span><MyComponent {...rest}/></li> +{/each} + +{#each items as [id, ...rest]} + <li><span>{id}</span><MyComponent values={rest}/></li> +{/each} ``` --- @@ -229,7 +227,7 @@ An each block can also have an `{:else}` clause, which is rendered if the list i ``` -### Await blocks +### {#await ...} ```sv {#await expression}...{:then name}...{:catch name}...{/await} @@ -283,7 +281,80 @@ If you don't care about the pending state, you can also omit the initial block. ``` -### DOM events +### {@html ...} + +```sv +{@html expression} +``` + +--- + +In a text expression, characters like `<` and `>` are escaped. With HTML expressions, they're not. + +> Svelte does not sanitize expressions before injecting HTML. If the data comes from an untrusted source, you must sanitize it, or you are exposing your users to an XSS vulnerability. + +```html +<div class="blog-post"> + <h1>{post.title}</h1> + {@html post.content} +</div> +``` + + +### {@debug ...} + +```sv +{@debug} +``` +```sv +{@debug var1, var2, ..., varN} +``` + +--- + +The `{@debug ...}` tag offers an alternative to `console.log(...)`. It logs the values of specific variables whenever they change, and pauses code execution if you have devtools open. + +It accepts a comma-separated list of variable names (not arbitrary expressions). + +```html +<script> + let user = { + firstname: 'Ada', + lastname: 'Lovelace' + }; +</script> + +{@debug user} + +<h1>Hello {user.firstname}!</h1> +``` + +--- + +`{@debug ...}` accepts a comma-separated list of variable names (not arbitrary expressions). + +```html +<!-- Compiles --> +{@debug user} +{@debug user1, user2, user3} + +<!-- WON'T compile --> +{@debug user.firstname} +{@debug myArray[0]} +{@debug !isReady} +{@debug typeof user === 'object'} +``` + +The `{@debug}` tag without any arguments will insert a `debugger` statement that gets triggered when *any* state changes, as opposed to the specified variables. + + + +### Element directives + +As well as attributes, elements can have *directives*, which control the element's behaviour in some way. + + +#### [on:*eventname*](on_element_event) ```sv on:eventname={handler} @@ -324,6 +395,13 @@ Handlers can be declared inline with no performance penalty. As with attributes, Add *modifiers* to DOM events with the `|` character. +```html +<form on:submit|preventDefault={handleSubmit}> + <!-- the `submit` event's default is prevented, + so the page won't reload --> +</form> +``` + The following modifiers are available: * `preventDefault` — calls `event.preventDefault()` before running the handler @@ -334,13 +412,6 @@ The following modifiers are available: Modifiers can be chained together, e.g. `on:click|once|capture={...}`. -```html -<form on:submit|preventDefault={handleSubmit}> - <!-- the `submit` event's default is prevented, - so the page won't reload --> -</form> -``` - --- If the `on:` directive is used without a value, the component will *forward* the event, meaning that a consumer of the component can listen for it. @@ -351,40 +422,30 @@ If the `on:` directive is used without a value, the component will *forward* the </button> ``` - -### Component events - -```sv -on:eventname={handler} -``` - --- -Components can emit events using [createEventDispatcher](docs#createEventDispatcher), or by forwarding DOM events. Listening for component events looks the same as listening for DOM events: +It's possible to have multiple event listeners for the same event: ```html -<SomeComponent on:whatever={handler}/> -``` - ---- +<script> + let counter = 0; + function increment() { + counter = counter + 1; + } -As with DOM events, if the `on:` directive is used without a value, the component will *forward* the event, meaning that a consumer of the component can listen for it. + function track(event) { + trackEvent(event) + } +</script> -```html -<SomeComponent on:whatever/> +<button on:click={increment} on:click={track}>Click me!</button> ``` -### Element bindings +#### [bind:*property*](bind_element_property) ```sv bind:property={variable} ``` -```sv -bind:group={variable} -``` -```sv -bind:this={dom_node} -``` --- @@ -418,31 +479,8 @@ Numeric input values are coerced; even though `input.value` is a string as far a <input type="range" bind:value={num}> ``` -#### Binding related elements - ---- -Inputs that work together can use `bind:group`. - -```html -<script> - let tortilla = 'Plain'; - let fillings = []; -</script> - -<!-- grouped radio inputs are mutually exclusive --> -<input type="radio" bind:group={tortilla} value="Plain"> -<input type="radio" bind:group={tortilla} value="Whole wheat"> -<input type="radio" bind:group={tortilla} value="Spinach"> - -<!-- grouped checkbox inputs populate an array --> -<input type="checkbox" bind:group={fillings} value="Rice"> -<input type="checkbox" bind:group={fillings} value="Beans"> -<input type="checkbox" bind:group={fillings} value="Cheese"> -<input type="checkbox" bind:group={fillings} value="Guac (extra)"> -``` - -#### Binding `<select>` value +##### Binding `<select>` value --- @@ -482,7 +520,15 @@ When the value of an `<option>` matches its text content, the attribute can be o </select> ``` -#### Media element bindings +--- + +Elements with the `contenteditable` attribute support `innerHTML` and `textContent` bindings. + +```html +<div contenteditable="true" bind:innerHTML={html}></div> +``` + +##### Media element bindings --- @@ -512,7 +558,7 @@ Media elements (`<audio>` and `<video>`) have their own set of bindings — four ></video> ``` -#### Block-level element bindings +##### Block-level element bindings --- @@ -532,61 +578,61 @@ Block-level elements have 4 readonly bindings, measured using a technique simila </div> ``` -#### Binding a DOM node +#### bind:group + +```sv +bind:group={variable} +``` --- -To get a reference to a DOM node, use `bind:this`. +Inputs that work together can use `bind:group`. ```html <script> - import { onMount } from 'svelte'; - - let canvasElement; - - onMount(() => { - const ctx = canvasElement.getContext('2d'); - drawStuff(ctx); - }); + let tortilla = 'Plain'; + let fillings = []; </script> -<canvas bind:this={canvasElement}></canvas> -``` +<!-- grouped radio inputs are mutually exclusive --> +<input type="radio" bind:group={tortilla} value="Plain"> +<input type="radio" bind:group={tortilla} value="Whole wheat"> +<input type="radio" bind:group={tortilla} value="Spinach"> +<!-- grouped checkbox inputs populate an array --> +<input type="checkbox" bind:group={fillings} value="Rice"> +<input type="checkbox" bind:group={fillings} value="Beans"> +<input type="checkbox" bind:group={fillings} value="Cheese"> +<input type="checkbox" bind:group={fillings} value="Guac (extra)"> +``` -### Component bindings +#### [bind:this](bind_element) ```sv -bind:property={variable} -``` -```sv -bind:this={component_instance} +bind:this={dom_node} ``` --- -You can bind to component props using the same mechanism. +To get a reference to a DOM node, use `bind:this`. ```html -<Keypad bind:value={pin}/> -``` - ---- - -Components also support `bind:this`, allowing you to interact with component instances programmatically. +<script> + import { onMount } from 'svelte'; -> Note that we can do `{cart.empty}` rather than `{() => cart.empty()}`, since component methods are closures. You don't need to worry about the value of `this` when calling them. + let canvasElement; -```html -<ShoppingCart bind:this={cart}/> + onMount(() => { + const ctx = canvasElement.getContext('2d'); + drawStuff(ctx); + }); +</script> -<button on:click={cart.empty}> - Empty shopping cart -</button> +<canvas bind:this={canvasElement}></canvas> ``` -### Classes +#### class:*name* ```sv class:name={value} @@ -612,7 +658,7 @@ A `class:` directive provides a shorter way of toggling a class on an element. ``` -### Actions +#### use:*action* ```sv use:action @@ -677,43 +723,19 @@ An action can have parameters. If the returned value has an `update` method, it ``` -### Transitions +#### transition:*fn* ```sv -transition:name -``` -```sv -transition:name={params} +transition:fn ``` ```sv -transition:name|local +transition:fn={params} ``` ```sv -transition:name|local={params} +transition:fn|local ``` ```sv -in:name -``` -```sv -in:name={params} -``` -```sv -in:name|local -``` -```sv -in:name|local={params} -``` -```sv -out:name -``` -```sv -out:name={params} -``` -```sv -out:name|local -``` -```sv -out:name|local={params} +transition:fn|local={params} ``` @@ -729,7 +751,7 @@ transition = (node: HTMLElement, params: any) => { --- -A transition is triggered by an element entering or leaving the DOM as a result of a state change. Transitions do not run when a component is first mounted, but only on subsequent updates. +A transition is triggered by an element entering or leaving the DOM as a result of a state change. Elements inside an *outroing* block are kept in the DOM until all current transitions have completed. @@ -743,21 +765,9 @@ The `transition:` directive indicates a *bidirectional* transition, which means {/if} ``` ---- - -The `in:` and `out:` directives are not bidirectional. An in transition will continue to 'play' alongside the out transition, if the block is outroed while the transition is in progress. If an out transition is aborted, transitions will restart from scratch. - -```html -{#if visible} - <div in:fly out:fade> - flies in, fades out - </div> -{/if} -``` - > By default intro transitions will not play on first render. You can modify this behaviour by setting `intro: true` when you [create a component](docs#Client-side_component_API). -#### Transition parameters +##### Transition parameters --- @@ -773,7 +783,7 @@ Like actions, transitions can have parameters. {/if} ``` -#### Custom transition functions +##### Custom transition functions --- @@ -849,7 +859,7 @@ A custom transition function can also return a `tick` function, which is called If a transition returns a function instead of a transition object, the function will be called in the next microtask. This allows multiple transitions to coordinate, making [crossfade effects](tutorial/deferred-transitions) possible. -#### Transition events +##### Transition events --- @@ -893,12 +903,246 @@ Local transitions only play when the block they belong to is created or destroye ``` -### Animations +#### in:*fn*/out:*fn* + +```sv +in:fn +``` +```sv +in:fn={params} +``` +```sv +in:fn|local +``` +```sv +in:fn|local={params} +``` + +```sv +out:fn +``` +```sv +out:fn={params} +``` +```sv +out:fn|local +``` +```sv +out:fn|local={params} +``` + +--- + +Similar to `transition:`, but only applies to elements entering (`in:`) or leaving (`out:`) the DOM. + +Unlike with `transition:`, transitions applied with `in:` and `out:` are not bidirectional — an in transition will continue to 'play' alongside the out transition, rather than reversing, if the block is outroed while the transition is in progress. If an out transition is aborted, transitions will restart from scratch. + +```html +{#if visible} + <div in:fly out:fade> + flies in, fades out + </div> +{/if} +``` + + + +#### animate:*fn* + +```sv +animate:name +``` + +```sv +animate:name={params} +``` + +```js +animation = (node: HTMLElement, { from: DOMRect, to: DOMRect } , params: any) => { + delay?: number, + duration?: number, + easing?: (t: number) => number, + css?: (t: number, u: number) => string, + tick?: (t: number, u: number) => void +} +``` + +```js +DOMRect { + bottom: number, + height: number, + ​​left: number, + right: number, + ​top: number, + width: number, + x: number, + y:number +} +``` + +--- + +An animation is triggered when the contents of a [keyed each block](docs#each) are re-ordered. Animations do not run when an element is removed, only when the each block's data is reordered. Animate directives must be on an element that is an *immediate* child of a keyed each block. + +Animations can be used with Svelte's [built-in animation functions](docs#svelte_animate) or [custom animation functions](docs#Custom_animation_functions). + +```html +<!-- When `list` is reordered the animation will run--> +{#each list as item, index (item)} + <li animate:flip>{item}</li> +{/each} +``` + +##### Animation Parameters + +--- + +As with actions and transitions, animations can have parameters. + +(The double `{{curlies}}` aren't a special syntax; this is an object literal inside an expression tag.) + +```html +{#each list as item, index (item)} + <li animate:flip="{{ delay: 500 }}">{item}</li> +{/each} +``` + +##### Custom animation functions + +--- + +Animations can use custom functions that provide the `node`, an `animation` object and any `paramaters` as arguments. The `animation` parameter is an object containing `from` and `to` properties each containing a [DOMRect](https://developer.mozilla.org/en-US/docs/Web/API/DOMRect#Properties) describing the geometry of the element in its `start` and `end` positions. The `from` property is the DOMRect of the element in its starting position, the `to` property is the DOMRect of the element in its final position after the list has been reordered and the DOM updated. + +If the returned object has a `css` method, Svelte will create a CSS animation that plays on the element. + +The `t` argument passed to `css` is a value that goes from `0` and `1` after the `easing` function has been applied. The `u` argument is equal to `1 - t`. + +The function is called repeatedly *before* the animation begins, with different `t` and `u` arguments. + + +```html +<script> + import { cubicOut } from 'svelte/easing'; + + function whizz(node, { from, to }, params) { + + const dx = from.left - to.left; + const dy = from.top - to.top; + + const d = Math.sqrt(dx * dx + dy * dy); + + return { + delay: 0, + duration: Math.sqrt(d) * 120, + easing: cubicOut, + css: (t, u) => + `transform: translate(${u * dx}px, ${u * dy}px) rotate(${t*360}deg);` + }; + } +</script> + +{#each list as item, index (item)} + <div animate:whizz>{item}</div> +{/each} +``` + +--- + + +A custom animation function can also return a `tick` function, which is called *during* the animation with the same `t` and `u` arguments. + +> If it's possible to use `css` instead of `tick`, do so — CSS animations can run off the main thread, preventing jank on slower devices. + +```html +<script> + import { cubicOut } from 'svelte/easing'; + + function whizz(node, { from, to }, params) { + + const dx = from.left - to.left; + const dy = from.top - to.top; + + const d = Math.sqrt(dx * dx + dy * dy); + + return { + delay: 0, + duration: Math.sqrt(d) * 120, + easing: cubicOut, + tick: (t, u) => + Object.assign(node.style, { + color: t > 0.5 ? 'Pink' : 'Blue' + }); + }; + } +</script> + +{#each list as item, index (item)} + <div animate:whizz>{item}</div> +{/each} +``` + +### Component directives + +#### [on:*eventname*](on_component_event) + +```sv +on:eventname={handler} +``` + +--- + +Components can emit events using [createEventDispatcher](docs#createEventDispatcher), or by forwarding DOM events. Listening for component events looks the same as listening for DOM events: -TODO i can't remember how any of this works +```html +<SomeComponent on:whatever={handler}/> +``` +--- + +As with DOM events, if the `on:` directive is used without a value, the component will *forward* the event, meaning that a consumer of the component can listen for it. + +```html +<SomeComponent on:whatever/> +``` -### Slots + +#### [bind:*property*](bind_component_property) + +```sv +bind:property={variable} +``` + +--- + +You can bind to component props using the same mechanism. + +```html +<Keypad bind:value={pin}/> +``` + +#### [bind:this](bind_component) + +```sv +bind:this={component_instance} +``` + +--- + +Components also support `bind:this`, allowing you to interact with component instances programmatically. + +> Note that we can't do `{cart.empty}` since `cart` is `undefined` when the button is first rendered and throws an error. + +```html +<ShoppingCart bind:this={cart}/> + +<button on:click={() => cart.empty()}> + Empty shopping cart +</button> +``` + + + +### `<slot>` ```sv <slot><!-- optional fallback --></slot> @@ -930,6 +1174,8 @@ The content is exposed in the child component using the `<slot>` element, which </div> ``` +#### [`<slot name="`*name*`">`](slot_name) + --- Named slots allow consumers to target specific areas. They can also have fallback content. @@ -949,6 +1195,8 @@ Named slots allow consumers to target specific areas. They can also have fallbac </div> ``` +#### [`<slot let:`*name*`={`*value*`}>`](slot_let) + --- Slots can be rendered zero or more times, and can pass values *back* to the parent using props. The parent exposes the values to the slot template using the `let:` directive. @@ -995,7 +1243,7 @@ Named slots can also expose values. The `let:` directive goes on the element wit ``` -### <svelte:self> +### `<svelte:self>` --- @@ -1016,10 +1264,10 @@ It cannot appear at the top level of your markup; it must be inside an if or eac {/if} ``` -### <svelte:component> +### `<svelte:component>` ```sv -<svelte:component this={expression}> +<svelte:component this={expression}/> ``` --- @@ -1033,7 +1281,7 @@ If `this` is falsy, no component is rendered. ``` -### <svelte:window> +### `<svelte:window>` ```sv <svelte:window on:event={handler}/> @@ -1075,7 +1323,7 @@ All except `scrollX` and `scrollY` are readonly. ``` -### <svelte:body> +### `<svelte:body>` ```sv <svelte:body on:event={handler}/> @@ -1093,10 +1341,10 @@ As with `<svelte:window>`, this element allows you to add listeners to events on ``` -### <svelte:head> +### `<svelte:head>` ```sv -<svelte:head> +<svelte:head>...</svelte:head> ``` --- @@ -1110,10 +1358,10 @@ This element makes it possible to insert elements into `document.head`. During s ``` -### <svelte:options> +### `<svelte:options>` ```sv -<svelte:options option={value}> +<svelte:options option={value}/> ``` --- diff --git a/site/content/docs/03-run-time.md b/site/content/docs/03-run-time.md index cbf65e24ee..371ffe36d8 100644 --- a/site/content/docs/03-run-time.md +++ b/site/content/docs/03-run-time.md @@ -156,6 +156,8 @@ Like lifecycle functions, this must be called during component initialisation. </script> ``` +> Context is not inherently reactive. If you need reactive values in context then you can pass a store into context, which *will* be reactive. + #### `getContext` ```js @@ -212,39 +214,7 @@ Events dispatched from child components can be listened to in their parent. Any ### `svelte/store` -The `svelte/store` module exports functions for creating [stores](tutorial/writable-stores). - ---- - -To be considered a store, an object must have a `subscribe` method that returns an `unsubscribe` function. - -```js -const unsubscribe = store.subscribe(value => { - console.log(value); -}); // logs `value` - -// later... -unsubscribe(); -``` - ---- - -Stores have special significance inside Svelte components. Their values can be read by prefixing the store's name with the `$` character, which causes Svelte to set up subscriptions and unsubscriptions automatically during the component's lifecycle. - -```html -<script> - import { count } from './stores.js'; - - function handleClick() { - // this is equivalent to count.update(n => n + 1) - $count += 1; - } -</script> - -<button on:click={handleClick}> - Clicks: {$count} -</button> -``` +The `svelte/store` module exports functions for creating [stores](docs#4_Prefix_stores_with_$_to_access_their_values). #### `writable` @@ -257,7 +227,11 @@ store = writable(value: any, (set: (value: any) => void) => () => void) --- -Creates a store with additional `set` and `update` methods. +Function that creates a store which has values that can be set from 'outside' components. It gets created as an object with additional `set` and `update` methods. + +`set` is a method that takes one argument which is the value to be set. The store value gets set to the value of the argument if the store value is not already equal to it. + +`update` is a method that takes one argument which is a callback. The callback takes the existing store value as its argument and returns the new value to be set to the store. ```js import { writable } from 'svelte/store'; @@ -324,13 +298,13 @@ const time = readable(new Date(), set => { store = derived(a, callback: (a: any) => any) ``` ```js -store = derived(a, callback: (a: any, set: (value: any) => void) => void, initial_value: any) +store = derived(a, callback: (a: any, set: (value: any) => void) => void | () => void, initial_value: any) ``` ```js store = derived([a, ...b], callback: ([a: any, ...b: any[]]) => any) ``` ```js -store = derived([a, ...b], callback: ([a: any, ...b: any[]], set: (value: any) => void) => void, initial_value: any) +store = derived([a, ...b], callback: ([a: any, ...b: any[]], set: (value: any) => void) => void | () => void, initial_value: any) ``` --- @@ -361,6 +335,24 @@ const delayed = derived(a, ($a, set) => { --- +If you return a function from the callback, it will be called when a) the callback runs again, or b) the last subscriber unsubscribes. + +```js +import { derived } from 'svelte/store'; + +const tick = derived(frequency, ($frequency, set) => { + const interval = setInterval(() => { + set(Date.now()); + }, 1000 / $frequency); + + return () => { + clearInterval(interval); + }; +}, 'one moment...'); +``` + +--- + In both cases, an array of arguments can be passed as the first argument instead of a single store. ```js @@ -407,7 +399,7 @@ Tweened stores update their values over a fixed duration. The following options * `delay` (`number`, default 0) — milliseconds before starting * `duration` (`number`, default 400) — milliseconds the tween lasts * `easing` (`function`, default `t => t`) — an [easing function](docs#svelte_easing) -* `interpolator` (`function`) — see below +* `interpolate` (`function`) — see below `store.set` and `store.update` can accept a second `options` argument that will override the options passed in upon instantiation. @@ -441,7 +433,7 @@ Out of the box, Svelte will interpolate between two numbers, two arrays or two o --- -The `interpolator` option allows you to tween between *any* arbitrary values. It must be an `(a, b) => t => value` function, where `a` is the starting value, `b` is the target value, `t` is a number between 0 and 1, and `value` is the result. For example, we can use the [d3-interpolate](https://github.com/d3/d3-interpolate) package to smoothly interpolate between two colours. +The `interpolate` option allows you to tween between *any* arbitrary values. It must be an `(a, b) => t => value` function, where `a` is the starting value, `b` is the target value, `t` is a number between 0 and 1, and `value` is the result. For example, we can use the [d3-interpolate](https://github.com/d3/d3-interpolate) package to smoothly interpolate between two colours. ```html <script> @@ -503,10 +495,204 @@ Both `set` and `update` can take a second argument — an object with `hard` or ### `svelte/transition` -TODO +The `svelte/transition` module exports six functions: `fade`, `fly`, `slide`, `scale`, `draw` and `crossfade`. They are for use with svelte [`transitions`](docs#Transitions). + +#### `fade` + +```sv +transition:fade={params} +``` +```sv +in:fade={params} +``` +```sv +out:fade={params} +``` + +--- + +Animates the opacity of an element from 0 to the current opacity for `in` transitions and from the current opacity to 0 for `out` transitions. + +`fade` accepts the following parameters: + +* `delay` (`number`, default 0) — milliseconds before starting +* `duration` (`number`, default 400) — milliseconds the transition lasts + +You can see the `fade` transition in action in the [transition tutorial](tutorial/transition). + +```html +<script> + import { fade } from 'svelte/transition'; +</script> + +{#if condition} + <div transition:fade="{{delay: 250, duration: 300}}"> + fades in and out + </div> +{/if} +``` + +#### `fly` + +```sv +transition:fly={params} +``` +```sv +in:fly={params} +``` +```sv +out:fly={params} +``` + +--- + +Animates the x and y positions and the opacity of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values. + +`fly` accepts the following parameters: + +* `delay` (`number`, default 0) — milliseconds before starting +* `duration` (`number`, default 400) — milliseconds the transition lasts +* `easing` (`function`, default `cubicOut`) — an [easing function](docs#svelte_easing) +* `x` (`number`, default 0) - the x offset to animate out to and in from +* `y` (`number`, default 0) - the y offset to animate out to and in from +* `opacity` (`number`, default 0) - the opacity value to animate out to and in from + +You can see the `fly` transition in action in the [transition tutorial](tutorial/adding-parameters-to-transitions). + +```html +<script> + import { fly } from 'svelte/transition'; + import { quintOut } from 'svelte/easing'; +</script> + +{#if condition} + <div transition:fly="{{delay: 250, duration: 300, x: 100, y: 500, opacity: 0.5, easing: quintOut}}"> + flies in and out + </div> +{/if} +``` + +#### `slide` + +```sv +transition:slide={params} +``` +```sv +in:slide={params} +``` +```sv +out:slide={params} +``` + +--- + +Slides an element in and out. + +`slide` accepts the following parameters: + +* `delay` (`number`, default 0) — milliseconds before starting +* `duration` (`number`, default 400) — milliseconds the transition lasts +* `easing` (`function`, default `cubicOut`) — an [easing function](docs#svelte_easing) + +```html +<script> + import { slide } from 'svelte/transition'; + import { quintOut } from 'svelte/easing'; +</script> + +{#if condition} + <div transition:slide="{{delay: 250, duration: 300, easing: quintOut }}"> + slides in and out + </div> +{/if} +``` + +#### `scale` + +```sv +transition:scale={params} +``` +```sv +in:scale={params} +``` +```sv +out:scale={params} +``` + +--- + +Animates the opacity and scale of an element. `in` transitions animate from an element's current (default) values to the provided values, passed as parameters. `out` transitions animate from the provided values to an element's default values. + +`scale` accepts the following parameters: + +* `delay` (`number`, default 0) — milliseconds before starting +* `duration` (`number`, default 400) — milliseconds the transition lasts +* `easing` (`function`, default `cubicOut`) — an [easing function](docs#svelte_easing) +* `start` (`number`, default 0) - the scale value to animate out to and in from +* `opacity` (`number`, default 0) - the opacity value to animate out to and in from + +```html +<script> + import { scale } from 'svelte/transition'; + import { quintOut } from 'svelte/easing'; +</script> + +{#if condition} + <div transition:scale="{{duration: 500, delay: 500, opacity: 0.5, start: 0.5, easing: quintOut}}"> + scales in and out + </div> +{/if} +``` + +#### `draw` + +```sv +transition:draw={params} +``` +```sv +in:draw={params} +``` +```sv +out:draw={params} +``` + +--- + +Animates the stroke of an SVG element, like a snake in a tube. `in` transitions begin with the path invisible and draw the path to the screen over time. `out` transitions start in a visible state and gradually erase the path. `draw` only works with elements that have a `getTotalLength` method, like `<path>` and `<polyline>`. + +`scale` accepts the following parameters: + +* `delay` (`number`, default 0) — milliseconds before starting +* `speed` (`number`, default undefined) - the speed of the animation, see below. +* `duration` (`number` | `function`, default 800) — milliseconds the transition lasts +* `easing` (`function`, default `cubicInOut`) — an [easing function](docs#svelte_easing) + +The `speed` parameter is a means of setting the duration of the transition relative to the path's length. It is modifier that is applied to the length of the path: `duration = length / speed`. A path that is 1000 pixels with a speed of 1 will have a duration of `1000ms`, setting the speed to `0.5` will halve that duration and setting it to `2` will double it. + +```html +<script> + import { draw } from 'svelte/transition'; + import { quintOut } from 'svelte/easing'; +</script> + +<svg viewBox="0 0 5 5" xmlns="http://www.w3.org/2000/svg"> + {#if condition} + <path transition:draw="{{duration: 5000, delay: 500, easing: quintOut}}" + d="M2 1 h1 v1 h1 v1 h-1 v1 h-1 v-1 h-1 v-1 h1 z" + fill="none" + stroke="cornflowerblue" + stroke-width="0.1px" + stroke-linejoin="round" + /> + {/if} +</svg> + +``` + + +<!-- Crossfade is coming soon... --> + -* fade, fly, slide, scale, draw -* crossfade... ### `svelte/animate` @@ -556,7 +742,23 @@ You can see a full example on the [animations tutorial](tutorial/animate) ### `svelte/easing` -* TODO could have nice little interactive widgets showing the different functions, maybe +Easing functions specificy the rate of change over time and are useful when working with Svelte's built-in transitions and animations as well as the tweened and spring utilities. `svelte/easing` contains 31 named exports, a `linear` ease and 3 variants of 10 different easing functions: `in`, `out` and `inOut`. + +You can explore the various eases using the [ease visualiser](examples#easing) in the [examples section](examples). + + +| ease | in | out | inOut | +| --- | --- | --- | --- | +| **back** | `backIn` | `backOut` | `backInOut` | +| **bounce** | `bounceIn` | `bounceOut` | `bounceInOut` | +| **circ** | `circIn` | `circOut` | `circInOut` | +| **cubic** | `cubicIn` | `cubicOut` | `cubicInOut` | +| **elastic** | `elasticIn` | `elasticOut` | `elasticInOut` | +| **expo** | `expoIn` | `expoOut` | `expoInOut` | +| **quad** | `quadIn` | `quadOut` | `quadInOut` | +| **quart** | `quartIn` | `quartOut` | `quartInOut` | +| **quint** | `quintIn` | `quintOut` | `quintInOut` | +| **sine** | `sineIn` | `sineOut` | `sineInOut` | ### `svelte/register` diff --git a/site/content/docs/04-compile-time.md b/site/content/docs/04-compile-time.md index b019b9437b..c219bae497 100644 --- a/site/content/docs/04-compile-time.md +++ b/site/content/docs/04-compile-time.md @@ -308,8 +308,8 @@ const { code } = svelte.preprocess(source, [ ```js walk(ast: Node, { - enter(node: Node, parent: Node)?: void, - leave(node: Node, parent: Node)?: void + enter(node: Node, parent: Node, prop: string, index: number)?: void, + leave(node: Node, parent: Node, prop: string, index: number)?: void }) ``` @@ -323,13 +323,13 @@ The walker takes an abstract syntax tree to walk and an object with two optional ```js const svelte = require('svelte/compiler'); svelte.walk(ast, { - enter(node, parent) { + enter(node, parent, prop, index) { do_something(node); if (should_skip_children(node)) { this.skip(); } }, - leave(node, parent) { + leave(node, parent, prop, index) { do_something_else(node); } }); diff --git a/site/content/examples/05-bindings/04-textarea-inputs/App.svelte b/site/content/examples/05-bindings/04-textarea-inputs/App.svelte index be338bf47f..5a9e18f79d 100644 --- a/site/content/examples/05-bindings/04-textarea-inputs/App.svelte +++ b/site/content/examples/05-bindings/04-textarea-inputs/App.svelte @@ -1,12 +1,12 @@ <script> import marked from 'marked'; - let value = `Some words are *italic*, some are **bold**`; + let text = `Some words are *italic*, some are **bold**`; </script> <style> textarea { width: 100%; height: 200px; } </style> -<textarea bind:value></textarea> +<textarea bind:value={text}></textarea> -{@html marked(value)} \ No newline at end of file +{@html marked(text)} \ No newline at end of file diff --git a/site/content/examples/06-lifecycle/02-update/App.svelte b/site/content/examples/06-lifecycle/02-update/App.svelte index 373b6dcb6a..3eb2dceb52 100644 --- a/site/content/examples/06-lifecycle/02-update/App.svelte +++ b/site/content/examples/06-lifecycle/02-update/App.svelte @@ -1,5 +1,5 @@ <script> - import Eliza from 'elizanode'; + import Eliza from 'elizabot'; import { beforeUpdate, afterUpdate } from 'svelte'; let div; diff --git a/site/content/examples/10-animations/00-animate/App.svelte b/site/content/examples/10-animations/00-animate/App.svelte index c46096c204..faba1dd062 100644 --- a/site/content/examples/10-animations/00-animate/App.svelte +++ b/site/content/examples/10-animations/00-animate/App.svelte @@ -1,8 +1,9 @@ <script> import { quintOut } from 'svelte/easing'; - import crossfade from './crossfade.js'; // TODO put this in svelte/transition! + import { crossfade } from 'svelte/transition'; + import { flip } from 'svelte/animate'; - const { send, receive } = crossfade({ + const [send, receive] = crossfade({ fallback(node, params) { const style = getComputedStyle(node); const transform = style.transform === 'none' ? '' : style.transform; @@ -43,12 +44,6 @@ function remove(todo) { todos = todos.filter(t => t !== todo); } - - function handleKeydown(event) { - if (event.which === 13) { - addTodo(event.target); - } - } </script> <style> @@ -114,7 +109,7 @@ </style> <div class='board'> - <input class="new-todo" placeholder="what needs to be done?" on:enter={add}> + <input class="new-todo" placeholder="what needs to be done?" on:keydown="{event => event.which === 13 && add(this)}"> <div class='left'> <h2>todo</h2> @@ -122,6 +117,7 @@ <label in:receive="{{key: todo.id}}" out:send="{{key: todo.id}}" + animate:flip > <input type=checkbox bind:checked={todo.done}> {todo.description} @@ -136,6 +132,7 @@ <label in:receive="{{key: todo.id}}" out:send="{{key: todo.id}}" + animate:flip > <input type=checkbox bind:checked={todo.done}> {todo.description} @@ -143,4 +140,4 @@ </label> {/each} </div> -</div> \ No newline at end of file +</div> diff --git a/site/content/examples/10-animations/00-animate/crossfade.js b/site/content/examples/10-animations/00-animate/crossfade.js deleted file mode 100644 index e11e18b60e..0000000000 --- a/site/content/examples/10-animations/00-animate/crossfade.js +++ /dev/null @@ -1,65 +0,0 @@ -import { quintOut } from 'svelte/easing'; - -export default function crossfade({ send, receive, fallback }) { - let requested = new Map(); - let provided = new Map(); - - function crossfade(from, node) { - const to = node.getBoundingClientRect(); - const dx = from.left - to.left; - const dy = from.top - to.top; - - const style = getComputedStyle(node); - const transform = style.transform === 'none' ? '' : style.transform; - - return { - duration: 400, - easing: quintOut, - css: (t, u) => ` - opacity: ${t}; - transform: ${transform} translate(${u * dx}px,${u * dy}px); - ` - }; - } - - return { - send(node, params) { - provided.set(params.key, { - rect: node.getBoundingClientRect() - }); - - return () => { - if (requested.has(params.key)) { - const { rect } = requested.get(params.key); - requested.delete(params.key); - - return crossfade(rect, node); - } - - // if the node is disappearing altogether - // (i.e. wasn't claimed by the other list) - // then we need to supply an outro - provided.delete(params.key); - return fallback(node, params); - }; - }, - - receive(node, params) { - requested.set(params.key, { - rect: node.getBoundingClientRect() - }); - - return () => { - if (provided.has(params.key)) { - const { rect } = provided.get(params.key); - provided.delete(params.key); - - return crossfade(rect, node); - } - - requested.delete(params.key); - return fallback(node, params); - }; - } - }; -} \ No newline at end of file diff --git a/site/content/examples/11-easing/00-easing/App.svelte b/site/content/examples/11-easing/00-easing/App.svelte new file mode 100644 index 0000000000..c33e73518e --- /dev/null +++ b/site/content/examples/11-easing/00-easing/App.svelte @@ -0,0 +1,106 @@ +<script> + import { interpolateString as interpolate } from 'd3-interpolate'; + import { tweened } from 'svelte/motion'; + + import Grid from './Grid.svelte'; + import Controls from './Controls.svelte'; + + import { eases, types } from './eases.js'; + + let current_type = 'In'; + let current_ease = 'sine'; + let duration = 2000; + let current = eases.get(current_ease)[current_type]; + let playing = false; + let width; + + const ease_path = tweened(current.shape, { interpolate }); + const time = tweened(0); + const value = tweened(1000); + + async function runAnimations() { + playing = true; + + value.set(1000, {duration: 0}); + time.set(0, {duration: 0}); + + await ease_path.set(current.shape); + await Promise.all([ + time.set(1000, {duration, easing: x => x}), + value.set(0, {duration, easing: current.fn}) + ]); + + playing = false; + } + + $: current = eases.get(current_ease)[current_type]; + $: current && runAnimations(); +</script> + +<style> + .easing-vis { + display: flex; + max-height: 95%; + max-width: 800px; + margin: auto; + padding: 10px; + border: 1px solid #333; + border-radius: 2px; + padding: 20px; + } + + svg { + width: 100%; + margin: 0 20px 0 0; + } + + .graph { + transform: translate(200px,400px) + } + + @media (max-width:600px) { + .easing-vis { + flex-direction: column; + max-height: calc(100% - 3rem); + } + } +</style> + +<div bind:offsetWidth={width} class="easing-vis"> + <svg viewBox="0 0 1400 1802"> + <g class="canvas"> + <Grid x={$time} y={$value}/> + <g class="graph"> + <path + d={$ease_path} + stroke="#333" + stroke-width="2" + fill="none" + /> + + <path d="M0,23.647C0,22.41 27.014,0.407 28.496,0.025C29.978,-0.357 69.188,3.744 70.104,4.744C71.02,5.745 71.02,41.499 70.104,42.5C69.188,43.501 29.978,47.601 28.496,47.219C27.014,46.837 0,24.884 0,23.647Z" + fill="#ff3e00" + style="transform: translate(1060px, {($value - 24)}px)" + /> + + <circle + cx="{$time}" + cy="{$value}" + r="15" + fill="#ff3e00" + /> + </g> + </g> + </svg> + + <Controls + {eases} + {types} + {playing} + {width} + bind:duration + bind:current_ease + bind:current_type + on:play={runAnimations} + /> +</div> \ No newline at end of file diff --git a/site/content/examples/11-easing/00-easing/Controls.svelte b/site/content/examples/11-easing/00-easing/Controls.svelte new file mode 100644 index 0000000000..66a297323f --- /dev/null +++ b/site/content/examples/11-easing/00-easing/Controls.svelte @@ -0,0 +1,186 @@ +<script> + import { createEventDispatcher } from 'svelte'; + + export let current_ease; + export let current_type; + export let eases; + export let types; + export let duration; + export let playing; + export let width; + + const dispatch = createEventDispatcher(); + + $: mobile = width && width < 600; +</script> + +<style> + .easing-sidebar { + width: 11em; + } + + ul { + list-style: none; + padding: 0; + display: flex; + flex-direction: column; + align-items: flex-start; + font-size: 18px; + } + + li { + padding: 5px 10px; + background: #eee; + border-radius: 2px; + margin: 3px 0; + cursor:pointer; + } + + li:hover { + background: #676778; + color: white; + } + + .selected { + background: #ff3e00; + color: white; + } + + h3 { + margin: 0 10px 0 0; + } + + h4 { + margin-bottom: 0; + } + + select { + display: inline; + padding: 0.2em; + margin: 0; + } + + .duration { + width: 100%; + display: flex; + align-items: center; + flex-wrap: wrap; + } + + .duration span { + display: flex; + } + + .duration input { + width: 80px; + margin: 10px 10px 10px 0 ; + } + + .duration button { + margin: 10px 5px; + } + + .duration .number { + width: 30px; + } + + .duration .play { + margin: 0 5px 0 auto; + width: 100%; + } + + @media (max-width:600px) { + .easing-types { + display: flex; + align-items: center; + margin-top: 10px; + } + + .easing-sidebar { + width: 100%; + } + + .duration .play { + margin-left: auto; + width: unset; + } + + h3 { + font-size: 0.9em; + display: inline; + } + + h3:nth-of-type(2) { + margin-left: auto; + } + + ul li { + margin-right: 10px; + } + } +</style> + +<div class="easing-sidebar"> + <div class="easing-types"> + <h3>Ease</h3> + {#if mobile} + <select bind:value={current_ease}> + {#each [...eases] as [name]} + <option + value={name} + class:selected={name === current_ease} + > + {name} + </option> + {/each} + </select> + {:else} + <ul> + {#each [...eases] as [name]} + <li + class:selected={name === current_ease} + on:click={() => current_ease = name} + > + {name} + </li> + {/each} + </ul> + {/if} + <h3>Type</h3> + {#if mobile } + <select bind:value={current_type}> + {#each types as [name, type]} + <option + value={type} + > + {name} + </option> + {/each} + </select> + {:else} + <ul> + {#each types as [name, type]} + <li + class:selected={type === current_type} + on:click={() => current_type = type} + > + {name} + </li> + {/each} + </ul> + {/if} + </div> + <h4> + Duration + </h4> + <div class="duration"> + <span> + <input type="number" bind:value={duration} min="0" step="100"/> + <button class="number" on:click={() => duration -= 100}>-</button> + <button class="number" on:click={() => duration += 100}>+</button> + </span> + <button class="play" on:click={() => dispatch('play')}> + {playing ? 'Restart' : 'Play'} + </button> + </div> + </div> \ No newline at end of file diff --git a/site/content/examples/11-easing/00-easing/Grid.svelte b/site/content/examples/11-easing/00-easing/Grid.svelte new file mode 100644 index 0000000000..e704f46cf7 --- /dev/null +++ b/site/content/examples/11-easing/00-easing/Grid.svelte @@ -0,0 +1,62 @@ +<script> + export let x, y; +</script> + +<style> + .grid-line { + stroke:#ccc; + opacity: 0.5; + stroke-width: 2; + } + + .grid-line-xy { + stroke: tomato; + stroke-width: 2; + } +</style> + +<svelte:options namespace="svg" /> + +<rect + x=0 + y=0 + width=1400 + height=1800 + stroke=#ccc + style="opacity: 0.5" + fill=none + stroke-width=2 +/> + +{#each { length: 8 } as _, i} + {#if i < 6} + <path + d="M{(i+1) * 200} 0 L{(i+1)*200} 1802" + class="grid-line" + /> + {/if} + <path + d="M0 {(i+1) * 200} L1400 {(i+1)*200} " + class="grid-line" + /> +{/each} + +<path + style="transform: translateX({x+200}px)" + d="M0 0 L0 1800" + class="grid-line-xy" +/> +<path + style="transform: translateY({y}px)" + d="M0 400 L1400 400" + class="grid-line-xy" +/> +<rect + x=200 + y=400 + width=1000 + height=1000 + stroke=#999 + fill=none + stroke-width=2 +/> \ No newline at end of file diff --git a/site/content/examples/11-easing/00-easing/eases.js b/site/content/examples/11-easing/00-easing/eases.js new file mode 100644 index 0000000000..a24246005a --- /dev/null +++ b/site/content/examples/11-easing/00-easing/eases.js @@ -0,0 +1,43 @@ +import * as eases from 'svelte/easing'; + +const processed_eases = {}; + +for (const ease in eases) { + if (ease === "linear") { + processed_eases.linear = eases.linear; + } else { + const name = ease.replace(/In$|InOut$|Out$/, ''); + const type = ease.match(/In$|InOut$|Out$/)[0]; + + if (!(name in processed_eases)) processed_eases[name] = {}; + processed_eases[name][type] = {}; + processed_eases[name][type].fn = eases[ease]; + + let shape = 'M0 1000'; + for (let i = 1; i <= 1000; i++) { + shape = `${shape} L${(i / 1000) * 1000} ${1000 - eases[ease](i / 1000) * 1000} `; + processed_eases[name][type].shape = shape; + } + } +} + +const sorted_eases = new Map([ + ['sine', processed_eases.sine], + ['quad', processed_eases.quad], + ['cubic', processed_eases.cubic], + ['quart', processed_eases.quart], + ['quint', processed_eases.quint], + ['expo', processed_eases.expo], + ['circ', processed_eases.circ], + ['back', processed_eases.back], + ['elastic', processed_eases.elastic], + ['bounce', processed_eases.bounce], +]); + +export const types = [ + ['Ease In', 'In'], + ['Ease Out', 'Out'], + ['Ease In Out', 'InOut'] +]; + +export { sorted_eases as eases }; \ No newline at end of file diff --git a/site/content/examples/11-easing/00-easing/meta.json b/site/content/examples/11-easing/00-easing/meta.json new file mode 100644 index 0000000000..59ad604b26 --- /dev/null +++ b/site/content/examples/11-easing/00-easing/meta.json @@ -0,0 +1,3 @@ +{ + "title": "Ease Visualiser" +} \ No newline at end of file diff --git a/site/content/examples/11-easing/meta.json b/site/content/examples/11-easing/meta.json new file mode 100644 index 0000000000..78341a522d --- /dev/null +++ b/site/content/examples/11-easing/meta.json @@ -0,0 +1,3 @@ +{ + "title": "Easing" +} \ No newline at end of file diff --git a/site/content/examples/11-svg/01-clock/App.svelte b/site/content/examples/12-svg/01-clock/App.svelte similarity index 100% rename from site/content/examples/11-svg/01-clock/App.svelte rename to site/content/examples/12-svg/01-clock/App.svelte diff --git a/site/content/examples/11-svg/01-clock/meta.json b/site/content/examples/12-svg/01-clock/meta.json similarity index 100% rename from site/content/examples/11-svg/01-clock/meta.json rename to site/content/examples/12-svg/01-clock/meta.json diff --git a/site/content/examples/11-svg/02-bar-chart/App.svelte b/site/content/examples/12-svg/02-bar-chart/App.svelte similarity index 100% rename from site/content/examples/11-svg/02-bar-chart/App.svelte rename to site/content/examples/12-svg/02-bar-chart/App.svelte diff --git a/site/content/examples/11-svg/02-bar-chart/meta.json b/site/content/examples/12-svg/02-bar-chart/meta.json similarity index 100% rename from site/content/examples/11-svg/02-bar-chart/meta.json rename to site/content/examples/12-svg/02-bar-chart/meta.json diff --git a/site/content/examples/11-svg/03-area-chart/App.svelte b/site/content/examples/12-svg/03-area-chart/App.svelte similarity index 100% rename from site/content/examples/11-svg/03-area-chart/App.svelte rename to site/content/examples/12-svg/03-area-chart/App.svelte diff --git a/site/content/examples/11-svg/03-area-chart/data.js b/site/content/examples/12-svg/03-area-chart/data.js similarity index 100% rename from site/content/examples/11-svg/03-area-chart/data.js rename to site/content/examples/12-svg/03-area-chart/data.js diff --git a/site/content/examples/11-svg/03-area-chart/meta.json b/site/content/examples/12-svg/03-area-chart/meta.json similarity index 100% rename from site/content/examples/11-svg/03-area-chart/meta.json rename to site/content/examples/12-svg/03-area-chart/meta.json diff --git a/site/content/examples/11-svg/04-scatterplot/App.svelte b/site/content/examples/12-svg/04-scatterplot/App.svelte similarity index 100% rename from site/content/examples/11-svg/04-scatterplot/App.svelte rename to site/content/examples/12-svg/04-scatterplot/App.svelte diff --git a/site/content/examples/11-svg/04-scatterplot/Scatterplot.svelte b/site/content/examples/12-svg/04-scatterplot/Scatterplot.svelte similarity index 100% rename from site/content/examples/11-svg/04-scatterplot/Scatterplot.svelte rename to site/content/examples/12-svg/04-scatterplot/Scatterplot.svelte diff --git a/site/content/examples/11-svg/04-scatterplot/data.js b/site/content/examples/12-svg/04-scatterplot/data.js similarity index 100% rename from site/content/examples/11-svg/04-scatterplot/data.js rename to site/content/examples/12-svg/04-scatterplot/data.js diff --git a/site/content/examples/11-svg/04-scatterplot/meta.json b/site/content/examples/12-svg/04-scatterplot/meta.json similarity index 100% rename from site/content/examples/11-svg/04-scatterplot/meta.json rename to site/content/examples/12-svg/04-scatterplot/meta.json diff --git a/site/content/examples/11-svg/05-svg-transitions/App.svelte b/site/content/examples/12-svg/05-svg-transitions/App.svelte similarity index 100% rename from site/content/examples/11-svg/05-svg-transitions/App.svelte rename to site/content/examples/12-svg/05-svg-transitions/App.svelte diff --git a/site/content/examples/11-svg/05-svg-transitions/custom-transitions.js b/site/content/examples/12-svg/05-svg-transitions/custom-transitions.js similarity index 100% rename from site/content/examples/11-svg/05-svg-transitions/custom-transitions.js rename to site/content/examples/12-svg/05-svg-transitions/custom-transitions.js diff --git a/site/content/examples/11-svg/05-svg-transitions/meta.json b/site/content/examples/12-svg/05-svg-transitions/meta.json similarity index 100% rename from site/content/examples/11-svg/05-svg-transitions/meta.json rename to site/content/examples/12-svg/05-svg-transitions/meta.json diff --git a/site/content/examples/11-svg/05-svg-transitions/shape.js b/site/content/examples/12-svg/05-svg-transitions/shape.js similarity index 100% rename from site/content/examples/11-svg/05-svg-transitions/shape.js rename to site/content/examples/12-svg/05-svg-transitions/shape.js diff --git a/site/content/examples/11-svg/meta.json b/site/content/examples/12-svg/meta.json similarity index 100% rename from site/content/examples/11-svg/meta.json rename to site/content/examples/12-svg/meta.json diff --git a/site/content/examples/12-actions/00-actions/App.svelte b/site/content/examples/13-actions/00-actions/App.svelte similarity index 100% rename from site/content/examples/12-actions/00-actions/App.svelte rename to site/content/examples/13-actions/00-actions/App.svelte diff --git a/site/content/examples/12-actions/00-actions/meta.json b/site/content/examples/13-actions/00-actions/meta.json similarity index 100% rename from site/content/examples/12-actions/00-actions/meta.json rename to site/content/examples/13-actions/00-actions/meta.json diff --git a/site/content/examples/12-actions/00-actions/pannable.js b/site/content/examples/13-actions/00-actions/pannable.js similarity index 100% rename from site/content/examples/12-actions/00-actions/pannable.js rename to site/content/examples/13-actions/00-actions/pannable.js diff --git a/site/content/examples/12-actions/01-adding-parameters-to-actions/App.svelte b/site/content/examples/13-actions/01-adding-parameters-to-actions/App.svelte similarity index 100% rename from site/content/examples/12-actions/01-adding-parameters-to-actions/App.svelte rename to site/content/examples/13-actions/01-adding-parameters-to-actions/App.svelte diff --git a/site/content/examples/12-actions/01-adding-parameters-to-actions/meta.json b/site/content/examples/13-actions/01-adding-parameters-to-actions/meta.json similarity index 100% rename from site/content/examples/12-actions/01-adding-parameters-to-actions/meta.json rename to site/content/examples/13-actions/01-adding-parameters-to-actions/meta.json diff --git a/site/content/examples/12-actions/meta.json b/site/content/examples/13-actions/meta.json similarity index 100% rename from site/content/examples/12-actions/meta.json rename to site/content/examples/13-actions/meta.json diff --git a/site/content/examples/13-classes/00-classes/App.svelte b/site/content/examples/14-classes/00-classes/App.svelte similarity index 100% rename from site/content/examples/13-classes/00-classes/App.svelte rename to site/content/examples/14-classes/00-classes/App.svelte diff --git a/site/content/examples/13-classes/00-classes/meta.json b/site/content/examples/14-classes/00-classes/meta.json similarity index 100% rename from site/content/examples/13-classes/00-classes/meta.json rename to site/content/examples/14-classes/00-classes/meta.json diff --git a/site/content/examples/13-classes/01-class-shorthand/App.svelte b/site/content/examples/14-classes/01-class-shorthand/App.svelte similarity index 100% rename from site/content/examples/13-classes/01-class-shorthand/App.svelte rename to site/content/examples/14-classes/01-class-shorthand/App.svelte diff --git a/site/content/examples/13-classes/01-class-shorthand/meta.json b/site/content/examples/14-classes/01-class-shorthand/meta.json similarity index 100% rename from site/content/examples/13-classes/01-class-shorthand/meta.json rename to site/content/examples/14-classes/01-class-shorthand/meta.json diff --git a/site/content/examples/13-classes/meta.json b/site/content/examples/14-classes/meta.json similarity index 100% rename from site/content/examples/13-classes/meta.json rename to site/content/examples/14-classes/meta.json diff --git a/site/content/examples/14-composition/00-slots/App.svelte b/site/content/examples/15-composition/00-slots/App.svelte similarity index 100% rename from site/content/examples/14-composition/00-slots/App.svelte rename to site/content/examples/15-composition/00-slots/App.svelte diff --git a/site/content/examples/14-composition/00-slots/Box.svelte b/site/content/examples/15-composition/00-slots/Box.svelte similarity index 100% rename from site/content/examples/14-composition/00-slots/Box.svelte rename to site/content/examples/15-composition/00-slots/Box.svelte diff --git a/site/content/examples/14-composition/00-slots/meta.json b/site/content/examples/15-composition/00-slots/meta.json similarity index 100% rename from site/content/examples/14-composition/00-slots/meta.json rename to site/content/examples/15-composition/00-slots/meta.json diff --git a/site/content/examples/14-composition/01-slot-fallbacks/App.svelte b/site/content/examples/15-composition/01-slot-fallbacks/App.svelte similarity index 100% rename from site/content/examples/14-composition/01-slot-fallbacks/App.svelte rename to site/content/examples/15-composition/01-slot-fallbacks/App.svelte diff --git a/site/content/examples/14-composition/01-slot-fallbacks/Box.svelte b/site/content/examples/15-composition/01-slot-fallbacks/Box.svelte similarity index 100% rename from site/content/examples/14-composition/01-slot-fallbacks/Box.svelte rename to site/content/examples/15-composition/01-slot-fallbacks/Box.svelte diff --git a/site/content/examples/14-composition/01-slot-fallbacks/meta.json b/site/content/examples/15-composition/01-slot-fallbacks/meta.json similarity index 100% rename from site/content/examples/14-composition/01-slot-fallbacks/meta.json rename to site/content/examples/15-composition/01-slot-fallbacks/meta.json diff --git a/site/content/examples/14-composition/02-named-slots/App.svelte b/site/content/examples/15-composition/02-named-slots/App.svelte similarity index 100% rename from site/content/examples/14-composition/02-named-slots/App.svelte rename to site/content/examples/15-composition/02-named-slots/App.svelte diff --git a/site/content/examples/14-composition/02-named-slots/ContactCard.svelte b/site/content/examples/15-composition/02-named-slots/ContactCard.svelte similarity index 100% rename from site/content/examples/14-composition/02-named-slots/ContactCard.svelte rename to site/content/examples/15-composition/02-named-slots/ContactCard.svelte diff --git a/site/content/examples/14-composition/02-named-slots/meta.json b/site/content/examples/15-composition/02-named-slots/meta.json similarity index 100% rename from site/content/examples/14-composition/02-named-slots/meta.json rename to site/content/examples/15-composition/02-named-slots/meta.json diff --git a/site/content/examples/14-composition/03-slot-props/App.svelte b/site/content/examples/15-composition/03-slot-props/App.svelte similarity index 100% rename from site/content/examples/14-composition/03-slot-props/App.svelte rename to site/content/examples/15-composition/03-slot-props/App.svelte diff --git a/site/content/examples/14-composition/03-slot-props/Hoverable.svelte b/site/content/examples/15-composition/03-slot-props/Hoverable.svelte similarity index 100% rename from site/content/examples/14-composition/03-slot-props/Hoverable.svelte rename to site/content/examples/15-composition/03-slot-props/Hoverable.svelte diff --git a/site/content/examples/14-composition/03-slot-props/meta.json b/site/content/examples/15-composition/03-slot-props/meta.json similarity index 100% rename from site/content/examples/14-composition/03-slot-props/meta.json rename to site/content/examples/15-composition/03-slot-props/meta.json diff --git a/site/content/examples/14-composition/04-modal/App.svelte b/site/content/examples/15-composition/04-modal/App.svelte similarity index 88% rename from site/content/examples/14-composition/04-modal/App.svelte rename to site/content/examples/15-composition/04-modal/App.svelte index ac9d441f52..cfd3856447 100644 --- a/site/content/examples/14-composition/04-modal/App.svelte +++ b/site/content/examples/15-composition/04-modal/App.svelte @@ -1,9 +1,13 @@ <script> import Modal from './Modal.svelte'; - let showModal = true; + let showModal = false; </script> +<button on:click="{() => showModal = true}"> + show modal +</button> + {#if showModal} <Modal on:close="{() => showModal = false}"> <h2 slot="header"> @@ -22,8 +26,4 @@ <a href="https://www.merriam-webster.com/dictionary/modal">merriam-webster.com</a> </Modal> -{:else} - <button on:click="{() => showModal = true}"> - show modal - </button> -{/if} \ No newline at end of file +{/if} diff --git a/site/content/examples/14-composition/04-modal/Modal.svelte b/site/content/examples/15-composition/04-modal/Modal.svelte similarity index 100% rename from site/content/examples/14-composition/04-modal/Modal.svelte rename to site/content/examples/15-composition/04-modal/Modal.svelte diff --git a/site/content/examples/14-composition/04-modal/meta.json b/site/content/examples/15-composition/04-modal/meta.json similarity index 100% rename from site/content/examples/14-composition/04-modal/meta.json rename to site/content/examples/15-composition/04-modal/meta.json diff --git a/site/content/examples/14-composition/meta.json b/site/content/examples/15-composition/meta.json similarity index 100% rename from site/content/examples/14-composition/meta.json rename to site/content/examples/15-composition/meta.json diff --git a/site/content/examples/15-context/00-context-api/App.svelte b/site/content/examples/16-context/00-context-api/App.svelte similarity index 100% rename from site/content/examples/15-context/00-context-api/App.svelte rename to site/content/examples/16-context/00-context-api/App.svelte diff --git a/site/content/examples/15-context/00-context-api/Map.svelte b/site/content/examples/16-context/00-context-api/Map.svelte similarity index 100% rename from site/content/examples/15-context/00-context-api/Map.svelte rename to site/content/examples/16-context/00-context-api/Map.svelte diff --git a/site/content/examples/15-context/00-context-api/MapMarker.svelte b/site/content/examples/16-context/00-context-api/MapMarker.svelte similarity index 100% rename from site/content/examples/15-context/00-context-api/MapMarker.svelte rename to site/content/examples/16-context/00-context-api/MapMarker.svelte diff --git a/site/content/examples/15-context/00-context-api/mapbox.js b/site/content/examples/16-context/00-context-api/mapbox.js similarity index 100% rename from site/content/examples/15-context/00-context-api/mapbox.js rename to site/content/examples/16-context/00-context-api/mapbox.js diff --git a/site/content/examples/15-context/00-context-api/meta.json b/site/content/examples/16-context/00-context-api/meta.json similarity index 100% rename from site/content/examples/15-context/00-context-api/meta.json rename to site/content/examples/16-context/00-context-api/meta.json diff --git a/site/content/examples/15-context/meta.json b/site/content/examples/16-context/meta.json similarity index 100% rename from site/content/examples/15-context/meta.json rename to site/content/examples/16-context/meta.json diff --git a/site/content/examples/16-special-elements/00-svelte-self/App.svelte b/site/content/examples/17-special-elements/00-svelte-self/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/00-svelte-self/App.svelte rename to site/content/examples/17-special-elements/00-svelte-self/App.svelte diff --git a/site/content/examples/16-special-elements/00-svelte-self/File.svelte b/site/content/examples/17-special-elements/00-svelte-self/File.svelte similarity index 100% rename from site/content/examples/16-special-elements/00-svelte-self/File.svelte rename to site/content/examples/17-special-elements/00-svelte-self/File.svelte diff --git a/site/content/examples/16-special-elements/00-svelte-self/Folder.svelte b/site/content/examples/17-special-elements/00-svelte-self/Folder.svelte similarity index 100% rename from site/content/examples/16-special-elements/00-svelte-self/Folder.svelte rename to site/content/examples/17-special-elements/00-svelte-self/Folder.svelte diff --git a/site/content/examples/16-special-elements/00-svelte-self/meta.json b/site/content/examples/17-special-elements/00-svelte-self/meta.json similarity index 100% rename from site/content/examples/16-special-elements/00-svelte-self/meta.json rename to site/content/examples/17-special-elements/00-svelte-self/meta.json diff --git a/site/content/examples/16-special-elements/01-svelte-component/App.svelte b/site/content/examples/17-special-elements/01-svelte-component/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/01-svelte-component/App.svelte rename to site/content/examples/17-special-elements/01-svelte-component/App.svelte diff --git a/site/content/examples/16-special-elements/01-svelte-component/BlueThing.svelte b/site/content/examples/17-special-elements/01-svelte-component/BlueThing.svelte similarity index 100% rename from site/content/examples/16-special-elements/01-svelte-component/BlueThing.svelte rename to site/content/examples/17-special-elements/01-svelte-component/BlueThing.svelte diff --git a/site/content/examples/16-special-elements/01-svelte-component/GreenThing.svelte b/site/content/examples/17-special-elements/01-svelte-component/GreenThing.svelte similarity index 100% rename from site/content/examples/16-special-elements/01-svelte-component/GreenThing.svelte rename to site/content/examples/17-special-elements/01-svelte-component/GreenThing.svelte diff --git a/site/content/examples/16-special-elements/01-svelte-component/RedThing.svelte b/site/content/examples/17-special-elements/01-svelte-component/RedThing.svelte similarity index 100% rename from site/content/examples/16-special-elements/01-svelte-component/RedThing.svelte rename to site/content/examples/17-special-elements/01-svelte-component/RedThing.svelte diff --git a/site/content/examples/16-special-elements/01-svelte-component/meta.json b/site/content/examples/17-special-elements/01-svelte-component/meta.json similarity index 100% rename from site/content/examples/16-special-elements/01-svelte-component/meta.json rename to site/content/examples/17-special-elements/01-svelte-component/meta.json diff --git a/site/content/examples/16-special-elements/02-svelte-window/App.svelte b/site/content/examples/17-special-elements/02-svelte-window/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/02-svelte-window/App.svelte rename to site/content/examples/17-special-elements/02-svelte-window/App.svelte diff --git a/site/content/examples/16-special-elements/02-svelte-window/meta.json b/site/content/examples/17-special-elements/02-svelte-window/meta.json similarity index 100% rename from site/content/examples/16-special-elements/02-svelte-window/meta.json rename to site/content/examples/17-special-elements/02-svelte-window/meta.json diff --git a/site/content/examples/16-special-elements/03-svelte-window-bindings/App.svelte b/site/content/examples/17-special-elements/03-svelte-window-bindings/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/03-svelte-window-bindings/App.svelte rename to site/content/examples/17-special-elements/03-svelte-window-bindings/App.svelte diff --git a/site/content/examples/16-special-elements/03-svelte-window-bindings/meta.json b/site/content/examples/17-special-elements/03-svelte-window-bindings/meta.json similarity index 100% rename from site/content/examples/16-special-elements/03-svelte-window-bindings/meta.json rename to site/content/examples/17-special-elements/03-svelte-window-bindings/meta.json diff --git a/site/content/examples/16-special-elements/04-svelte-body/App.svelte b/site/content/examples/17-special-elements/04-svelte-body/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/04-svelte-body/App.svelte rename to site/content/examples/17-special-elements/04-svelte-body/App.svelte diff --git a/site/content/examples/16-special-elements/04-svelte-body/meta.json b/site/content/examples/17-special-elements/04-svelte-body/meta.json similarity index 100% rename from site/content/examples/16-special-elements/04-svelte-body/meta.json rename to site/content/examples/17-special-elements/04-svelte-body/meta.json diff --git a/site/content/examples/16-special-elements/05-svelte-head/App.svelte b/site/content/examples/17-special-elements/05-svelte-head/App.svelte similarity index 100% rename from site/content/examples/16-special-elements/05-svelte-head/App.svelte rename to site/content/examples/17-special-elements/05-svelte-head/App.svelte diff --git a/site/content/examples/16-special-elements/05-svelte-head/meta.json b/site/content/examples/17-special-elements/05-svelte-head/meta.json similarity index 100% rename from site/content/examples/16-special-elements/05-svelte-head/meta.json rename to site/content/examples/17-special-elements/05-svelte-head/meta.json diff --git a/site/content/examples/16-special-elements/meta.json b/site/content/examples/17-special-elements/meta.json similarity index 100% rename from site/content/examples/16-special-elements/meta.json rename to site/content/examples/17-special-elements/meta.json diff --git a/site/content/examples/17-module-context/01-module-exports/App.svelte b/site/content/examples/18-module-context/01-module-exports/App.svelte similarity index 100% rename from site/content/examples/17-module-context/01-module-exports/App.svelte rename to site/content/examples/18-module-context/01-module-exports/App.svelte diff --git a/site/content/examples/17-module-context/01-module-exports/AudioPlayer.svelte b/site/content/examples/18-module-context/01-module-exports/AudioPlayer.svelte similarity index 100% rename from site/content/examples/17-module-context/01-module-exports/AudioPlayer.svelte rename to site/content/examples/18-module-context/01-module-exports/AudioPlayer.svelte diff --git a/site/content/examples/17-module-context/01-module-exports/meta.json b/site/content/examples/18-module-context/01-module-exports/meta.json similarity index 100% rename from site/content/examples/17-module-context/01-module-exports/meta.json rename to site/content/examples/18-module-context/01-module-exports/meta.json diff --git a/site/content/examples/17-module-context/meta.json b/site/content/examples/18-module-context/meta.json similarity index 100% rename from site/content/examples/17-module-context/meta.json rename to site/content/examples/18-module-context/meta.json diff --git a/site/content/examples/18-debugging/00-debug/App.svelte b/site/content/examples/19-debugging/00-debug/App.svelte similarity index 100% rename from site/content/examples/18-debugging/00-debug/App.svelte rename to site/content/examples/19-debugging/00-debug/App.svelte diff --git a/site/content/examples/18-debugging/00-debug/meta.json b/site/content/examples/19-debugging/00-debug/meta.json similarity index 100% rename from site/content/examples/18-debugging/00-debug/meta.json rename to site/content/examples/19-debugging/00-debug/meta.json diff --git a/site/content/examples/18-debugging/meta.json b/site/content/examples/19-debugging/meta.json similarity index 100% rename from site/content/examples/18-debugging/meta.json rename to site/content/examples/19-debugging/meta.json diff --git a/site/content/examples/19-7guis/01-7guis-counter/App.svelte b/site/content/examples/20-7guis/01-7guis-counter/App.svelte similarity index 100% rename from site/content/examples/19-7guis/01-7guis-counter/App.svelte rename to site/content/examples/20-7guis/01-7guis-counter/App.svelte diff --git a/site/content/examples/19-7guis/01-7guis-counter/meta.json b/site/content/examples/20-7guis/01-7guis-counter/meta.json similarity index 100% rename from site/content/examples/19-7guis/01-7guis-counter/meta.json rename to site/content/examples/20-7guis/01-7guis-counter/meta.json diff --git a/site/content/examples/19-7guis/02-7guis-temperature/App.svelte b/site/content/examples/20-7guis/02-7guis-temperature/App.svelte similarity index 100% rename from site/content/examples/19-7guis/02-7guis-temperature/App.svelte rename to site/content/examples/20-7guis/02-7guis-temperature/App.svelte diff --git a/site/content/examples/19-7guis/02-7guis-temperature/meta.json b/site/content/examples/20-7guis/02-7guis-temperature/meta.json similarity index 100% rename from site/content/examples/19-7guis/02-7guis-temperature/meta.json rename to site/content/examples/20-7guis/02-7guis-temperature/meta.json diff --git a/site/content/examples/19-7guis/03-7guis-flight-booker/App.svelte b/site/content/examples/20-7guis/03-7guis-flight-booker/App.svelte similarity index 100% rename from site/content/examples/19-7guis/03-7guis-flight-booker/App.svelte rename to site/content/examples/20-7guis/03-7guis-flight-booker/App.svelte diff --git a/site/content/examples/19-7guis/03-7guis-flight-booker/meta.json b/site/content/examples/20-7guis/03-7guis-flight-booker/meta.json similarity index 100% rename from site/content/examples/19-7guis/03-7guis-flight-booker/meta.json rename to site/content/examples/20-7guis/03-7guis-flight-booker/meta.json diff --git a/site/content/examples/19-7guis/04-7guis-timer/App.svelte b/site/content/examples/20-7guis/04-7guis-timer/App.svelte similarity index 100% rename from site/content/examples/19-7guis/04-7guis-timer/App.svelte rename to site/content/examples/20-7guis/04-7guis-timer/App.svelte diff --git a/site/content/examples/19-7guis/04-7guis-timer/meta.json b/site/content/examples/20-7guis/04-7guis-timer/meta.json similarity index 100% rename from site/content/examples/19-7guis/04-7guis-timer/meta.json rename to site/content/examples/20-7guis/04-7guis-timer/meta.json diff --git a/site/content/examples/19-7guis/05-7guis-crud/App.svelte b/site/content/examples/20-7guis/05-7guis-crud/App.svelte similarity index 82% rename from site/content/examples/19-7guis/05-7guis-crud/App.svelte rename to site/content/examples/20-7guis/05-7guis-crud/App.svelte index 1f39fe6642..f55aeb0d83 100644 --- a/site/content/examples/19-7guis/05-7guis-crud/App.svelte +++ b/site/content/examples/20-7guis/05-7guis-crud/App.svelte @@ -30,10 +30,7 @@ $: selected = filteredPeople[i]; - $: { - first = selected ? selected.first : ''; - last = selected ? selected.last : ''; - } + $: reset_inputs(selected); function create() { people = people.concat({ first, last }); @@ -46,14 +43,17 @@ } function remove() { - people = [...people.slice(0, i), ...people.slice(i + 1)]; + // Remove selected person from the source array (people), not the filtered array + const index = people.indexOf(selected); + people = [...people.slice(0, index), ...people.slice(index + 1)]; first = last = ''; - i = Math.min(i, people.length - 1); + i = Math.min(i, filteredPeople.length - 2); } function reset_inputs(person) { - ({ first, last } = person); + first = person ? person.first : ''; + last = person ? person.last : ''; } </script> diff --git a/site/content/examples/19-7guis/05-7guis-crud/meta.json b/site/content/examples/20-7guis/05-7guis-crud/meta.json similarity index 100% rename from site/content/examples/19-7guis/05-7guis-crud/meta.json rename to site/content/examples/20-7guis/05-7guis-crud/meta.json diff --git a/site/content/examples/19-7guis/06-7guis-circles/App.svelte b/site/content/examples/20-7guis/06-7guis-circles/App.svelte similarity index 100% rename from site/content/examples/19-7guis/06-7guis-circles/App.svelte rename to site/content/examples/20-7guis/06-7guis-circles/App.svelte diff --git a/site/content/examples/19-7guis/06-7guis-circles/meta.json b/site/content/examples/20-7guis/06-7guis-circles/meta.json similarity index 100% rename from site/content/examples/19-7guis/06-7guis-circles/meta.json rename to site/content/examples/20-7guis/06-7guis-circles/meta.json diff --git a/site/content/examples/19-7guis/meta.json b/site/content/examples/20-7guis/meta.json similarity index 100% rename from site/content/examples/19-7guis/meta.json rename to site/content/examples/20-7guis/meta.json diff --git a/site/content/examples/20-miscellaneous/02-immutable-data/flash.js b/site/content/examples/20-miscellaneous/02-immutable-data/flash.js deleted file mode 100644 index 8dff9cbe2f..0000000000 --- a/site/content/examples/20-miscellaneous/02-immutable-data/flash.js +++ /dev/null @@ -1,11 +0,0 @@ -export default function flash(element) { - element.style.transition = 'none'; - element.style.color = 'rgba(255,62,0,1)'; - element.style.backgroundColor = 'rgba(255,62,0,0.2)'; - - setTimeout(() => { - element.style.transition = 'color 1s, background 1s'; - element.style.color = ''; - element.style.backgroundColor = ''; - }); -} \ No newline at end of file diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/App.svelte b/site/content/examples/21-miscellaneous/01-hacker-news/App.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/App.svelte rename to site/content/examples/21-miscellaneous/01-hacker-news/App.svelte diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/Comment.svelte b/site/content/examples/21-miscellaneous/01-hacker-news/Comment.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/Comment.svelte rename to site/content/examples/21-miscellaneous/01-hacker-news/Comment.svelte diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/Item.svelte b/site/content/examples/21-miscellaneous/01-hacker-news/Item.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/Item.svelte rename to site/content/examples/21-miscellaneous/01-hacker-news/Item.svelte diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/List.svelte b/site/content/examples/21-miscellaneous/01-hacker-news/List.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/List.svelte rename to site/content/examples/21-miscellaneous/01-hacker-news/List.svelte diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/Summary.svelte b/site/content/examples/21-miscellaneous/01-hacker-news/Summary.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/Summary.svelte rename to site/content/examples/21-miscellaneous/01-hacker-news/Summary.svelte diff --git a/site/content/examples/20-miscellaneous/01-hacker-news/meta.json b/site/content/examples/21-miscellaneous/01-hacker-news/meta.json similarity index 100% rename from site/content/examples/20-miscellaneous/01-hacker-news/meta.json rename to site/content/examples/21-miscellaneous/01-hacker-news/meta.json diff --git a/site/content/examples/20-miscellaneous/02-immutable-data/App.svelte b/site/content/examples/21-miscellaneous/02-immutable-data/App.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/02-immutable-data/App.svelte rename to site/content/examples/21-miscellaneous/02-immutable-data/App.svelte diff --git a/site/content/examples/20-miscellaneous/02-immutable-data/ImmutableTodo.svelte b/site/content/examples/21-miscellaneous/02-immutable-data/ImmutableTodo.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/02-immutable-data/ImmutableTodo.svelte rename to site/content/examples/21-miscellaneous/02-immutable-data/ImmutableTodo.svelte diff --git a/site/content/examples/20-miscellaneous/02-immutable-data/MutableTodo.svelte b/site/content/examples/21-miscellaneous/02-immutable-data/MutableTodo.svelte similarity index 100% rename from site/content/examples/20-miscellaneous/02-immutable-data/MutableTodo.svelte rename to site/content/examples/21-miscellaneous/02-immutable-data/MutableTodo.svelte diff --git a/site/content/examples/21-miscellaneous/02-immutable-data/flash.js b/site/content/examples/21-miscellaneous/02-immutable-data/flash.js new file mode 100644 index 0000000000..c788cc6d35 --- /dev/null +++ b/site/content/examples/21-miscellaneous/02-immutable-data/flash.js @@ -0,0 +1,13 @@ +export default function flash(element) { + requestAnimationFrame(() => { + element.style.transition = 'none'; + element.style.color = 'rgba(255,62,0,1)'; + element.style.backgroundColor = 'rgba(255,62,0,0.2)'; + + setTimeout(() => { + element.style.transition = 'color 1s, background 1s'; + element.style.color = ''; + element.style.backgroundColor = ''; + }); + }); +} \ No newline at end of file diff --git a/site/content/examples/20-miscellaneous/02-immutable-data/meta.json b/site/content/examples/21-miscellaneous/02-immutable-data/meta.json similarity index 100% rename from site/content/examples/20-miscellaneous/02-immutable-data/meta.json rename to site/content/examples/21-miscellaneous/02-immutable-data/meta.json diff --git a/site/content/examples/20-miscellaneous/meta.json b/site/content/examples/21-miscellaneous/meta.json similarity index 100% rename from site/content/examples/20-miscellaneous/meta.json rename to site/content/examples/21-miscellaneous/meta.json diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte index c8487abefe..ccb1ad8834 100644 --- a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte @@ -1,6 +1,6 @@ <script> import { comicSans, link } from './styles.js'; - import Hero from './Hero.html'; + import Hero from './Hero.svelte'; </script> <Hero/> diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js index faf91b13d4..c7e10606c5 100644 --- a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js @@ -1,4 +1,6 @@ -import { css } from 'emotion/dist/emotion.umd.min.js'; +import emotion from 'emotion/dist/emotion.umd.min.js'; + +const { css } = emotion; const brand = '#74D900'; @@ -30,4 +32,4 @@ export const link = css` text-decoration: none; background: ${brand}; } -`; \ No newline at end of file +`; diff --git a/site/content/tutorial/01-introduction/03-dynamic-attributes/app-b/App.svelte b/site/content/tutorial/01-introduction/03-dynamic-attributes/app-b/App.svelte index 6a12752e1a..e61b4d48e0 100644 --- a/site/content/tutorial/01-introduction/03-dynamic-attributes/app-b/App.svelte +++ b/site/content/tutorial/01-introduction/03-dynamic-attributes/app-b/App.svelte @@ -3,4 +3,4 @@ let name = 'Rick Astley'; </script> -<img {src} alt="{name} dancing"> \ No newline at end of file +<img {src} alt="{name} dances."> diff --git a/site/content/tutorial/01-introduction/03-dynamic-attributes/text.md b/site/content/tutorial/01-introduction/03-dynamic-attributes/text.md index 6deaad5837..c503b4f548 100644 --- a/site/content/tutorial/01-introduction/03-dynamic-attributes/text.md +++ b/site/content/tutorial/01-introduction/03-dynamic-attributes/text.md @@ -16,13 +16,13 @@ That's better. But Svelte is giving us a warning: When building web apps, it's important to make sure that they're *accessible* to the broadest possible userbase, including people with (for example) impaired vision or motion, or people without powerful hardware or good internet connections. Accessibility (shortened to a11y) isn't always easy to get right, but Svelte will help by warning you if you write inaccessible markup. -In this case, we're missing the `alt` tag that describes the image for people using screenreaders, or people with slow or flaky internet connections that can't download the image. Let's add one: +In this case, we're missing the `alt` attribute that describes the image for people using screenreaders, or people with slow or flaky internet connections that can't download the image. Let's add one: ```html -<img src={src} alt="A man dancing"> +<img src={src} alt="A man dances."> ``` -We can use curly braces *inside* attributes. Try changing it to `"{name} dancing"` — remember to declare a `name` variable in the `<script>` block. +We can use curly braces *inside* attributes. Try changing it to `"{name} dances."` — remember to declare a `name` variable in the `<script>` block. ## Shorthand attributes @@ -30,6 +30,6 @@ We can use curly braces *inside* attributes. Try changing it to `"{name} dancing It's not uncommon to have an attribute where the name and value are the same, like `src={src}`. Svelte gives us a convenient shorthand for these cases: ```html -<img {src} alt="A man dancing"> +<img {src} alt="A man dances."> ``` diff --git a/site/content/tutorial/02-reactivity/04-updating-arrays-and-objects/text.md b/site/content/tutorial/02-reactivity/04-updating-arrays-and-objects/text.md index 0a78c7ca32..b70b09f728 100644 --- a/site/content/tutorial/02-reactivity/04-updating-arrays-and-objects/text.md +++ b/site/content/tutorial/02-reactivity/04-updating-arrays-and-objects/text.md @@ -13,7 +13,7 @@ function addNumber() { } ``` -But there's a more *idiomatic* solution: +But there's a more idiomatic solution: ```js function addNumber() { @@ -23,4 +23,10 @@ function addNumber() { You can use similar patterns to replace `pop`, `shift`, `unshift` and `splice`. -> Assignments to *properties* of arrays and objects — e.g. `obj.foo += 1` or `array[i] = x` — work the same way as assignments to the values themselves. +Assignments to *properties* of arrays and objects — e.g. `obj.foo += 1` or `array[i] = x` — work the same way as assignments to the values themselves. + +```js +function addNumber() { + numbers[numbers.length] = numbers.length + 1; +} +``` diff --git a/site/content/tutorial/03-props/02-default-values/text.md b/site/content/tutorial/03-props/02-default-values/text.md index dda6a370fe..1532407380 100644 --- a/site/content/tutorial/03-props/02-default-values/text.md +++ b/site/content/tutorial/03-props/02-default-values/text.md @@ -10,9 +10,9 @@ We can easily specify default values for props: </script> ``` -If we now instantiate the component without an `answer` prop, it will fall back to the default: +If we now add a second component *without* an `answer` prop, it will fall back to the default: ```html <Nested answer={42}/> <Nested/> -``` \ No newline at end of file +``` diff --git a/site/content/tutorial/04-logic/05-keyed-each-blocks/text.md b/site/content/tutorial/04-logic/05-keyed-each-blocks/text.md index e8bac7d8df..3c204d1413 100644 --- a/site/content/tutorial/04-logic/05-keyed-each-blocks/text.md +++ b/site/content/tutorial/04-logic/05-keyed-each-blocks/text.md @@ -4,7 +4,7 @@ title: Keyed each blocks By default, when you modify the value of an `each` block, it will add and remove items at the *end* of the block, and update any values that have changed. That might not be what you want. -It's easier to show why than to explain. Click the 'Remove first item' button a few times, and notice that it's removing `<Thing>` components from the end and updating the `value` for those that remain. Instead, we'd like to remove the first `<Thing>` component and leave the rest unaffected. +It's easier to show why than to explain. Click the 'Remove first thing' button a few times, and notice that it's removing `<Thing>` components from the end and updating the `value` for those that remain. Instead, we'd like to remove the first `<Thing>` component and leave the rest unaffected. To do that, we specify a unique identifier for the `each` block: @@ -16,4 +16,4 @@ To do that, we specify a unique identifier for the `each` block: The `(thing.id)` tells Svelte how to figure out what changed. -> You can use any object as the key, as Svelte uses a `Map` internally — in other words you could do `(thing)` instead of `(thing.id)`. Using a string or number is generally safer, however, since it means identity persists without referential equality, for example when updating with fresh data from an API server. \ No newline at end of file +> You can use any object as the key, as Svelte uses a `Map` internally — in other words you could do `(thing)` instead of `(thing.id)`. Using a string or number is generally safer, however, since it means identity persists without referential equality, for example when updating with fresh data from an API server. diff --git a/site/content/tutorial/06-bindings/01-text-inputs/text.md b/site/content/tutorial/06-bindings/01-text-inputs/text.md index 0082586133..7bcbc96fa6 100644 --- a/site/content/tutorial/06-bindings/01-text-inputs/text.md +++ b/site/content/tutorial/06-bindings/01-text-inputs/text.md @@ -4,7 +4,7 @@ title: Text inputs As a general rule, data flow in Svelte is *top down* — a parent component can set props on a child component, and a component can set attributes on an element, but not the other way around. -Sometimes it's useful to break that rule. Take the case of the `<input>` element in this component — we *could* add an `on:input` event handler that set the value of `name` to `event.target.value`, but it's a bit... boilerplatey. It gets even worse with other kinds of form element, as we'll see. +Sometimes it's useful to break that rule. Take the case of the `<input>` element in this component — we *could* add an `on:input` event handler that set the value of `name` to `event.target.value`, but it's a bit... boilerplatey. It gets even worse with other form elements, as we'll see. Instead, we can use the `bind:value` directive: @@ -12,4 +12,4 @@ Instead, we can use the `bind:value` directive: <input bind:value={name}> ``` -This means that not only will changes to the value of `name` update the input value, but changes to the input value will update `name`. \ No newline at end of file +This means that not only will changes to the value of `name` update the input value, but changes to the input value will update `name`. diff --git a/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-a/App.svelte b/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-a/App.svelte new file mode 100644 index 0000000000..55d699959c --- /dev/null +++ b/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-a/App.svelte @@ -0,0 +1,15 @@ +<script> + let html = '<p>Write some text!</p>'; +</script> + +<div contenteditable="true"></div> + +<pre>{html}</pre> + +<style> + [contenteditable] { + padding: 0.5em; + border: 1px solid #eee; + border-radius: 4px; + } +</style> \ No newline at end of file diff --git a/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-b/App.svelte b/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-b/App.svelte new file mode 100644 index 0000000000..ee97cf19c0 --- /dev/null +++ b/site/content/tutorial/06-bindings/08-contenteditable-bindings/app-b/App.svelte @@ -0,0 +1,18 @@ +<script> + let html = '<p>Write some text!</p>'; +</script> + +<div + contenteditable="true" + bind:innerHTML={html} +></div> + +<pre>{html}</pre> + +<style> + [contenteditable] { + padding: 0.5em; + border: 1px solid #eee; + border-radius: 4px; + } +</style> \ No newline at end of file diff --git a/site/content/tutorial/06-bindings/08-contenteditable-bindings/text.md b/site/content/tutorial/06-bindings/08-contenteditable-bindings/text.md new file mode 100644 index 0000000000..a73b07c0ba --- /dev/null +++ b/site/content/tutorial/06-bindings/08-contenteditable-bindings/text.md @@ -0,0 +1,12 @@ +--- +title: Contenteditable bindings +--- + +Elements with a `contenteditable="true"` attribute support `textContent` and `innerHTML` bindings: + +```html +<div + contenteditable="true" + bind:innerHTML={html} +></div> +``` \ No newline at end of file diff --git a/site/content/tutorial/06-bindings/08-each-block-bindings/app-a/App.svelte b/site/content/tutorial/06-bindings/09-each-block-bindings/app-a/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/08-each-block-bindings/app-a/App.svelte rename to site/content/tutorial/06-bindings/09-each-block-bindings/app-a/App.svelte diff --git a/site/content/tutorial/06-bindings/08-each-block-bindings/app-b/App.svelte b/site/content/tutorial/06-bindings/09-each-block-bindings/app-b/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/08-each-block-bindings/app-b/App.svelte rename to site/content/tutorial/06-bindings/09-each-block-bindings/app-b/App.svelte diff --git a/site/content/tutorial/06-bindings/08-each-block-bindings/text.md b/site/content/tutorial/06-bindings/09-each-block-bindings/text.md similarity index 100% rename from site/content/tutorial/06-bindings/08-each-block-bindings/text.md rename to site/content/tutorial/06-bindings/09-each-block-bindings/text.md diff --git a/site/content/tutorial/06-bindings/09-media-elements/app-a/App.svelte b/site/content/tutorial/06-bindings/10-media-elements/app-a/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/09-media-elements/app-a/App.svelte rename to site/content/tutorial/06-bindings/10-media-elements/app-a/App.svelte diff --git a/site/content/tutorial/06-bindings/09-media-elements/app-b/App.svelte b/site/content/tutorial/06-bindings/10-media-elements/app-b/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/09-media-elements/app-b/App.svelte rename to site/content/tutorial/06-bindings/10-media-elements/app-b/App.svelte diff --git a/site/content/tutorial/06-bindings/09-media-elements/text.md b/site/content/tutorial/06-bindings/10-media-elements/text.md similarity index 100% rename from site/content/tutorial/06-bindings/09-media-elements/text.md rename to site/content/tutorial/06-bindings/10-media-elements/text.md diff --git a/site/content/tutorial/06-bindings/10-dimensions/app-a/App.svelte b/site/content/tutorial/06-bindings/11-dimensions/app-a/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/10-dimensions/app-a/App.svelte rename to site/content/tutorial/06-bindings/11-dimensions/app-a/App.svelte diff --git a/site/content/tutorial/06-bindings/10-dimensions/app-b/App.svelte b/site/content/tutorial/06-bindings/11-dimensions/app-b/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/10-dimensions/app-b/App.svelte rename to site/content/tutorial/06-bindings/11-dimensions/app-b/App.svelte diff --git a/site/content/tutorial/06-bindings/10-dimensions/text.md b/site/content/tutorial/06-bindings/11-dimensions/text.md similarity index 100% rename from site/content/tutorial/06-bindings/10-dimensions/text.md rename to site/content/tutorial/06-bindings/11-dimensions/text.md diff --git a/site/content/tutorial/06-bindings/11-bind-this/app-a/App.svelte b/site/content/tutorial/06-bindings/12-bind-this/app-a/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/11-bind-this/app-a/App.svelte rename to site/content/tutorial/06-bindings/12-bind-this/app-a/App.svelte diff --git a/site/content/tutorial/06-bindings/11-bind-this/app-b/App.svelte b/site/content/tutorial/06-bindings/12-bind-this/app-b/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/11-bind-this/app-b/App.svelte rename to site/content/tutorial/06-bindings/12-bind-this/app-b/App.svelte diff --git a/site/content/tutorial/06-bindings/11-bind-this/text.md b/site/content/tutorial/06-bindings/12-bind-this/text.md similarity index 94% rename from site/content/tutorial/06-bindings/11-bind-this/text.md rename to site/content/tutorial/06-bindings/12-bind-this/text.md index e53b624057..4784b6b13f 100644 --- a/site/content/tutorial/06-bindings/11-bind-this/text.md +++ b/site/content/tutorial/06-bindings/12-bind-this/text.md @@ -7,8 +7,8 @@ The readonly `this` binding applies to every element (and component) and allows ```html <canvas bind:this={canvas} - width={256} - height={256} + width={32} + height={32} ></canvas> ``` diff --git a/site/content/tutorial/06-bindings/12-component-bindings/app-a/App.svelte b/site/content/tutorial/06-bindings/13-component-bindings/app-a/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/12-component-bindings/app-a/App.svelte rename to site/content/tutorial/06-bindings/13-component-bindings/app-a/App.svelte diff --git a/site/content/tutorial/06-bindings/12-component-bindings/app-a/Keypad.svelte b/site/content/tutorial/06-bindings/13-component-bindings/app-a/Keypad.svelte similarity index 100% rename from site/content/tutorial/06-bindings/12-component-bindings/app-a/Keypad.svelte rename to site/content/tutorial/06-bindings/13-component-bindings/app-a/Keypad.svelte diff --git a/site/content/tutorial/06-bindings/12-component-bindings/app-b/App.svelte b/site/content/tutorial/06-bindings/13-component-bindings/app-b/App.svelte similarity index 100% rename from site/content/tutorial/06-bindings/12-component-bindings/app-b/App.svelte rename to site/content/tutorial/06-bindings/13-component-bindings/app-b/App.svelte diff --git a/site/content/tutorial/06-bindings/12-component-bindings/app-b/Keypad.svelte b/site/content/tutorial/06-bindings/13-component-bindings/app-b/Keypad.svelte similarity index 100% rename from site/content/tutorial/06-bindings/12-component-bindings/app-b/Keypad.svelte rename to site/content/tutorial/06-bindings/13-component-bindings/app-b/Keypad.svelte diff --git a/site/content/tutorial/06-bindings/12-component-bindings/text.md b/site/content/tutorial/06-bindings/13-component-bindings/text.md similarity index 100% rename from site/content/tutorial/06-bindings/12-component-bindings/text.md rename to site/content/tutorial/06-bindings/13-component-bindings/text.md diff --git a/site/content/tutorial/07-lifecycle/03-update/app-a/App.svelte b/site/content/tutorial/07-lifecycle/03-update/app-a/App.svelte index 2081b6ab8c..75fce63ca2 100644 --- a/site/content/tutorial/07-lifecycle/03-update/app-a/App.svelte +++ b/site/content/tutorial/07-lifecycle/03-update/app-a/App.svelte @@ -1,5 +1,5 @@ <script> - import Eliza from 'elizanode'; + import Eliza from 'elizabot'; import { beforeUpdate, afterUpdate } from 'svelte'; let div; diff --git a/site/content/tutorial/07-lifecycle/03-update/app-b/App.svelte b/site/content/tutorial/07-lifecycle/03-update/app-b/App.svelte index 373b6dcb6a..3eb2dceb52 100644 --- a/site/content/tutorial/07-lifecycle/03-update/app-b/App.svelte +++ b/site/content/tutorial/07-lifecycle/03-update/app-b/App.svelte @@ -1,5 +1,5 @@ <script> - import Eliza from 'elizanode'; + import Eliza from 'elizabot'; import { beforeUpdate, afterUpdate } from 'svelte'; let div; diff --git a/site/content/tutorial/10-transitions/03-in-and-out/text.md b/site/content/tutorial/10-transitions/03-in-and-out/text.md index 21cb221342..1f1ac2c80b 100644 --- a/site/content/tutorial/10-transitions/03-in-and-out/text.md +++ b/site/content/tutorial/10-transitions/03-in-and-out/text.md @@ -2,7 +2,13 @@ title: In and out --- -Instead of the `transition` directive, an element can have an `in` or an `out` directive, or both together: +Instead of the `transition` directive, an element can have an `in` or an `out` directive, or both together. Import `fade` alongside `fly`... + +```js +import { fade, fly } from 'svelte/transition'; +``` + +...then replace the `transition` directive with separate `in` and `out` directives: ```html <p in:fly="{{ y: 200, duration: 2000 }}" out:fade> diff --git a/site/content/tutorial/12-actions/01-actions/text.md b/site/content/tutorial/12-actions/01-actions/text.md index 279dc3123f..38de8f9a65 100644 --- a/site/content/tutorial/12-actions/01-actions/text.md +++ b/site/content/tutorial/12-actions/01-actions/text.md @@ -27,7 +27,7 @@ import { pannable } from './pannable.js'; ></div> ``` -Open the `pannable.js` file. Like transition functions, an action function receives a `node` and some optional parameters, and returns an action object. That object must have a `destroy` function, which is called when the element is unmounted. +Open the `pannable.js` file. Like transition functions, an action function receives a `node` and some optional parameters, and returns an action object. That object can have a `destroy` function, which is called when the element is unmounted. We want to fire `panstart` event when the user mouses down on the element, `panmove` events (with `dx` and `dy` properties showing how far the mouse moved) when they drag it, and `panend` events when they mouse up. One possible implementation looks like this: @@ -84,4 +84,3 @@ export function pannable(node) { Update the `pannable` function and try moving the box around. > This implementation is for demonstration purposes — a more complete one would also consider touch events. - diff --git a/site/content/tutorial/15-context/01-context-api/text.md b/site/content/tutorial/15-context/01-context-api/text.md index 3d095dd679..ef146772c5 100644 --- a/site/content/tutorial/15-context/01-context-api/text.md +++ b/site/content/tutorial/15-context/01-context-api/text.md @@ -44,4 +44,6 @@ In `mapbox.js` you'll see this line: const key = {}; ``` -We can use anything as a key — we could do `setContext('mapbox', ...)` for example. The downside of using a string is that different component libraries might accidentally use the same one; using an object literal means the keys are guaranteed not to conflict in any circumstance, even when you have multiple different contexts operating across many component layers. \ No newline at end of file +We can use anything as a key — we could do `setContext('mapbox', ...)` for example. The downside of using a string is that different component libraries might accidentally use the same one; using an object literal means the keys are guaranteed not to conflict in any circumstance, even when you have multiple different contexts operating across many component layers. + +> Remember that context is not inherently reactive. If you need context values to be reactive then you can pass a store into context, which *will* be reactive. diff --git a/site/content/tutorial/16-special-elements/03-svelte-window/text.md b/site/content/tutorial/16-special-elements/03-svelte-window/text.md index 2715da7260..b581b3ada4 100644 --- a/site/content/tutorial/16-special-elements/03-svelte-window/text.md +++ b/site/content/tutorial/16-special-elements/03-svelte-window/text.md @@ -8,4 +8,6 @@ On line 33, add the `keydown` listener: ```html <svelte:window on:keydown={handleKeydown}/> -``` \ No newline at end of file +``` + +> As with DOM elements, you can add [event modifiers](tutorial/event-modifiers) like `preventDefault`. diff --git a/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-a/App.svelte b/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-a/App.svelte index fc6725e894..04b4de5cf2 100644 --- a/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-a/App.svelte +++ b/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-a/App.svelte @@ -7,7 +7,7 @@ <svelte:window/> <a class="parallax-container" href="https://www.firewatchgame.com"> - {#each [0, 1, 2, 3, 4, 5, 6, 7, 8] as layer} + {#each layers as layer} <img style="transform: translate(0,{-y * layer / (layers.length - 1)}px)" src="https://www.firewatchgame.com/images/parallax/parallax{layer}.png" diff --git a/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-b/App.svelte b/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-b/App.svelte index 3dbfd43f21..15c2aa0ebc 100644 --- a/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-b/App.svelte +++ b/site/content/tutorial/16-special-elements/04-svelte-window-bindings/app-b/App.svelte @@ -7,7 +7,7 @@ <svelte:window bind:scrollY={y}/> <a class="parallax-container" href="https://www.firewatchgame.com"> - {#each [0, 1, 2, 3, 4, 5, 6, 7, 8] as layer} + {#each layers as layer} <img style="transform: translate(0,{-y * layer / (layers.length - 1)}px)" src="https://www.firewatchgame.com/images/parallax/parallax{layer}.png" diff --git a/site/content/tutorial/16-special-elements/07-svelte-options/app-a/flash.js b/site/content/tutorial/16-special-elements/07-svelte-options/app-a/flash.js index 8dff9cbe2f..c788cc6d35 100644 --- a/site/content/tutorial/16-special-elements/07-svelte-options/app-a/flash.js +++ b/site/content/tutorial/16-special-elements/07-svelte-options/app-a/flash.js @@ -1,11 +1,13 @@ export default function flash(element) { - element.style.transition = 'none'; - element.style.color = 'rgba(255,62,0,1)'; - element.style.backgroundColor = 'rgba(255,62,0,0.2)'; + requestAnimationFrame(() => { + element.style.transition = 'none'; + element.style.color = 'rgba(255,62,0,1)'; + element.style.backgroundColor = 'rgba(255,62,0,0.2)'; - setTimeout(() => { - element.style.transition = 'color 1s, background 1s'; - element.style.color = ''; - element.style.backgroundColor = ''; + setTimeout(() => { + element.style.transition = 'color 1s, background 1s'; + element.style.color = ''; + element.style.backgroundColor = ''; + }); }); } \ No newline at end of file diff --git a/site/content/tutorial/16-special-elements/07-svelte-options/app-b/flash.js b/site/content/tutorial/16-special-elements/07-svelte-options/app-b/flash.js index 8dff9cbe2f..c788cc6d35 100644 --- a/site/content/tutorial/16-special-elements/07-svelte-options/app-b/flash.js +++ b/site/content/tutorial/16-special-elements/07-svelte-options/app-b/flash.js @@ -1,11 +1,13 @@ export default function flash(element) { - element.style.transition = 'none'; - element.style.color = 'rgba(255,62,0,1)'; - element.style.backgroundColor = 'rgba(255,62,0,0.2)'; + requestAnimationFrame(() => { + element.style.transition = 'none'; + element.style.color = 'rgba(255,62,0,1)'; + element.style.backgroundColor = 'rgba(255,62,0,0.2)'; - setTimeout(() => { - element.style.transition = 'color 1s, background 1s'; - element.style.color = ''; - element.style.backgroundColor = ''; + setTimeout(() => { + element.style.transition = 'color 1s, background 1s'; + element.style.color = ''; + element.style.backgroundColor = ''; + }); }); } \ No newline at end of file diff --git a/site/content/tutorial/19-next-steps/01-congratulations/text.md b/site/content/tutorial/19-next-steps/01-congratulations/text.md index e513989afe..c4436113bc 100644 --- a/site/content/tutorial/19-next-steps/01-congratulations/text.md +++ b/site/content/tutorial/19-next-steps/01-congratulations/text.md @@ -8,4 +8,4 @@ To get set up in your local development environment, check out [the quickstart g If you're looking for a more expansive framework that includes routing, server-side rendering and everything else, take a look at [Sapper](https://sapper.svelte.dev). -Most importantly: since you're now a member of the Svelte community, you should [join our friendly Discord chatroom](https://discord.gg/yy75DKs). That's where you'll find fellow Svelte users, and it's where we plan the future of the framework. \ No newline at end of file +Most importantly: since you're now a member of the Svelte community, you should [join our friendly Discord chatroom](chat). That's where you'll find fellow Svelte users, and it's where we plan the future of the framework. \ No newline at end of file diff --git a/site/cypress/fixtures/example.json b/site/cypress/fixtures/example.json deleted file mode 100644 index da18d9352a..0000000000 --- a/site/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} \ No newline at end of file diff --git a/site/cypress/integration/spec.js b/site/cypress/integration/spec.js deleted file mode 100644 index 9a7140ddae..0000000000 --- a/site/cypress/integration/spec.js +++ /dev/null @@ -1,19 +0,0 @@ -describe('Sapper template app', () => { - beforeEach(() => { - cy.visit('/') - }); - - it('has the correct <h1>', () => { - cy.contains('h1', 'Great success!') - }); - - it('navigates to /about', () => { - cy.get('nav a').contains('about').click(); - cy.url().should('include', '/about'); - }); - - it('navigates to /blog', () => { - cy.get('nav a').contains('blog').click(); - cy.url().should('include', '/blog'); - }); -}); \ No newline at end of file diff --git a/site/cypress/plugins/index.js b/site/cypress/plugins/index.js deleted file mode 100644 index fd170fba69..0000000000 --- a/site/cypress/plugins/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config -} diff --git a/site/cypress/support/commands.js b/site/cypress/support/commands.js deleted file mode 100644 index c1f5a772e2..0000000000 --- a/site/cypress/support/commands.js +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add("login", (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This is will overwrite an existing command -- -// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/site/cypress/support/index.js b/site/cypress/support/index.js deleted file mode 100644 index d68db96df2..0000000000 --- a/site/cypress/support/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/site/package-lock.json b/site/package-lock.json index 7ae4494a92..42a737dbe0 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -14,18 +14,18 @@ } }, "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.4.tgz", + "integrity": "sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", + "@babel/generator": "^7.5.0", + "@babel/helpers": "^7.5.4", + "@babel/parser": "^7.5.0", "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/traverse": "^7.5.0", + "@babel/types": "^7.5.0", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", @@ -33,32 +33,15 @@ "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz", + "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.5.0", "jsesc": "^2.5.1", "lodash": "^4.17.11", "source-map": "^0.5.0", @@ -258,20 +241,20 @@ } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.4.tgz", + "integrity": "sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow==", "dev": true, "requires": { "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.0", + "@babel/types": "^7.5.0" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -280,9 +263,9 @@ } }, "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz", + "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -296,6 +279,16 @@ "@babel/plugin-syntax-async-generators": "^7.2.0" } }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", @@ -307,9 +300,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz", + "integrity": "sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -392,9 +385,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -447,9 +440,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -467,9 +460,9 @@ } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -523,34 +516,37 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { @@ -564,12 +560,12 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", "dev": true, "requires": { - "regexp-tree": "^0.1.0" + "regexp-tree": "^0.1.6" } }, "@babel/plugin-transform-new-target": { @@ -612,12 +608,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", "dev": true, "requires": { - "regenerator-transform": "^0.13.4" + "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { @@ -630,9 +626,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.0.tgz", + "integrity": "sha512-LmPIZOAgTLl+86gR9KjLXex6P/lRz1fWEjTz6V6QZMmKie51ja3tvzdwORqhHc4RWR8TcZ5pClpRWs0mlaA2ng==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -718,46 +714,48 @@ } }, "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.4.tgz", + "integrity": "sha512-hFnFnouyRNiH1rL8YkX1ANCNAUVC8Djwdqfev8i1415tnAG+7hlA5zhZ0Q/3Q5gkop4HioIPbCEWAalqcbxRoQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.4", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", "@babel/plugin-transform-block-scoping": "^7.4.4", "@babel/plugin-transform-classes": "^7.4.4", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", + "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", "@babel/plugin-transform-for-of": "^7.4.4", "@babel/plugin-transform-function-name": "^7.4.4", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", "@babel/plugin-transform-new-target": "^7.4.4", "@babel/plugin-transform-object-super": "^7.2.0", "@babel/plugin-transform-parameters": "^7.4.4", "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", + "@babel/plugin-transform-regenerator": "^7.4.5", "@babel/plugin-transform-reserved-words": "^7.2.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", @@ -765,18 +763,18 @@ "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", + "@babel/types": "^7.5.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" } }, "@babel/runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.4.tgz", - "integrity": "sha512-w0+uT71b6Yi7i5SE0co4NioIpSYS6lLiXvCzWzGSKvpK5vdQtCbICHMj+gbAKAOtxiV6HsVh/MBdaF9EQ6faSg==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.4.tgz", + "integrity": "sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" @@ -794,43 +792,26 @@ } }, "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz", + "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/generator": "^7.5.0", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.5.0", + "@babel/types": "^7.5.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz", + "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -1366,14 +1347,14 @@ "integrity": "sha512-ym6ooqMr09+cV+y52p5kszJ0jYcX+nJfm8POrQb7QYowvpPPuneZ71EclHrQSB7a50lcytgR/xtL6AUFdvyEkg==" }, "@polka/send": { - "version": "1.0.0-next.2", - "resolved": "https://registry.npmjs.org/@polka/send/-/send-1.0.0-next.2.tgz", - "integrity": "sha512-eq8gUzykpYPuOMrnyAzsL4KunhQXZKFiNsbThAwh19PrBAz2v8mECsj3YnxjYYifbB1w1vhR74nsXQWDi80oAg==" + "version": "1.0.0-next.3", + "resolved": "https://registry.npmjs.org/@polka/send/-/send-1.0.0-next.3.tgz", + "integrity": "sha512-54ftOGSZQMx8Xh8pnPgAj4499wppAEHQ892A7WacYOJ7ySuCWVgFmpODmXC2hU7qD9Scbi0iAu8rZls3ld+Eyg==" }, "@polka/url": { - "version": "1.0.0-next.1", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.1.tgz", - "integrity": "sha512-6d8YbKW4hjJMnU6ZJSDLtALWiB4J//OIPaP885ruf5U8MLZHigocDxhjgvLwbV6bGkikhllgTjD9eWioKWAQdA==" + "version": "1.0.0-next.3", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.3.tgz", + "integrity": "sha512-Uom7l6OeP6vcf85lMImelYu5WKVWjXyhkpi9WsRdRzlJFJFPVhjBtBCktgDUj7dk1N5FURUdegSZ5XOjxf8JZg==" }, "@sindresorhus/slugify": { "version": "0.9.1", @@ -1386,9 +1367,9 @@ } }, "@sveltejs/site-kit": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@sveltejs/site-kit/-/site-kit-1.0.4.tgz", - "integrity": "sha512-BaQhIL1iPhCF+iDXfy9psDvRdFzfyMPkWnoZHfVz+INpHsU2aJmRZOPl9rykXmPyiPo+AwTTNK5vjIvmtwHLPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@sveltejs/site-kit/-/site-kit-1.1.1.tgz", + "integrity": "sha512-EYQKhrdbRWeaPteTN1YZ4oW0xBbUzQ2D+XPdIfEvwDvgxAka9KZP5BCiENrXFf7Z9lxe2HW6MDlrT2sMwoS8+g==", "dev": true, "requires": { "@sindresorhus/slugify": "^0.9.1", @@ -1396,13 +1377,23 @@ } }, "@sveltejs/svelte-repl": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.0.10.tgz", - "integrity": "sha512-PYXCN8OC2q3WzwtMcbFinLGzFI7RlD3cHqjkUuQWDaIMHriKYuALun4H/FxP8w3B3hNe9OBprgGmBzlkPuGEJw==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@sveltejs/svelte-repl/-/svelte-repl-0.1.8.tgz", + "integrity": "sha512-RSKsuiQE3DrdT7B7DNhd5DK+DkYGLT5m6Ugchxc8iN+5v/hfVTbeNb+KJtItXLpDxiYdbb0HIiQPEdy0M+HThw==", "dev": true, "requires": { "codemirror": "^5.45.0", - "sourcemap-codec": "^1.4.4" + "estree-walker": "^0.6.0", + "sourcemap-codec": "^1.4.4", + "yootils": "0.0.15" + }, + "dependencies": { + "yootils": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.15.tgz", + "integrity": "sha512-GvGLuJ7XHJPGEUQ52vh8fh+vPjfikuGcu7yBswfrsNsHqnAoytOVuSb69eM0j8wQIjMz0U3kY3YsfwMhJgfG9w==", + "dev": true + } } }, "@types/estree": { @@ -1412,9 +1403,9 @@ "dev": true }, "@types/node": { - "version": "11.13.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", - "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==", + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.2.tgz", + "integrity": "sha512-gojym4tX0FWeV2gsW4Xmzo5wxGjXGm550oVUII7f7G5o4BV6c7DBdiG1RRQd+y1bvqRyYtPfMK85UM95vsapqQ==", "dev": true }, "@types/pg": { @@ -1446,9 +1437,9 @@ } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", + "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", "dev": true }, "ansi-colors": { @@ -1478,16 +1469,6 @@ "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==", "dev": true }, - "anymatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.1.tgz", - "integrity": "sha512-WQdpV5fo7XSY76HPN4pqdUl13Q282JsV0gQ8OnIxQsqDEHDZJCBkQ89fL1Mb3tNiPzGQnxMHM5G2iG3k9O6yng==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1545,18 +1526,21 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1624,12 +1608,6 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, "bmp-js": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", @@ -1682,14 +1660,14 @@ "dev": true }, "browserslist": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz", - "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.4.tgz", + "integrity": "sha512-ErJT8qGfRt/VWHSr1HeqZzz50DvxHtr1fVL1m5wf20aGrG8e1ce8fpZ2EjZEfs09DDZYSvtRaDlMpWslBf8Low==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000963", - "electron-to-chromium": "^1.3.127", - "node-releases": "^1.1.17" + "caniuse-lite": "^1.0.30000981", + "electron-to-chromium": "^1.3.188", + "node-releases": "^1.1.25" } }, "buffer": { @@ -1764,9 +1742,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30000963", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000963.tgz", - "integrity": "sha512-n4HUiullc7Lw0LyzpeLa2ffP8KxFBGdxqD/8G3bSL6oB758hZ2UE2CVK+tQN958tJIi0/tfpjAc67aAtoHgnrQ==", + "version": "1.0.30000983", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000983.tgz", + "integrity": "sha512-/llD1bZ6qwNkt41AsvjsmwNOoA4ZB+8iqmf5LVyeSXuBODT/hAMFNVOh84NdUzoiYiSKqo5vQ3ZzeYHSi/olDQ==", "dev": true }, "chalk": { @@ -1780,58 +1758,6 @@ "supports-color": "^5.3.0" } }, - "chokidar": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.0.tgz", - "integrity": "sha512-ebzWopcacB2J19Jsb5RPtMrzmjUZ5VAQnsL0Ztrix3lswozHbiDp+1Lg3AWSKHdwsps/W2vtshA/x3I827F78g==", - "dev": true, - "requires": { - "anymatch": "^3.0.1", - "async-each": "^1.0.3", - "braces": "^3.0.2", - "fsevents": "^2.0.6", - "glob-parent": "^5.0.0", - "is-binary-path": "^2.1.0", - "is-glob": "^4.0.1", - "normalize-path": "^3.0.0", - "readdirp": "^3.0.1" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, "chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", @@ -1907,9 +1833,9 @@ "dev": true }, "codemirror": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.46.0.tgz", - "integrity": "sha512-3QpMge0vg4QEhHW3hBAtCipJEWjTJrqLLXdIaWptJOblf1vHFeXLNtFhPai/uX2lnFCehWNk4yOdaMR853Z02w==", + "version": "5.47.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.47.0.tgz", + "integrity": "sha512-kV49Fr+NGFHFc/Imsx6g180hSlkGhuHxTSDDmDHOuyln0MQYFLixDY4+bFkBVeCEiepYfDimAF/e++9jPJk4QA==", "dev": true }, "collection-visit": { @@ -1992,36 +1918,29 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", - "dev": true - }, "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", + "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" + "browserslist": "^4.6.2", + "core-js-pure": "3.1.4", + "semver": "^6.1.1" }, "dependencies": { "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", "dev": true } } }, "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", + "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==", "dev": true }, "core-util-is": { @@ -2044,12 +1963,12 @@ } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "decamelize": { @@ -2134,9 +2053,9 @@ "optional": true }, "devalue": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-1.1.0.tgz", - "integrity": "sha512-mKj+DaZuxevfmjI78VdlkBr+NDmwaDAKQz0t5RDSmhwBn6m5z82KDnVRKVFeUvlMOmI1fzkAUx4USdqGGhas6g==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.0.tgz", + "integrity": "sha512-6H2FBD5DPnQS75UWJtQjoVeKZlmXoa765UgYS5RQnx6Ay9LUhUld0w1/D6cYdrY+wnu6XQNlpEBfnJUZK0YyPQ==" }, "diff": { "version": "3.5.0", @@ -2170,9 +2089,9 @@ } }, "electron-to-chromium": { - "version": "1.3.129", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.129.tgz", - "integrity": "sha512-puirJsgZnedlFEmRa7WEUIaS8ZgHHn7d7inph+RiapCc0x80hdoDyEEpR9z3aRUSZy4fGxOTOFcxnGmySlrmhA==", + "version": "1.3.188", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.188.tgz", + "integrity": "sha512-tEQcughYIMj8WDMc59EGEtNxdGgwal/oLLTDw+NEqJRJwGflQvH3aiyiexrWeZOETP4/ko78PVr6gwNhdozvuQ==", "dev": true }, "emoji-regex": { @@ -2230,16 +2149,10 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "eslint-plugin-svelte3": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-1.0.0.tgz", - "integrity": "sha512-lsKUKPrzsjB4JAwmGhfg/Xssc/+L4KU8oL5WNZ0q/D3DkYkIVE4XpT/j8TY6oEFLd31Sznm7itw8Q7RsK6g0cA==", - "dev": true - }, "esm": { - "version": "3.2.22", - "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.22.tgz", - "integrity": "sha512-z8YG7U44L82j1XrdEJcqZOLUnjxco8pO453gKOlaMD1/md1n/5QrscAmYG+oKUspsmDLuBFZrpbxI6aQ67yRxA==", + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, "esprima": { @@ -2296,6 +2209,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -2313,6 +2235,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -2447,14 +2375,6 @@ "dev": true, "requires": { "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - } } }, "for-each": { @@ -2482,9 +2402,9 @@ } }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -2496,13 +2416,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.6.tgz", - "integrity": "sha512-vfmKZp3XPM36DNF0qhW+Cdxk7xm7gTEHY1clv1Xq1arwRQuKZgAhw+NZNWbJBtuaNxzNXwhfdPYRrvIbjfS33A==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2531,9 +2444,9 @@ "dev": true }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -2544,15 +2457,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", - "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "global": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", @@ -2637,6 +2541,12 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -2667,26 +2577,18 @@ "dev": true }, "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" } }, "http-link-header": { @@ -2696,9 +2598,9 @@ "dev": true }, "httpie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.1.tgz", - "integrity": "sha512-KYgUXOhxVPo5mYuFPqnKW14fP5goMGkLc9CRz0WD6b1TCED9nl9wzj4jqr+8LY+AhPJQ/LdCQLRfF2JrBEja5Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/httpie/-/httpie-1.1.2.tgz", + "integrity": "sha512-VQ82oXG95oY1fQw/XecHuvcFBA+lZQ9Vwj1RfLcO8a7HpDd4cc2ukwpJt+TUlFaLUAzZErylxWu6wclJ1rUhUQ==" }, "ieee754": { "version": "1.1.13", @@ -2752,6 +2654,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2769,19 +2677,10 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", "dev": true }, "is-callable": { @@ -2799,6 +2698,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2841,12 +2746,6 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -2859,15 +2758,6 @@ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -2883,6 +2773,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -2903,6 +2799,15 @@ "isobject": "^3.0.1" } }, + "is-reference": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.3.tgz", + "integrity": "sha512-W1iHHv/oyBb2pPxkBxtaewxa1BC58Pn5J0hogyCdefwUIvb6R+TGbAcIa4qPNYLqLhb3EnOgUf2MQkkF76BcKw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -3063,13 +2968,6 @@ "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } } }, "jwa": { @@ -3257,9 +3155,9 @@ } }, "marked": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", - "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" }, "mem": { "version": "4.3.0", @@ -3309,9 +3207,9 @@ } }, "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==" }, "mimic-fn": { "version": "2.1.0", @@ -3440,11 +3338,19 @@ "ms": "^2.1.1" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } }, "supports-color": { "version": "6.0.0", @@ -3470,10 +3376,9 @@ "dev": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "nanomatch": { "version": "1.2.13", @@ -3520,15 +3425,15 @@ } }, "node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", "dev": true }, "node-pg-migrate": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/node-pg-migrate/-/node-pg-migrate-3.19.0.tgz", - "integrity": "sha512-IIiiP6oHR9JDOqlIpaRFTnIedPIMXsYiMOkCPCSCGA2e+ZuDn/VS07CbDwVwKA+sBfwR0g5KIBx7QZGAS6sesQ==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/node-pg-migrate/-/node-pg-migrate-3.21.1.tgz", + "integrity": "sha512-gTd8NquEcJjhkT96iwnch6DyAdZ9bhi+avdAvV4kPw/ya7T4OijUoSNVJzCodCG2kIjv+fjssnZHC/LzEQdewg==", "dev": true, "requires": { "@types/pg": "^7.4.0", @@ -3540,9 +3445,9 @@ } }, "node-releases": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.17.tgz", - "integrity": "sha512-/SCjetyta1m7YXLgtACZGDYJdCSIBAWorDWkGCGZlydP2Ll7J48l7j/JxNYZ+xsgSPbWfdulVS/aY+GdjUsQ7Q==", + "version": "1.1.25", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", + "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==", "dev": true, "requires": { "semver": "^5.3.0" @@ -3560,12 +3465,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -3618,6 +3517,12 @@ "is-descriptor": "^0.1.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -3845,9 +3750,9 @@ } }, "pg": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.10.0.tgz", - "integrity": "sha512-aE6FZomsyn3OeGv1oM50v7Xu5zR75c15LXdOCwA9GGrfjXsQjzwYpbcTS6OwEMhYfZQS6m/FVU/ilPLiPzJDCw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-7.11.0.tgz", + "integrity": "sha512-YO4V7vCmEMGoF390LJaFaohWNKaA2ayoQOEZmiHVcAUF+YsRThpf/TaKCgSvsSE7cDm37Q/Cy3Gz41xiX/XjTw==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -3906,12 +3811,6 @@ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", "dev": true }, - "picomatch": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.6.tgz", - "integrity": "sha512-Btng9qVvFsW6FkXYQQK5nEI5i8xdXFDmlKxC7Q8S2Bu5HGWnbQf7ts2kOoxJIrZn5hmw61RZIayAg2zBuJDtyQ==", - "dev": true - }, "pidtree": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", @@ -3940,12 +3839,12 @@ "dev": true }, "polka": { - "version": "1.0.0-next.2", - "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.2.tgz", - "integrity": "sha512-y82w42/8IA7bc4YwGwAmnbrXj8ZWWDGvnfwq1b0eCtFielZSSSJv7OXUIKQuc/vw5OCCM1hPIgrYsNPzbwDaJw==", + "version": "1.0.0-next.3", + "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.3.tgz", + "integrity": "sha512-VmCsJK2uAqyjtV8e6ujEhgehibh+lvgdlrIgkTGsL+EKrCS/+BmGq57NV7yvkeGKI4XhsCw/J1YSeejmNfhbig==", "requires": { - "@polka/url": "^1.0.0-next.1", - "trouter": "^3.0.1" + "@polka/url": "^1.0.0-next.3", + "trouter": "^3.0.2" } }, "posix-character-classes": { @@ -3998,9 +3897,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "pump": { @@ -4039,15 +3938,6 @@ "util-deprecate": "~1.0.1" } }, - "readdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.0.1.tgz", - "integrity": "sha512-emMp13NEwWQQX1yeDgrzDNCSY7NHV6k9HTW0OhyQqOAzYacbqQhnmWiCYjxNPcqMTQ9k77oXQJp28jkytm3+jg==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -4064,9 +3954,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", - "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -4079,9 +3969,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", + "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", "dev": true, "requires": { "private": "^0.1.6" @@ -4098,9 +3988,9 @@ } }, "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", "dev": true }, "regexparam": { @@ -4182,9 +4072,9 @@ "dev": true }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -4212,44 +4102,71 @@ } }, "rollup": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.11.2.tgz", - "integrity": "sha512-H5sS7GZ/Rn0t119Et8mw0QXtg5HTOI/1FL57EKHk5oduRmGaraOf3KcEt6j+dXJ9tXxWQkG+/FBjPS4dzxo6EA==", + "version": "1.16.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.16.7.tgz", + "integrity": "sha512-P3GVcbVSLLjHWFLKGerYRe3Q/yggRXmTZFx/4WZf4wzGwO6hAg5jyMAFMQKc0dts8rFID4BQngfoz6yQbI7iMQ==", "dev": true, "requires": { "@types/estree": "0.0.39", - "@types/node": "^11.13.9", + "@types/node": "^12.0.10", "acorn": "^6.1.1" - }, - "dependencies": { - "@types/node": { - "version": "11.13.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.10.tgz", - "integrity": "sha512-leUNzbFTMX94TWaIKz8N15Chu55F9QSH+INKayQr5xpkasBQBRF3qQXfo3/dOnMU/dEIit+Y/SU8HyOjq++GwA==", - "dev": true - } } }, "rollup-plugin-babel": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz", - "integrity": "sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz", + "integrity": "sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.3.0" + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + } } }, "rollup-plugin-commonjs": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", - "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz", + "integrity": "sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA==", "dev": true, "requires": { - "estree-walker": "^0.6.0", + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", "magic-string": "^0.25.2", - "resolve": "^1.10.0", - "rollup-pluginutils": "^2.6.0" + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + } } }, "rollup-plugin-json": { @@ -4262,15 +4179,42 @@ } }, "rollup-plugin-node-resolve": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.3.tgz", - "integrity": "sha512-r+WaesPzdGEynpLZLALFEDugA4ACa5zn7bc/+LVX4vAXQQ8IgDHv0xfsSvJ8tDXUtprfBtrDtRFg27ifKjcJTg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", "dev": true, "requires": { "@types/resolve": "0.0.8", "builtin-modules": "^3.1.0", "is-module": "^1.0.0", - "resolve": "^1.10.0" + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + } } }, "rollup-plugin-replace": { @@ -4284,9 +4228,9 @@ } }, "rollup-plugin-svelte": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.0.3.tgz", - "integrity": "sha512-3W/jbtBcsxohKQMI1Po2ZsUHRGUy3vEtgXLHvBin1+ms3wl2eomSyYBV7pwrkh6tWok9BVzdxGQgd7IqibG+Ew==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.1.0.tgz", + "integrity": "sha512-4MRZG29dAWDpoxEs5uIHzDnYafQEOLaKIJAuDYUtFIzEm1F1IGSTlFyjd8/qk4wltlHdu6V7YfZY53+CKryhMg==", "dev": true, "requires": { "require-relative": "^0.8.7", @@ -4295,21 +4239,39 @@ } }, "rollup-plugin-terser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz", - "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.1.tgz", + "integrity": "sha512-McIMCDEY8EU6Y839C09UopeRR56wXHGdvKKjlfiZG/GrP6wvZQ62u2ko/Xh1MNH2M9WDL+obAAHySljIZYCuPQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.0.0", - "serialize-javascript": "^1.6.1", - "terser": "^3.14.1" + "jest-worker": "^24.6.0", + "rollup-pluginutils": "^2.8.1", + "serialize-javascript": "^1.7.0", + "terser": "^4.1.0" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + } } }, "rollup-pluginutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz", - "integrity": "sha512-aGQwspEF8oPKvg37u3p7h0cYNwmJR1sCBMZGZ5b9qy8HGtETknqjzcxrDRrcAnJNXN18lBH4Q9vZYth/p4n8jQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.7.0.tgz", + "integrity": "sha512-FoP6L1YnMYTAR06Dpq5LE3jJtMwPE6H4VEOqFU23yoziZnqNRSiWcVy6YgEY5PdQB4G7278+8c4TvB0JKS1csA==", "dev": true, "requires": { "estree-walker": "^0.6.0", @@ -4342,24 +4304,16 @@ } }, "sapper": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/sapper/-/sapper-0.26.0.tgz", - "integrity": "sha512-KdouvzoCeCLirGwlf6U1KwT8GDTFNtK9KEQRFV8bQvNJQzwqS7+QyPAK8Z2MnR7gamluo+bDx84cTtnHD9I/mQ==", + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/sapper/-/sapper-0.27.4.tgz", + "integrity": "sha512-BYdiJSiyVguu2FZBbl87mn8KhSu+C8JRl7FurclXbMgpiMW7Yt74HPCcu/hXOubvvZw0kVTnzBlAGJCXZmldnA==", "dev": true, "requires": { - "html-minifier": "^3.5.21", + "html-minifier": "^4.0.0", "http-link-header": "^1.0.2", "shimport": "^1.0.0", "sourcemap-codec": "^1.4.4", "string-hash": "^1.1.3" - }, - "dependencies": { - "shimport": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shimport/-/shimport-1.0.0.tgz", - "integrity": "sha512-XKd+39voZT1rFR1ct+pr8sFSYAW6IvM3LeF87FrgcGHc/uSZ4GfOZVA42LE5LXFOpTWgmDC5sS8DNDtiV4Vd4Q==", - "dev": true - } } }, "sax": { @@ -4452,6 +4406,12 @@ "rechoir": "^0.6.2" } }, + "shimport": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/shimport/-/shimport-1.0.1.tgz", + "integrity": "sha512-Imf4gH+8WQmT1GvxS/x79qpmfnE6m50hyN1ucatX+7oMCgmaF8obZWCPIzSUe6+P+YmXM46lkP2pxiV2/lt9Og==", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -4459,9 +4419,9 @@ "dev": true }, "sirv": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.0.tgz", - "integrity": "sha512-k/dcRW7Ry2VgERDiLyyq3peGZEnqP2EcTcG5646QjoLwz7lnDA50i20m/3Rn7J4FLtimyoKQsG4E2BItctwjhg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-0.4.2.tgz", + "integrity": "sha512-dQbZnsMaIiTQPZmbGmktz+c74zt/hyrJEB4tdp2Jj0RNv9J6B/OWR5RyrZEvIn9fyh9Zlg2OlE2XzKz6wMKGAw==", "requires": { "@polka/url": "^0.5.0", "mime": "^2.3.1" @@ -4490,6 +4450,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -4507,6 +4476,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -4570,6 +4545,12 @@ "kind-of": "^3.2.0" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4790,9 +4771,9 @@ } }, "svelte": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.2.0.tgz", - "integrity": "sha512-i/FSWUcqVw9JBo9bY69/ZI89WCCpyhdWjvAroOroI4qnQboh0WGlgjnFOEKOTvlv1XONd8cVpRGbOYYE3Ec6TQ==", + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.6.7.tgz", + "integrity": "sha512-9HzhPxWNLi+ZBhxL3HJ8jwwu+u+XfHtVF3uEJ2m8/JOdnaTC9D2qiEwOncgI7z/pN+VumgKQtZoHtvYCW6fHqg==", "dev": true }, "tar": { @@ -4811,14 +4792,14 @@ } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", + "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==", "dev": true, "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -4867,6 +4848,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4907,29 +4894,23 @@ "dev": true }, "trouter": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.0.1.tgz", - "integrity": "sha512-9IBGrlL5bW65xhWufCCf4AsZyxGVIxv7Jy+PTwNtfPHJo+8hAp4wvt/+ersAHE//0Lgjy7obPROfgasNocoYuA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.0.2.tgz", + "integrity": "sha512-wzUcM3oKmF8Fx5pd+3IxZj5LBugqW+hSQHm6cTHkpiZHL8w6YeZSzo3LPw0UdhlwaGPms3OxT7N4GEOIRTw+jw==", "requires": { "regexparam": "^1.2.0" } }, "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, "requires": { - "commander": "~2.19.0", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5323,6 +5304,11 @@ } } } + }, + "yootils": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.0.16.tgz", + "integrity": "sha512-aIVecm5ucOzwhtKbl0zkfg0ZSOUR9c2da0k8cIc9umjjzkvVCWUUX/UHZ1CLPsv4wmJLqt0aWeLB7p9n9JDwYQ==" } } } diff --git a/site/package.json b/site/package.json index ac9a3dc6aa..b3953ae7de 100644 --- a/site/package.json +++ b/site/package.json @@ -3,61 +3,58 @@ "version": "1.0.0", "description": "Docs and examples for Svelte", "scripts": { - "dev": "sapper dev", + "dev": "npm run copy-workers && sapper dev", + "copy-workers": "rm -rf static/workers && cp -r node_modules/@sveltejs/svelte-repl/workers static", "migrate": "node-pg-migrate -r dotenv/config", - "sapper": "sapper build --legacy", - "update_shimport": "cp node_modules/shimport/index.js __sapper__/build/client/shimport@0.0.14.js", + "sapper": "npm run copy-workers && sapper build --legacy", "update": "node scripts/update_template.js && node scripts/get-contributors.js", "start": "node __sapper__/build", - "cy:run": "cypress run", - "cy:open": "cypress open", - "test": "run-p --race dev cy:run", - "testsrc": "mocha -r esm test/**" + "test": "mocha -r esm test/**", + "deploy": "make deploy" }, "dependencies": { "@polka/redirect": "^1.0.0-next.0", "@polka/send": "^1.0.0-next.2", - "devalue": "^1.1.0", + "devalue": "^2.0.0", "do-not-zip": "^1.0.0", "golden-fleece": "^1.0.9", - "httpie": "^1.1.1", + "httpie": "^1.1.2", "jsonwebtoken": "^8.5.1", - "marked": "^0.6.1", - "pg": "^7.10.0", + "marked": "^0.7.0", + "pg": "^7.11.0", "polka": "^1.0.0-next.2", - "prismjs": "^1.15.0", - "sirv": "^0.4.0" + "prismjs": "^1.16.0", + "sirv": "^0.4.2", + "yootils": "0.0.16" }, "devDependencies": { - "@babel/core": "^7.4.4", + "@babel/core": "^7.5.4", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/preset-env": "^7.4.4", - "@babel/runtime": "^7.4.4", + "@babel/plugin-transform-runtime": "^7.5.0", + "@babel/preset-env": "^7.5.4", + "@babel/runtime": "^7.5.4", "@sindresorhus/slugify": "^0.9.1", - "@sveltejs/site-kit": "^1.0.4", - "@sveltejs/svelte-repl": "0.0.10", - "chokidar": "^3.0.0", + "@sveltejs/site-kit": "^1.1.1", + "@sveltejs/svelte-repl": "^0.1.8", "degit": "^2.1.3", "dotenv": "^8.0.0", - "eslint-plugin-svelte3": "^1.0.0", - "esm": "^3.2.22", - "jimp": "^0.6.0", - "mocha": "^6.1.3", - "node-fetch": "^2.3.0", - "node-pg-migrate": "^3.18.1", + "esm": "^3.2.25", + "jimp": "^0.6.4", + "mocha": "^6.1.4", + "node-fetch": "^2.6.0", + "node-pg-migrate": "^3.21.1", "npm-run-all": "^4.1.5", - "rollup": "^1.11.2", - "rollup-plugin-babel": "^4.3.2", - "rollup-plugin-commonjs": "^9.3.4", + "rollup": "^1.16.7", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-commonjs": "^10.0.1", "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-resolve": "^4.2.3", + "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-replace": "^2.2.0", - "rollup-plugin-svelte": "^5.0.3", - "rollup-plugin-terser": "^4.0.4", - "sapper": "^0.26.0", + "rollup-plugin-svelte": "^5.1.0", + "rollup-plugin-terser": "^5.1.1", + "sapper": "^0.27.4", "shelljs": "^0.8.3", - "svelte": "^3.0.0" + "svelte": "^3.6.7" }, "engines": { "node": ">=10.0.0" diff --git a/site/rollup.config.js b/site/rollup.config.js index 029cf65bcf..c713be33c1 100644 --- a/site/rollup.config.js +++ b/site/rollup.config.js @@ -53,9 +53,6 @@ export default { module: true }) ], - - // temporary, pending Rollup 1.0 - experimentalCodeSplitting: true }, server: { @@ -81,9 +78,6 @@ export default { require('module').builtinModules || Object.keys(process.binding('natives')) ) ], - - // temporary, pending Rollup 1.0 - experimentalCodeSplitting: true }, serviceworker: { diff --git a/site/scripts/build-svelte-app-json.js b/site/scripts/build-svelte-app-json.js deleted file mode 100644 index 59a4b4a07b..0000000000 --- a/site/scripts/build-svelte-app-json.js +++ /dev/null @@ -1,11 +0,0 @@ -const fs = require('fs'); - -const files = []; - -for (const path of process.argv.slice(2)) { - if (!path.includes('/.')) { - files.push({ path: path.slice(19), data: fs.readFileSync(path).toString() }); - } -} - -fs.writeFileSync('static/svelte-app.json', JSON.stringify(files)); diff --git a/site/scripts/get-contributors.js b/site/scripts/get-contributors.js index fe642e10e7..cb1facb874 100644 --- a/site/scripts/get-contributors.js +++ b/site/scripts/get-contributors.js @@ -42,6 +42,8 @@ async function main() { } await sprite.quality(80).write(`../static/contributors.jpg`); + // TODO: Optimizing the static/contributors.jpg image should probably get automated as well + console.log('remember to additionally optimize the resulting /static/contributors.jpg image file via e.g. https://squoosh.app '); const str = `[\n\t${authors.map(a => `'${a.login}'`).join(',\n\t')}\n]`; diff --git a/site/scripts/update_template.js b/site/scripts/update_template.js index 814d402f5e..9d897c064f 100644 --- a/site/scripts/update_template.js +++ b/site/scripts/update_template.js @@ -1,7 +1,7 @@ const sh = require('shelljs'); const fs = require('fs'); -sh.cd(__dirname+'/../'); +sh.cd(__dirname + '/../'); // fetch svelte app sh.rm('-rf','scripts/svelte-app'); @@ -16,7 +16,10 @@ const appPath = 'scripts/svelte-app'; const files = []; for (const path of sh.find(appPath).filter(p => fs.lstatSync(p).isFile()) ) { - files.push({ path: path.slice(appPath.length + 1), data: fs.readFileSync(path).toString() }); + const bytes = fs.readFileSync(path); + const string = bytes.toString(); + const data = bytes.compare(Buffer.from(string)) === 0 ? string : [...bytes]; + files.push({ path: path.slice(appPath.length + 1), data }); } fs.writeFileSync('static/svelte-app.json', JSON.stringify(files)); \ No newline at end of file diff --git a/site/src/components/PreloadingIndicator.svelte b/site/src/components/PreloadingIndicator.svelte index 43bcf3ab5a..8b88029abb 100644 --- a/site/src/components/PreloadingIndicator.svelte +++ b/site/src/components/PreloadingIndicator.svelte @@ -4,11 +4,7 @@ let p = 0; let visible = false; - const sleep = ms => new Promise(f => setTimeout(f, ms)); - onMount(() => { - let running = true; - function next() { visible = true; p += 0.1; @@ -18,10 +14,6 @@ } setTimeout(next, 250); - - return () => { - running = false; - }; }); </script> diff --git a/site/src/components/Repl/ReplWidget.svelte b/site/src/components/Repl/ReplWidget.svelte index fbdd3622a7..9d06fb7868 100644 --- a/site/src/components/Repl/ReplWidget.svelte +++ b/site/src/components/Repl/ReplWidget.svelte @@ -29,7 +29,7 @@ if (gist) { fetch(`repl/${gist}.json`).then(r => r.json()).then(data => { - const { id, description, files } = data; + const { description, files } = data; name = description; @@ -116,6 +116,7 @@ {#if process.browser} <Repl bind:this={repl} + workersUrl="workers" fixed={mobile} {svelteUrl} {rollupUrl} diff --git a/site/src/routes/_components/WhosUsingSvelte.svelte b/site/src/routes/_components/WhosUsingSvelte.svelte index 1700312055..8aab007132 100644 --- a/site/src/routes/_components/WhosUsingSvelte.svelte +++ b/site/src/routes/_components/WhosUsingSvelte.svelte @@ -18,17 +18,19 @@ a { height: 40px; margin: 0 0.5em 0.5em 0; + display: flex; + align-items: center; border: 2px solid var(--second); padding: 5px 10px; border-radius: 20px; + color: var(--text); } .add-yourself { - display: flex; - align-items: center; - border: 2px solid var(--second); + color: var(--prime); } + picture, img { height: 100%; } @@ -43,16 +45,29 @@ </style> <div class="logos"> - <a target="_blank" rel="noopener" href="https://beyonk.com"><img src="organisations/beyonk.svg" alt="Beyonk logo"></a> - <a target="_blank" rel="noopener" href="https://chess.com" style="background-color: rgb(49,46,43);"><img src="organisations/chess.svg" alt="Chess.com logo"></a> - <a target="_blank" rel="noopener" href="https://datawrapper.de"><img src="organisations/datawrapper.svg" alt="Datawrapper logo"></a> - <a target="_blank" rel="noopener" href="https://db.nomics.world" style="background-color: rgb(15,39,47);"><img src="organisations/dbnomics.png" alt="DBNomics logo"></a> - <a target="_blank" rel="noopener" href="https://from-now-on.com"><img src="organisations/from-now-on.png" alt="From-Now-On logo"></a> - <a target="_blank" rel="noopener" href="https://itslearning.com"><img src="organisations/itslearning.svg" alt="itslearning logo"></a> - <a target="_blank" rel="noopener" href="http://mustlab.ru"><img src="organisations/mustlab.png" alt="Mustlab logo"></a> - <a target="_blank" rel="noopener" href="https://www.nesta.org.uk"><img src="organisations/nesta.svg" alt="Nesta logo"></a> - <a target="_blank" rel="noopener" href="https://nytimes.com"><img src="organisations/nyt.svg" alt="The New York Times logo"></a> - <a target="_blank" rel="noopener" href="https://razorpay.com"><img src="organisations/razorpay.svg" alt="Razorpay logo"></a> - <a target="_blank" rel="noopener" href="https://www.stone.co"><img src="organisations/stone.svg" alt="Stone Payments logo"></a> + <a target="_blank" rel="noopener" href="https://beyonk.com"><img src="organisations/beyonk.svg" alt="Beyonk logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://chess.com" style="background-color: rgb(49,46,43);"><img src="organisations/chess.svg" alt="Chess.com logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://comigosaude.com.br"><img src="organisations/comigo.svg" alt="Comigo logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://datawrapper.de"><img src="organisations/datawrapper.svg" alt="Datawrapper logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://db.nomics.world" style="background-color: rgb(15,39,47);"><picture><source type="image/webp" srcset="organisations/dbnomics.webp"><img src="organisations/dbnomics.jpg" alt="DBNomics logo" loading="lazy"></picture></a> + <a target="_blank" rel="noopener" href="https://deck.nl"><img src="organisations/deck.svg" alt="Deck logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://from-now-on.com"><img src="organisations/from-now-on.png" alt="From-Now-On logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://godaddy.com"><img src="organisations/godaddy.svg" alt="GoDaddy logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://itslearning.com"><img src="organisations/itslearning.svg" alt="itslearning logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="http://mustlab.ru"><img src="organisations/mustlab.png" alt="Mustlab logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://www.nesta.org.uk"><img src="organisations/nesta.svg" alt="Nesta logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://www.nonkositelecoms.com"><img src="organisations/nonkosi.svg" alt="Nonkosi Telecoms logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://www.nzz.ch"><img src="organisations/nzz.svg" alt="Neue Zürcher Zeitung logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://nytimes.com"><img src="organisations/nyt.svg" alt="The New York Times logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://openstate.eu"><img src="organisations/open-state-foundation.svg" alt="Open State Foundation logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://razorpay.com"><img src="organisations/razorpay.svg" alt="Razorpay logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://sp.nl"><img src="organisations/socialist-party.svg" alt="Socialist Party logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://www.stone.co"><img src="organisations/stone.svg" alt="Stone Payments logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://www.strixengine.com"><img src="organisations/strixcloud.svg" alt="Strix Cloud logo" loading="lazy"><span>Strix Cloud</span></a> + <a target="_blank" rel="noopener" href="https://sucuri.net" style="background-color: rgb(93, 93, 93);"><img src="organisations/sucuri.png" alt="Sucuri logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://thunderdome.dev"><img src="organisations/thunderdome.svg" alt="Thunderdome logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://m.tokopedia.com"><img src="organisations/tokopedia.png" alt="Tokopedia logo" srcset="organisations/tokopedia.2x.png 2x, organisations/tokopedia.3x.png 3x" loading="lazy"></a> + <a target="_blank" rel="noopener" href="https://webdesq.net"><img src="organisations/webdesq.svg" alt="Webdesq logo" loading="lazy"></a> + <a target="_blank" rel="noopener" href="http://healthtree.org/"><img src="organisations/healthtree.png" alt="HealthTree logo" loading="lazy"></a> <a target="_blank" rel="noopener" href="https://github.com/sveltejs/svelte/blob/master/site/src/routes/_components/WhosUsingSvelte.svelte" class="add-yourself"><span>+ your company?</span></a> </div> diff --git a/site/src/routes/_error.svelte b/site/src/routes/_error.svelte index 0071e3cea7..c23805166b 100644 --- a/site/src/routes/_error.svelte +++ b/site/src/routes/_error.svelte @@ -7,7 +7,7 @@ // we don't want to use <svelte:window bind:online> here, // because we only care about the online state when // the page first loads - let online = typeof navigator !== 'undefined' + const online = typeof navigator !== 'undefined' ? navigator.onLine : true; </script> @@ -61,7 +61,7 @@ <p>Please try reloading the page.</p> {/if} - <p>If the error persists, please drop by <a href="https://discord.gg/yy75DKs">Discord chatroom</a> and let us know, or raise an issue on <a href="https://github.com/sveltejs/svelte">GitHub</a>. Thanks!</p> + <p>If the error persists, please drop by <a href="chat">Discord chatroom</a> and let us know, or raise an issue on <a href="https://github.com/sveltejs/svelte">GitHub</a>. Thanks!</p> {/if} {:else} <h1>It looks like you're offline</h1> diff --git a/site/src/routes/_layout.svelte b/site/src/routes/_layout.svelte index bc557fb4da..4adbb9b0dc 100644 --- a/site/src/routes/_layout.svelte +++ b/site/src/routes/_layout.svelte @@ -21,10 +21,11 @@ <NavItem segment="examples">Examples</NavItem> <NavItem segment="repl">REPL</NavItem> <NavItem segment="blog">Blog</NavItem> + <NavItem segment="faq">FAQ</NavItem> <NavItem external="https://sapper.svelte.dev">Sapper</NavItem> - <NavItem external="https://discord.gg/yy75DKs" title="Discord Chat"> + <NavItem external="chat" title="Discord Chat"> <Icon name="message-square"/> </NavItem> @@ -46,4 +47,4 @@ padding: var(--nav-h) 0 0 0; overflow-x: hidden; } -</style> \ No newline at end of file +</style> diff --git a/site/src/routes/chat.js b/site/src/routes/chat.js new file mode 100644 index 0000000000..2fdeda2675 --- /dev/null +++ b/site/src/routes/chat.js @@ -0,0 +1,4 @@ +export function get(req, res) { + res.writeHead(302, { Location: 'https://discord.gg/yy75DKs' }); + res.end(); +} \ No newline at end of file diff --git a/site/src/routes/docs/_GuideContents.svelte b/site/src/routes/docs/_GuideContents.svelte deleted file mode 100644 index f5407164e4..0000000000 --- a/site/src/routes/docs/_GuideContents.svelte +++ /dev/null @@ -1,140 +0,0 @@ -<script> - import { onMount, afterUpdate } from 'svelte'; - import Icon from '../../components/Icon.svelte'; - - export let sections = []; - export let active_section = null; - export let show_contents; - export let prevent_sidebar_scroll = false; - - let ul; - - afterUpdate(() => { - // bit of a hack — prevent sidebar scrolling if - // TOC is open on mobile, or scroll came from within sidebar - if (prevent_sidebar_scroll || show_contents && window.innerWidth < 832) return; - - const active = ul.querySelector('.active'); - - if (active) { - const { top, bottom } = active.getBoundingClientRect(); - - const min = 200; - const max = window.innerHeight - 200; - - if (top > max) { - ul.parentNode.scrollBy({ - top: top - max, - left: 0, - behavior: 'smooth' - }); - } else if (bottom < min) { - ul.parentNode.scrollBy({ - top: bottom - min, - left: 0, - behavior: 'smooth' - }); - } - } - }); -</script> - -<style> - .reference-toc li { - display: block; - line-height: 1.2; - margin: 0 0 4rem 0; - } - - a { - position: relative; - transition: color 0.2s; - border-bottom: none; - padding: 0; - color: var(--second); - } - - .section { - display: block; - padding: 0 0 .8rem 0; - font-size: var(--h6); - text-transform: uppercase; - letter-spacing: 0.1em; - font-weight: 600; - } - - .subsection { - display: block; - font-size: 1.6rem; - font-family: var(--font); - padding: 0 0 0.6em 0; - } - - .section:hover, - .subsection:hover, - .active { - color: var(--flash); - } - - .subsection[data-level="4"] { - padding-left: 1.2rem; - } - - .icon-container { - position: absolute; - top: -.2rem; - right: 2.4rem; - } - - @media (min-width: 832px) { - a { - color: var(--sidebar-text); - } - - a:hover, - .section:hover, - .subsection:hover, - .active { - color: white - } - } -</style> - -<ul - bind:this={ul} - class="reference-toc" - on:mouseenter="{() => prevent_sidebar_scroll = true}" - on:mouseleave="{() => prevent_sidebar_scroll = false}" -> - {#each sections as section} - <li> - <a class="section" class:active="{section.slug === active_section}" href="docs#{section.slug}"> - {section.metadata.title} - - {#if section.slug === active_section} - <div class="icon-container"> - <Icon name="arrow-right" /> - </div> - {/if} - </a> - - {#each section.subsections as subsection} - <!-- see <script> below: on:click='scrollTo(event, subsection.slug)' --> - <a - class="subsection" - class:active="{subsection.slug === active_section}" - href="docs#{subsection.slug}" - data-level="{subsection.level}" - > - {subsection.title} - - {#if subsection.slug === active_section} - <div class="icon-container"> - <Icon name="arrow-right" /> - </div> - {/if} - </a> - {/each} - </li> - {/each} -</ul> diff --git a/site/src/routes/docs/_sections.js b/site/src/routes/docs/_sections.js index 8f0dc804b9..b6da2315f0 100644 --- a/site/src/routes/docs/_sections.js +++ b/site/src/routes/docs/_sections.js @@ -38,7 +38,7 @@ const blockTypes = [ ]; export default function() { - const makeSlug = make_session_slug_processor({ + const make_slug = make_session_slug_processor({ preserve_unicode: SLUG_PRESERVE_UNICODE, separator: SLUG_SEPARATOR }); @@ -51,7 +51,7 @@ export default function() { const { content, metadata } = extract_frontmatter(markdown); - const sectionSlug = makeSlug(metadata.title); + const section_slug = make_slug(metadata.title); const subsections = []; @@ -108,18 +108,24 @@ export default function() { }; renderer.heading = (text, level, rawtext) => { - const slug = makeSlug(rawtext); + let slug; + + const match = /<a href="([^"]+)">(.+)<\/a>/.exec(text); + if (match) { + slug = match[1]; + text = match[2]; + } else { + slug = make_slug(rawtext); + } if (level === 3 || level === 4) { - const title = unescape( - text - .replace(/<\/?code>/g, '') - .replace(/\.(\w+)(\((.+)?\))?/, (m, $1, $2, $3) => { - if ($3) return `.${$1}(...)`; - if ($2) return `.${$1}()`; - return `.${$1}`; - }) - ); + const title = text + .replace(/<\/?code>/g, '') + .replace(/\.(\w+)(\((.+)?\))?/, (m, $1, $2, $3) => { + if ($3) return `.${$1}(...)`; + if ($2) return `.${$1}()`; + return `.${$1}`; + }); subsections.push({ slug, title, level }); } @@ -147,7 +153,7 @@ export default function() { html: html.replace(/@@(\d+)/g, (m, id) => hashes[id] || m), metadata, subsections, - slug: sectionSlug, + slug: section_slug, file, }; }); diff --git a/site/src/routes/docs/index.svelte b/site/src/routes/docs/index.svelte index d60347994e..7f6fad92d3 100644 --- a/site/src/routes/docs/index.svelte +++ b/site/src/routes/docs/index.svelte @@ -6,7 +6,7 @@ </script> <script> - import { Docs } from '@sveltejs/site-kit' + import { Docs } from '@sveltejs/site-kit'; export let sections; </script> diff --git a/site/src/routes/examples/index.svelte b/site/src/routes/examples/index.svelte index abeebb0696..9fd783f950 100644 --- a/site/src/routes/examples/index.svelte +++ b/site/src/routes/examples/index.svelte @@ -37,7 +37,11 @@ let offset = 1; let repl; let isLoading = false; - let cache = {}; + const cache = {}; + + function showExampleCodeOnChange() { + offset = 1; + } $: title = title_by_slug[active_slug] || ''; $: first_slug = sections[0].examples[0].slug; @@ -46,25 +50,25 @@ $: if (repl && active_slug) { if (active_slug in cache) { repl.set({ components: cache[active_slug] }); - offset = 1; + showExampleCodeOnChange(); } else { isLoading = true; fetch(`examples/${active_slug}.json`) - .then(async response => { - if (response.ok) { - const {files} = await response.json(); - return process_example(files); - } - }) - .then(components => { - cache[active_slug] = components; - repl.set({components}); - offset = 1; - isLoading = false; - }) - .catch(function(error) { - isLoading = false; - }); + .then(async response => { + if (response.ok) { + const {files} = await response.json(); + return process_example(files); + } + }) + .then(components => { + cache[active_slug] = components; + repl.set({components}); + showExampleCodeOnChange(); + isLoading = false; + }) + .catch(() => { + isLoading = false; + }); } } @@ -102,6 +106,7 @@ <div class="repl-container" class:loading={isLoading}> <Repl bind:this={repl} + workersUrl="workers" {svelteUrl} {rollupUrl} orientation={replOrientation} diff --git a/site/src/routes/faq.js b/site/src/routes/faq.js new file mode 100644 index 0000000000..6263494a4c --- /dev/null +++ b/site/src/routes/faq.js @@ -0,0 +1,4 @@ +export function get(req, res) { + res.writeHead(302, { Location: 'https://github.com/sveltejs/svelte/wiki/FAQ' }); + res.end(); +} \ No newline at end of file diff --git a/site/src/routes/index.svelte b/site/src/routes/index.svelte index b076fe3a0d..cbbdf43e95 100644 --- a/site/src/routes/index.svelte +++ b/site/src/routes/index.svelte @@ -13,7 +13,7 @@ </script> <style> - /* darken text for accesibility */ + /* darken text for accessibility */ /* TODO does this belong elsewhere? */ :global(.back-light) { --text: hsl(36, 3%, 44%); @@ -89,7 +89,7 @@ npx degit sveltejs/template my-svelte-project cd my-svelte-project npm install -npm run dev & open http://localhost:5000 +npm run dev </pre> <p style="flex: 1">See the <a href="blog/the-easiest-way-to-get-started">quickstart guide</a> for more information.</p> diff --git a/site/src/routes/repl/[id]/_components/AppControls/index.svelte b/site/src/routes/repl/[id]/_components/AppControls/index.svelte index 21b06464f2..7770972474 100644 --- a/site/src/routes/repl/[id]/_components/AppControls/index.svelte +++ b/site/src/routes/repl/[id]/_components/AppControls/index.svelte @@ -107,7 +107,6 @@ try { // Send all files back to API // ~> Any missing files are considered deleted! - const files = {}; const { components } = repl.toJSON(); const r = await fetch(`repl/${gist.uid}.json`, { @@ -127,7 +126,7 @@ throw new Error(`Received an HTTP ${r.status} response: ${error}`); } - const result = await r.json(); + await r.json(); justSaved = true; await wait(600); @@ -155,7 +154,7 @@ const pkg = JSON.parse(files[idx].data); const deps = {}; imports.forEach(mod => { - const match = /^(@[^\/]+\/)?[^@\/]+/.exec(mod); + const match = /^(@[^/]+\/)?[^@/]+/.exec(mod); deps[match[0]] = 'latest'; }); pkg.dependencies = deps; diff --git a/site/src/routes/repl/[id]/index.json.js b/site/src/routes/repl/[id]/index.json.js index 78a2e4393d..e5ac7dc584 100644 --- a/site/src/routes/repl/[id]/index.json.js +++ b/site/src/routes/repl/[id]/index.json.js @@ -1,5 +1,4 @@ import send from '@polka/send'; -import redirect from '@polka/redirect'; import body from '../_utils/body.js'; import * as httpie from 'httpie'; import { query, find } from '../../../utils/db'; diff --git a/site/src/routes/repl/[id]/index.svelte b/site/src/routes/repl/[id]/index.svelte index 17259cbc7d..f2a3c02173 100644 --- a/site/src/routes/repl/[id]/index.svelte +++ b/site/src/routes/repl/[id]/index.svelte @@ -11,7 +11,6 @@ import Repl from '@sveltejs/svelte-repl'; import { onMount } from 'svelte'; import { goto } from '@sapper/app'; - import { process_example } from '../../../utils/examples'; import { user } from '../../../user.js'; import InputOutputToggle from '../../../components/Repl/InputOutputToggle.svelte'; import AppControls from './_components/AppControls/index.svelte'; @@ -56,7 +55,6 @@ is_relaxed_gist = data.relaxed; - const rgx = /(js|svelte)$/i; const components = data.files.map(file => { let [name, type] = file.name.split('.'); if (type === 'html') type = 'svelte'; // TODO do this on the server @@ -75,7 +73,7 @@ repl.set({ components }); }); } else { - console.warn('TODO: 404 Gist') + console.warn('TODO: 404 Gist'); } }); } @@ -208,6 +206,7 @@ <div class="viewport" class:offset={checked}> <Repl bind:this={repl} + workersUrl="workers" {svelteUrl} {rollupUrl} {relaxed} diff --git a/site/src/routes/repl/local/[file].js b/site/src/routes/repl/local/[...file].js similarity index 63% rename from site/src/routes/repl/local/[file].js rename to site/src/routes/repl/local/[...file].js index 20d9f509cb..7bd1c6a82c 100644 --- a/site/src/routes/repl/local/[file].js +++ b/site/src/routes/repl/local/[...file].js @@ -1,12 +1,13 @@ import { createReadStream } from 'fs'; export function get(req, res) { - if (process.env.NODE_ENV !== 'development' || !/^[a-z.]+$/.test(req.params.file)) { + const path = req.params.file.join('/'); + if (process.env.NODE_ENV !== 'development' || ('/' + path).includes('/.')) { res.writeHead(403); res.end(); return; } - createReadStream('../' + req.params.file) + createReadStream('../' + path) .on('error', () => { res.writeHead(403); res.end(); diff --git a/site/src/routes/tutorial/[slug]/index.svelte b/site/src/routes/tutorial/[slug]/index.svelte index 34c9d38f79..20cc34ab6b 100644 --- a/site/src/routes/tutorial/[slug]/index.svelte +++ b/site/src/routes/tutorial/[slug]/index.svelte @@ -220,7 +220,7 @@ .show { background: rgba(0,0,0,.4); - padding: .2em .7em .3em; + padding: .3em .7em; border-radius: var(--border-r); top: .1em; position: relative; @@ -302,6 +302,7 @@ <div class="tutorial-repl"> <Repl bind:this={repl} + workersUrl="workers" {svelteUrl} {rollupUrl} orientation={mobile ? 'columns' : 'rows'} diff --git a/site/src/routes/tutorial/random-number.js b/site/src/routes/tutorial/random-number.js index f864dff946..818a38fe6a 100644 --- a/site/src/routes/tutorial/random-number.js +++ b/site/src/routes/tutorial/random-number.js @@ -9,7 +9,7 @@ export function get(req, res) { setTimeout(() => { // fail sometimes if (Math.random() < 0.333) { - res.statusCode = 500; + res.statusCode = 400; res.end(`Failed to generate random number. Please try again`); return; } diff --git a/site/src/server.js b/site/src/server.js index 45f3e16dae..2adf3c5ad1 100644 --- a/site/src/server.js +++ b/site/src/server.js @@ -2,11 +2,12 @@ import sirv from 'sirv'; import * as sapper from '@sapper/server'; import { API } from './backend/auth'; -const { PORT=3000 } = process.env; +const { PORT = 3000 } = process.env; API() .use( sirv('static', { + dev: process.env.NODE_ENV === 'development', setHeaders(res) { res.setHeader('Access-Control-Allow-Origin', '*'); res.hasHeader('Cache-Control') || res.setHeader('Cache-Control', 'max-age=600'); // 10min default diff --git a/site/src/service-worker.js b/site/src/service-worker.js index 172fd8cf35..f7a76df99a 100644 --- a/site/src/service-worker.js +++ b/site/src/service-worker.js @@ -1,4 +1,4 @@ -import { timestamp, files, shell, routes } from '@sapper/service-worker'; +import { timestamp, files, shell } from '@sapper/service-worker'; const ASSETS = `cache${timestamp}`; diff --git a/site/src/utils/slug.js b/site/src/utils/slug.js index d99bc50ecb..05ec5512ca 100644 --- a/site/src/utils/slug.js +++ b/site/src/utils/slug.js @@ -13,8 +13,8 @@ export const urlsafeSlugProcessor = string => decamelize: false, lowercase: false }) - .replace(/DOLLAR/g, '$') - .replace(/DASH/g, '-'); + .replace(/DOLLAR/g, '$') + .replace(/DASH/g, '-'); /* unicode-preserver processor */ @@ -25,35 +25,35 @@ const isNonAlphaNumUnicode = export const unicodeSafeProcessor = string => string.split('') - .reduce((accum, char, index, array) => { - const type = isNonAlphaNumUnicode(char) ? 'pass' : 'process'; - - if (index === 0) { - accum.current = {type, string: char}; - } else if (type === accum.current.type) { - accum.current.string += char; - } else { - accum.chunks.push(accum.current); - accum.current = {type, string: char} - } - - if (index === array.length - 1) { - accum.chunks.push(accum.current); - } - - return accum; - }, {chunks: [], current: {type: '', string: ''}}) - .chunks - .reduce((accum, chunk) => { - const processed = chunk.type === 'process' - ? urlsafeSlugProcessor(chunk.string) - : chunk.string; - - processed.length > 0 && accum.push(processed); - - return accum; - }, []) - .join(SLUG_SEPARATOR); + .reduce((accum, char, index, array) => { + const type = isNonAlphaNumUnicode(char) ? 'pass' : 'process'; + + if (index === 0) { + accum.current = {type, string: char}; + } else if (type === accum.current.type) { + accum.current.string += char; + } else { + accum.chunks.push(accum.current); + accum.current = {type, string: char}; + } + + if (index === array.length - 1) { + accum.chunks.push(accum.current); + } + + return accum; + }, {chunks: [], current: {type: '', string: ''}}) + .chunks + .reduce((accum, chunk) => { + const processed = chunk.type === 'process' + ? urlsafeSlugProcessor(chunk.string) + : chunk.string; + + processed.length > 0 && accum.push(processed); + + return accum; + }, []) + .join(SLUG_SEPARATOR); /* processor */ @@ -74,5 +74,5 @@ export const makeSessionSlugProcessor = (preserveUnicode = false) => { seen.add(slug); return slug; - } -} + }; +}; diff --git a/site/static/examples/thumbnails/easing.jpg b/site/static/examples/thumbnails/easing.jpg new file mode 100644 index 0000000000..11c4871c2a Binary files /dev/null and b/site/static/examples/thumbnails/easing.jpg differ diff --git a/site/static/global.css b/site/static/global.css index 6c84f1abee..14e4e0a0c0 100644 --- a/site/static/global.css +++ b/site/static/global.css @@ -79,6 +79,7 @@ body { font-family: 'Overpass'; font-style: normal; font-weight: 300; + font-display: fallback; src: local('Overpass Light '), local('Overpass-Light'), @@ -90,6 +91,7 @@ body { font-family: 'Overpass'; font-style: normal; font-weight: 600; + font-display: fallback; src: local('Overpass Bold '), local('Overpass-Bold'), @@ -101,6 +103,7 @@ body { font-family: 'Fira Mono'; font-style: normal; font-weight: 400; + font-display: fallback; src: local('Fira Mono Regular '), local('Fira Mono-Regular'), diff --git a/site/static/organisations/comigo.svg b/site/static/organisations/comigo.svg new file mode 100644 index 0000000000..44622a5195 --- /dev/null +++ b/site/static/organisations/comigo.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 102.292 25" xmlns="http://www.w3.org/2000/svg"><g fill="#00c6fb"><path d="m4.417 17.624a7.686 7.686 0 0 1 -3.282-3.224 10.388 10.388 0 0 1 -1.135-5 10.464 10.464 0 0 1 1.135-5.015 7.765 7.765 0 0 1 3.265-3.254 10.574 10.574 0 0 1 5.033-1.131 11.666 11.666 0 0 1 4.443.833 6.686 6.686 0 0 1 3.024 2.211 1.423 1.423 0 0 1 .312.859 1.467 1.467 0 0 1 -.7 1.172 1.25 1.25 0 0 1 -.775.235 1.913 1.913 0 0 1 -.775-.17 1.716 1.716 0 0 1 -.646-.481 5.181 5.181 0 0 0 -2.044-1.474 7.835 7.835 0 0 0 -2.841-.455 5.6 5.6 0 0 0 -4.394 1.759 7.094 7.094 0 0 0 -1.576 4.911 6.966 6.966 0 0 0 1.59 4.869 5.7 5.7 0 0 0 4.431 1.741 7.044 7.044 0 0 0 5.195-1.926 2.267 2.267 0 0 1 1.472-.755 1.329 1.329 0 0 1 .854.312 1.512 1.512 0 0 1 .594 1.145 1.493 1.493 0 0 1 -.336.912 7.233 7.233 0 0 1 -3.166 2.24 12.536 12.536 0 0 1 -4.613.807 10.8 10.8 0 0 1 -5.066-1.12z" transform="translate(.006 .005)"/><path d="m34.231 21.208a6.43 6.43 0 0 1 -2.731-2.331 6.249 6.249 0 0 1 -.982-3.489 6.258 6.258 0 0 1 .985-3.489 6.44 6.44 0 0 1 2.726-2.329 10.127 10.127 0 0 1 7.986 0 6.436 6.436 0 0 1 2.727 2.33 6.252 6.252 0 0 1 .982 3.489 6.249 6.249 0 0 1 -.982 3.489 6.428 6.428 0 0 1 -2.726 2.331 10.133 10.133 0 0 1 -7.985 0zm7.133-2.929a3.7 3.7 0 0 0 1.15-2.891 3.7 3.7 0 0 0 -1.15-2.89 4.5 4.5 0 0 0 -3.14-1.041 4.5 4.5 0 0 0 -3.14 1.043 3.7 3.7 0 0 0 -1.15 2.89 3.7 3.7 0 0 0 1.15 2.891 4.5 4.5 0 0 0 3.139 1.041 4.5 4.5 0 0 0 3.14-1.044z" transform="translate(-11.447 -3.278)"/><path d="m58.384 21.61a1.5 1.5 0 0 1 -.437-1.146v-10.154a1.5 1.5 0 0 1 .437-1.145 1.732 1.732 0 0 1 1.24-.417 1.79 1.79 0 0 1 1.24.417 1.458 1.458 0 0 1 .465 1.145v.625a4.518 4.518 0 0 1 1.5-1.615 3.608 3.608 0 0 1 1.965-.572 3.462 3.462 0 0 1 1.964.586 3.594 3.594 0 0 1 1.318 1.6 5.355 5.355 0 0 1 4.16-2.187 3.9 3.9 0 0 1 3.23 1.458 6.361 6.361 0 0 1 1.163 4.062v6.2a1.458 1.458 0 0 1 -.466 1.146 1.79 1.79 0 0 1 -1.24.416 1.732 1.732 0 0 1 -1.24-.416 1.5 1.5 0 0 1 -.437-1.146v-6.4a3.449 3.449 0 0 0 -.452-1.937 1.508 1.508 0 0 0 -1.33-.664 2.172 2.172 0 0 0 -1.318.416 3.916 3.916 0 0 0 -1.06 1.318v7.261a1.46 1.46 0 0 1 -.466 1.146 1.791 1.791 0 0 1 -1.243.416 1.733 1.733 0 0 1 -1.241-.416 1.5 1.5 0 0 1 -.437-1.146v-5.856q0-3.151-1.783-3.15a2.2 2.2 0 0 0 -1.9.963 4.515 4.515 0 0 0 -.687 2.656v5.389a1.458 1.458 0 0 1 -.465 1.146 1.79 1.79 0 0 1 -1.24.416 1.732 1.732 0 0 1 -1.24-.416z" transform="translate(-21.734 -3.277)"/><path d="m92.026 3.318a1.8 1.8 0 0 1 -.581-1.392 1.8 1.8 0 0 1 .581-1.394 2.187 2.187 0 0 1 1.538-.532 2.284 2.284 0 0 1 1.562.534 1.767 1.767 0 0 1 .607 1.393 1.763 1.763 0 0 1 -.607 1.392 2.281 2.281 0 0 1 -1.562.534 2.183 2.183 0 0 1 -1.538-.534zm.323 15.01a1.5 1.5 0 0 1 -.437-1.146v-10.154a1.5 1.5 0 0 1 .437-1.145 1.733 1.733 0 0 1 1.24-.417 1.791 1.791 0 0 1 1.24.417 1.461 1.461 0 0 1 .471 1.145v10.154a1.46 1.46 0 0 1 -.466 1.146 1.791 1.791 0 0 1 -1.24.416 1.733 1.733 0 0 1 -1.24-.416z" transform="translate(-34.303 .005)"/><path d="m105.688 27.678a6.424 6.424 0 0 1 -2.649-1.64 1.268 1.268 0 0 1 -.362-.885 1.51 1.51 0 0 1 .62-1.172 1.3 1.3 0 0 1 .827-.312 2.364 2.364 0 0 1 1.5.755 4.374 4.374 0 0 0 1.562.9 6.163 6.163 0 0 0 2.029.326 4.007 4.007 0 0 0 3.124-1.223 4.679 4.679 0 0 0 1.062-3.384l-.023-1.043a5.411 5.411 0 0 1 -2.054 1.537 7.456 7.456 0 0 1 -2.882.494 6.765 6.765 0 0 1 -4.962-1.757 6.553 6.553 0 0 1 -1.786-4.882 6.464 6.464 0 0 1 1.821-4.881 7.016 7.016 0 0 1 5.079-1.758 6.344 6.344 0 0 1 2.584.547 7.206 7.206 0 0 1 2.223 1.537v-.521a1.46 1.46 0 0 1 .464-1.145 2.062 2.062 0 0 1 2.468-.013 1.473 1.473 0 0 1 .452 1.158v10.723a7.663 7.663 0 0 1 -.892 3.723 6.436 6.436 0 0 1 -2.559 2.578 7.909 7.909 0 0 1 -3.94.937 11.035 11.035 0 0 1 -3.707-.6zm6.577-9.4a3.722 3.722 0 0 0 1.138-2.891 3.721 3.721 0 0 0 -1.138-2.89 4.493 4.493 0 0 0 -3.152-1.041 4.023 4.023 0 0 0 -2.947 1.041 3.866 3.866 0 0 0 -1.059 2.89 3.868 3.868 0 0 0 1.059 2.891 4.025 4.025 0 0 0 2.947 1.041 4.5 4.5 0 0 0 3.152-1.041z" transform="translate(-38.143 -3.279)"/><path d="m132.955 21.209a6.43 6.43 0 0 1 -2.726-2.331 6.249 6.249 0 0 1 -.982-3.489 6.257 6.257 0 0 1 .982-3.489 6.44 6.44 0 0 1 2.726-2.329 10.127 10.127 0 0 1 7.986 0 6.436 6.436 0 0 1 2.726 2.329 6.257 6.257 0 0 1 .982 3.489 6.249 6.249 0 0 1 -.982 3.489 6.429 6.429 0 0 1 -2.726 2.331 10.134 10.134 0 0 1 -7.986 0zm7.134-2.929a3.7 3.7 0 0 0 1.15-2.891 3.7 3.7 0 0 0 -1.15-2.889 5.255 5.255 0 0 0 -6.279 0 3.7 3.7 0 0 0 -1.15 2.89 3.7 3.7 0 0 0 1.148 2.89 5.255 5.255 0 0 0 6.281 0z" transform="translate(-48.482 -3.279)"/><path d="m157.635 26.619a1.847 1.847 0 0 1 -.594-1.38 1.949 1.949 0 0 1 .594-1.445 2.048 2.048 0 0 1 1.5-.586 2.016 2.016 0 0 1 2.067 2.031 1.865 1.865 0 0 1 -.581 1.38 2.028 2.028 0 0 1 -1.486.572 2.073 2.073 0 0 1 -1.5-.572z" transform="translate(-58.91 -8.703)"/></g></svg> \ No newline at end of file diff --git a/site/static/organisations/datawrapper.svg b/site/static/organisations/datawrapper.svg index b623876e01..f614df0eee 100644 --- a/site/static/organisations/datawrapper.svg +++ b/site/static/organisations/datawrapper.svg @@ -1 +1 @@ -<svg viewBox="2.800018310546875 3.7000045776367188 320.4000244140625 89.69999694824219" xmlns="http://www.w3.org/2000/svg"><path d="m33.2 64v-35.5h9.9c2.9 0 5.5.7 7.8 2s4.1 3.2 5.4 5.7 1.9 5.3 1.9 8.4v3.3c0 3.2-.6 6-1.9 8.4-1.3 2.5-3.1 4.4-5.4 5.7s-5 2-8 2zm3-33v30.5h6.8c3.7 0 6.7-1.2 9-3.7s3.4-5.8 3.4-10.1v-3.1c0-4.1-1.1-7.4-3.3-9.8-2.2-2.5-5.2-3.7-8.8-3.7h-7.1z"/><path d="m81 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.5 1.4 4.3 1.4z"/><path d="m94.6 30.9v6.8h5.5v2.3h-5.5v17.6c0 1.5.3 2.6.8 3.3s1.4 1.1 2.6 1.1c.5 0 1.3-.1 2.4-.2l.1 2.4c-.8.3-1.8.4-3.1.4-2 0-3.5-.6-4.4-1.7-.9-1.2-1.4-2.9-1.4-5.1v-17.8h-4.9v-2.4h4.9v-6.8h3z"/><path d="m121.8 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.6 1.4 4.3 1.4z"/><path d="m137.2 58 .4 2.3.6-2.4 6.3-20.2h2.5l6.3 20 .7 2.8.6-2.6 5.4-20.3h3l-7.6 26.4h-2.5l-6.8-20.9-.3-1.4-.3 1.5-6.7 20.8h-2.5l-7.7-26.4h3z"/><path d="m179.8 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m199.1 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7 1.2.9 2.6 1.4 4.3 1.4z"/><path d="m229.5 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m256.2 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m271.9 64.5c-2.2 0-4.3-.6-6.1-1.7s-3.2-2.6-4.2-4.6-1.5-4.2-1.5-6.7v-1c0-2.5.5-4.8 1.5-6.9 1-2 2.4-3.6 4.1-4.8s3.7-1.7 5.7-1.7c3.2 0 5.7 1.1 7.6 3.3s2.8 5.2 2.8 9v1.6h-18.8v.6c0 3 .9 5.5 2.6 7.5s3.9 3 6.5 3c1.6 0 2.9-.3 4.1-.9s2.3-1.5 3.3-2.7l1.8 1.4c-2.2 3.1-5.3 4.6-9.4 4.6zm-.6-24.9c-2.2 0-4 .8-5.6 2.4-1.5 1.6-2.4 3.8-2.7 6.5h15.8v-.3c-.1-2.5-.8-4.6-2.2-6.2-1.3-1.6-3-2.4-5.3-2.4z"/><path d="m298.7 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m323.2 93.4h-320.4v-89.7h2.7v87h317.7z"/></svg> \ No newline at end of file +<svg viewBox="2.80001831 3.70000458 320.40002441 89.69999695" xmlns="http://www.w3.org/2000/svg"><path d="m33.2 64v-35.5h9.9c2.9 0 5.5.7 7.8 2s4.1 3.2 5.4 5.7 1.9 5.3 1.9 8.4v3.3c0 3.2-.6 6-1.9 8.4-1.3 2.5-3.1 4.4-5.4 5.7s-5 2-8 2zm3-33v30.5h6.8c3.7 0 6.7-1.2 9-3.7s3.4-5.8 3.4-10.1v-3.1c0-4.1-1.1-7.4-3.3-9.8-2.2-2.5-5.2-3.7-8.8-3.7h-7.1z"/><path d="m81 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.5 1.4 4.3 1.4z"/><path d="m94.6 30.9v6.8h5.5v2.3h-5.5v17.6c0 1.5.3 2.6.8 3.3s1.4 1.1 2.6 1.1c.5 0 1.3-.1 2.4-.2l.1 2.4c-.8.3-1.8.4-3.1.4-2 0-3.5-.6-4.4-1.7-.9-1.2-1.4-2.9-1.4-5.1v-17.8h-4.9v-2.4h4.9v-6.8h3z"/><path d="m121.8 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7s2.6 1.4 4.3 1.4z"/><path d="m137.2 58 .4 2.3.6-2.4 6.3-20.2h2.5l6.3 20 .7 2.8.6-2.6 5.4-20.3h3l-7.6 26.4h-2.5l-6.8-20.9-.3-1.4-.3 1.5-6.7 20.8h-2.5l-7.7-26.4h3z"/><path d="m179.8 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m199.1 64c-.3-.8-.5-2.1-.6-3.7-1 1.3-2.3 2.4-3.9 3.1s-3.3 1.1-5 1.1c-2.5 0-4.6-.7-6.2-2.1s-2.4-3.2-2.4-5.4c0-2.6 1.1-4.6 3.2-6.1s5.1-2.2 8.9-2.2h5.3v-3c0-1.9-.6-3.4-1.7-4.5-1.2-1.1-2.9-1.6-5.1-1.6-2 0-3.7.5-5.1 1.6-1.3 1-2 2.3-2 3.8h-2.9c0-2.1 1-3.9 2.9-5.5s4.4-2.3 7.2-2.3c2.9 0 5.3.7 7 2.2s2.6 3.5 2.6 6.2v12.4c0 2.6.3 4.5.8 5.7v.3zm-9.2-2.1c2 0 3.7-.5 5.2-1.4s2.7-2.2 3.4-3.8v-5.8h-5.2c-2.9 0-5.2.6-6.8 1.6s-2.5 2.5-2.5 4.3c0 1.5.5 2.7 1.6 3.7 1.2.9 2.6 1.4 4.3 1.4z"/><path d="m229.5 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m256.2 51.1c0 4.1-.9 7.4-2.7 9.8s-4.3 3.6-7.3 3.6c-3.6 0-6.4-1.3-8.3-3.8v13.5h-2.9v-36.6h2.7l.1 3.7c1.9-2.8 4.7-4.2 8.3-4.2 3.2 0 5.6 1.2 7.4 3.6s2.7 5.7 2.7 10zm-3-.5c0-3.4-.7-6-2.1-8s-3.3-2.9-5.8-2.9c-1.8 0-3.3.4-4.6 1.3s-2.3 2.1-3 3.8v12.7c.7 1.5 1.7 2.7 3 3.5s2.8 1.2 4.6 1.2c2.5 0 4.4-1 5.8-2.9 1.5-2.2 2.1-5 2.1-8.7z"/><path d="m271.9 64.5c-2.2 0-4.3-.6-6.1-1.7s-3.2-2.6-4.2-4.6-1.5-4.2-1.5-6.7v-1c0-2.5.5-4.8 1.5-6.9 1-2 2.4-3.6 4.1-4.8s3.7-1.7 5.7-1.7c3.2 0 5.7 1.1 7.6 3.3s2.8 5.2 2.8 9v1.6h-18.8v.6c0 3 .9 5.5 2.6 7.5s3.9 3 6.5 3c1.6 0 2.9-.3 4.1-.9s2.3-1.5 3.3-2.7l1.8 1.4c-2.2 3.1-5.3 4.6-9.4 4.6zm-.6-24.9c-2.2 0-4 .8-5.6 2.4-1.5 1.6-2.4 3.8-2.7 6.5h15.8v-.3c-.1-2.5-.8-4.6-2.2-6.2-1.3-1.6-3-2.4-5.3-2.4z"/><path d="m298.7 40.1c-.6-.1-1.3-.2-2-.2-1.8 0-3.4.5-4.6 1.5-1.3 1-2.2 2.5-2.7 4.4v18.2h-2.9v-26.4h2.9v4.2c1.5-3.1 4-4.7 7.4-4.7.8 0 1.5.1 1.9.3z"/><path d="m323.2 93.4h-320.4v-89.7h2.7v87h317.7z"/></svg> \ No newline at end of file diff --git a/site/static/organisations/dbnomics.jpg b/site/static/organisations/dbnomics.jpg new file mode 100644 index 0000000000..3d5991f869 Binary files /dev/null and b/site/static/organisations/dbnomics.jpg differ diff --git a/site/static/organisations/dbnomics.png b/site/static/organisations/dbnomics.png deleted file mode 100644 index 27c59f5e17..0000000000 Binary files a/site/static/organisations/dbnomics.png and /dev/null differ diff --git a/site/static/organisations/dbnomics.webp b/site/static/organisations/dbnomics.webp new file mode 100644 index 0000000000..14f3431bba Binary files /dev/null and b/site/static/organisations/dbnomics.webp differ diff --git a/site/static/organisations/deck.svg b/site/static/organisations/deck.svg new file mode 100644 index 0000000000..21291ddfe9 --- /dev/null +++ b/site/static/organisations/deck.svg @@ -0,0 +1 @@ +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1" viewBox="0 0 1909 925" xmlns="http://www.w3.org/2000/svg"><path d="m1675 494 168-182h-197l-123 137v-345h-177v413l-106 102c-5 6-38 27-45 31-8 5-17 9-27 13-11 3-23 4-36 4s-25-2-36-8c-11-5-21-12-29-22-9-9-15-21-21-34-5-14-7-29-7-45 0-33 9-59 28-79 19-19 40-28 65-28 28 0 49 5 63 15 14 11 25 21 32 30l104-119c-21-24-48-44-81-59s-74-23-123-23a273 273 0 0 0 -190 76c-11 10-21 22-29 35a228 228 0 0 1 21 47l7 20c8 31 12 66 12 105v34h-333c1 8 3 17 7 26 3 9 10 18 20 26 9 8 22 14 37 19a276 276 0 0 0 197-27l5 11c6 15 14 29 22 43l4 5a254 254 0 0 0 115 89 324 324 0 0 0 230-6c17-8 32-17 46-27l48-51v86h177v-152l35-37 109 189h203zm-889-14c-4-9-9-18-16-25-8-8-17-14-28-20-11-5-24-8-39-8a90 90 0 0 0 -66 28 81 81 0 0 0 -21 51h175c0-8-2-17-5-26m-374 99c0 28-6 50-19 65-13 16-32 23-58 23-30 0-51-9-66-27-14-17-21-41-21-71 0-40 10-69 30-89s45-29 77-29c20 0 39 3 57 9zm0-266a311 311 0 0 0 -77-12c-40 0-76 7-109 20a251 251 0 0 0 -138 138 339 339 0 0 0 2 225 195 195 0 0 0 193 135 180 180 0 0 0 136-63l9 50h162v-7c-27-11-51-26-71-45-48-46-72-110-72-193 0-33 5-65 16-97a239 239 0 0 1 127-145v-215h-178z" fill="#030404" fill-rule="nonzero"/></svg> \ No newline at end of file diff --git a/site/static/organisations/godaddy.svg b/site/static/organisations/godaddy.svg new file mode 100644 index 0000000000..e753ceed7b --- /dev/null +++ b/site/static/organisations/godaddy.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 418.42 116.61" xmlns="http://www.w3.org/2000/svg"><g fill="#232222"><path d="m160.07 79.19a7.75 7.75 0 1 0 -7.75 7.81 7.81 7.81 0 0 0 7.75-7.83m13.47.08c0 11.23-9.45 20.22-21.22 20.22s-21.22-9-21.22-20.22 9.45-20.45 21.22-20.45 21.22 9.2 21.22 20.47"/><path d="m215.8 71.06c0-7.59-5.26-14.18-13-14.18h-10.8v28.67h10.77c7.75 0 13-6.9 13-14.49m14.57 0c0 16.19-11.31 27.27-27.27 27.27h-23.07a1.92 1.92 0 0 1 -1.94-1.94v-50.39a1.91 1.91 0 0 1 1.94-1.9h23.1c16 0 27.27 10.77 27.27 27"/><path d="m252.91 87.09a7.9 7.9 0 1 0 -7.75-7.9 7.8 7.8 0 0 0 7.75 7.9m-2-28.27c4.57 0 8.21 1.71 9.84 4.11v-1.16a1.81 1.81 0 0 1 1.76-1.77h9.68a1.76 1.76 0 0 1 1.81 1.77v34.78a1.76 1.76 0 0 1 -1.79 1.78h-9.68a1.76 1.76 0 0 1 -1.78-1.78v-1.17c-1.63 2.4-5.34 4.11-9.92 4.11-9.75 0-19.13-7.82-19.13-20.45s9.45-20.22 19.21-20.22"/><path d="m297 87.09a7.9 7.9 0 1 0 -7.74-7.9 7.8 7.8 0 0 0 7.74 7.9m-2.32-28.27c4.72 0 8.36 1.78 10 3.87v-16.8a1.81 1.81 0 0 1 1.78-1.79h9.84a1.75 1.75 0 0 1 1.78 1.79v50.66a1.75 1.75 0 0 1 -1.78 1.78h-9.68a1.75 1.75 0 0 1 -1.78-1.78v-1.17c-1.94 2.4-5.35 4.11-9.92 4.11-9.76 0-19.13-7.82-19.13-20.45s9.29-20.22 18.9-20.22"/><path d="m341.06 87.09a7.9 7.9 0 1 0 -7.75-7.9 7.79 7.79 0 0 0 7.75 7.9m-2.33-28.27c4.73 0 8.37 1.78 10 3.87v-16.8a1.81 1.81 0 0 1 1.78-1.79h9.83a1.76 1.76 0 0 1 1.79 1.79v50.66a1.76 1.76 0 0 1 -1.79 1.78h-9.68a1.75 1.75 0 0 1 -1.78-1.78v-1.17c-1.94 2.4-5.34 4.11-9.91 4.11-9.76 0-19.14-7.82-19.14-20.45s9.3-20.22 18.9-20.22"/><path d="m394.51 103.9c-2.41 8.14-8.06 12.71-16.89 12.71a19.42 19.42 0 0 1 -12.47-4.26 2.47 2.47 0 0 1 -.78-1.63 3.17 3.17 0 0 1 .62-1.63l3.64-5.57a2.05 2.05 0 0 1 1.55-.86 3 3 0 0 1 2 .78 8.34 8.34 0 0 0 4.49 1.7 4.12 4.12 0 0 0 4.18-2.94l1.24-3.87h-5.89a2.43 2.43 0 0 1 -2.32-1.86l-9.82-33.47a7 7 0 0 1 -.31-1.63c0-.78.54-1.4 1.63-1.4h11.62c1 0 1.63.93 1.86 1.86l6.43 24h.46l5.19-24c.23-.93.85-1.86 1.86-1.86h11.77c1.09 0 1.63.62 1.63 1.4a7 7 0 0 1 -.31 1.63z"/><path d="m117.31 90.81c-4.65 6.51-12.4 8.68-19.21 8.68-15.73 0-27.35-11.85-27.35-28.27 0-15.73 12.55-28.28 29-28.28 12.17 0 21.92 5.19 26.34 15.11.54 1.16.93 3-2.32 3.64l-8.6 1.55a3.37 3.37 0 0 1 -3.49-1.47 14.24 14.24 0 0 0 -11.68-5.89c-8.59 0-14.71 6.58-14.71 15.41 0 9.76 7 15.42 14.48 15.42 5 0 9.22-1.94 11.93-5.5h-7.59a1.92 1.92 0 0 1 -1.94-1.94v-7.27a1.92 1.92 0 0 1 1.94-1.94h23.19a1.93 1.93 0 0 1 1.94 1.94v24.4a1.92 1.92 0 0 1 -1.94 1.94h-8.06a1.91 1.91 0 0 1 -1.93-1.94z"/></g><path d="m28.87 9.94a3.75 3.75 0 0 1 0-.48c-.05-2.39 2.21-5 2.29-7.66v-.07a1.07 1.07 0 0 0 -.68-.92 2.86 2.86 0 0 0 -1.18-.21 3.62 3.62 0 0 0 -3 1.44c-1.11 2.34-2.89 4.79-2.91 7.33a4.42 4.42 0 0 0 .61 2.38c1 2.16 2.31 4.1 3.33 6.42a2.91 2.91 0 0 1 .26 1.15 3 3 0 0 1 -.86 2c-.17.23-1.29.18-1.86 1.11v.06.07.34a2.13 2.13 0 0 0 1.58 1.9 3.86 3.86 0 0 0 1.35.2 4.8 4.8 0 0 0 3.92-2.29 5.48 5.48 0 0 0 .79-2.83c0-3.6-3.26-6.76-3.64-10" fill="#ec7632"/><path d="m42 14.33a31.28 31.28 0 0 1 -3.13-5.07 4.76 4.76 0 0 1 -.69-2 2.91 2.91 0 0 1 1.16-2.18 2.53 2.53 0 0 0 .71-1.93 3.16 3.16 0 0 0 -1-2.43 3.44 3.44 0 0 0 -1.88-.72c-1.23 0-2 1-2.58 2.09a28.13 28.13 0 0 0 -1.46 4 5.67 5.67 0 0 0 -.26 1.65c.07 4.12 4.48 7.32 5.45 11.14a4.16 4.16 0 0 1 .16 1.12 8.6 8.6 0 0 1 -.69 2.87 2.43 2.43 0 0 0 -.17.85 2 2 0 0 0 2.14 1.91 2.24 2.24 0 0 0 1.6-.65c2.08-2.15 2.88-4 2.88-5.59 0-2.06-1.23-3.62-2.23-5" fill="#ec7632"/><path d="m5.74 14a5.66 5.66 0 0 1 -.48-2.51c0-1.24.22-2.58.22-3.86a6.11 6.11 0 0 0 -.3-2.1 1.18 1.18 0 0 0 -1.18-.71 3.68 3.68 0 0 0 -3.32 2.45 54.59 54.59 0 0 0 -.68 5.55 5.7 5.7 0 0 0 1.77 4.34c2 1.91 4.1 3.41 5.29 5.08a3.2 3.2 0 0 1 .76 1.81 3.37 3.37 0 0 1 -.29 1.29 10 10 0 0 0 -1.31 2.66v.14a.89.89 0 0 0 .78.86h.08c.45 0 .78-.19 1.16-.19h.28a4.42 4.42 0 0 0 4.18-3.53 5 5 0 0 0 .11-1.13c-.08-4.61-5.42-6.78-7.07-10.15" fill="#ec7632"/><path d="m19.14 13.11c-1.7-2.82-4-5.36-4.28-8.12l.1-.08a18.57 18.57 0 0 1 2.29-.73 7.13 7.13 0 0 0 1.68-.73c.53-.35 1.1-.7 1.14-1.43a1.07 1.07 0 0 0 -.48-.86 5.67 5.67 0 0 0 -2.91-.77c-3 0-6.18 2-6.95 4.9a5.72 5.72 0 0 0 -.17 1.34c.08 4.28 4.88 7.29 6.1 11.14a4.44 4.44 0 0 1 .24 1.37 9.7 9.7 0 0 1 -.53 2.66 1.81 1.81 0 0 0 -.1.61 1.38 1.38 0 0 0 .73 1.23 2.43 2.43 0 0 0 1.3.34 3.42 3.42 0 0 0 2.46-1 6.32 6.32 0 0 0 1.4-4 11.72 11.72 0 0 0 -2-5.88" fill="#ec7632"/><path d="m52.19 87.74-.19-.01" fill="#232222"/><path d="m9.69 62a5.15 5.15 0 0 1 .87-2.89 11.9 11.9 0 0 1 1.58-1.67l.58 2.47a12 12 0 0 0 -3 2.09m54.87-14a16.64 16.64 0 0 0 -7.59-1.62h-.1c-2.7-6.77-6.12-11.82-10.2-15a31.1 31.1 0 0 0 -19.32-6.16 45.33 45.33 0 0 0 -11.38 1.55c-.28-.73-.54-1.46-.87-2.12a.71.71 0 0 0 -1.06-.22 1.65 1.65 0 0 0 -.43 1.57 6 6 0 0 1 .08 1.46 52.17 52.17 0 0 0 -6.3 2.35l-1.06.49a.8.8 0 0 0 -.44.91l1.34 5.59c-.59.53-1.16 1.07-1.78 1.54s-.63 1.6-.17 1.74a12 12 0 0 0 2.81.35l1.37 5.83-.05.16c-.16.38-.4.78-.53 1.09-.32.71.3 1.54.67 1.32.16-.09.3-.22.45-.32l1.51 6.39a11.82 11.82 0 0 0 -2.86 2.74 7.45 7.45 0 0 0 -1.37 4.41 6 6 0 0 0 .49 2.49l.07.1a8.56 8.56 0 0 0 -.53 3c0 .4 0 .82.06 1.25a6.33 6.33 0 0 0 3.38 5 12.77 12.77 0 0 0 5.61 1.43l6.18 26.09a.8.8 0 0 0 .43.59l.32.07.39-.1 1.63-.89a78 78 0 0 0 7-4.39 5.6 5.6 0 0 1 3.4-1.08 15.89 15.89 0 0 1 3.74.7 24.65 24.65 0 0 0 6.34 1.06 14.07 14.07 0 0 0 3.18-.37 8.67 8.67 0 0 0 5.93-4.31 10.39 10.39 0 0 0 1.07-4.83c0-.5 0-.88-.06-1.12 0-2.56-1.41-5.26-2.71-7.87l-.38-.87c-2.24-4.31-2.68-5.92-2.65-6.52v-.08a20 20 0 0 1 5.11-1.75c1.19-.29 2.33-.59 3.26-.89a7 7 0 0 0 1.35-.59 3.3 3.3 0 0 0 .83-.65 2.64 2.64 0 0 0 .66-1.71 42.84 42.84 0 0 0 -.89-7 15 15 0 0 0 4.08-1.31c2-1 3.52-2.63 3.55-4.73s-1.58-3.7-3.56-4.77" fill="#232222"/><path d="m12.75 46.14c.49-.59 1-1.24 1.55-2l.13-.17c.52-.69 1.12-1.48 1.71-1.48h.06a9.05 9.05 0 0 1 4.31 2c.38.26.77.53 1.19.8.26.17.52.37.77.55a4.19 4.19 0 0 0 2.4 1.16h.37c.27 0 .43-.3.6-.61a2.69 2.69 0 0 1 .28-.46 1 1 0 0 0 -.12-.93l-.06-.1-.33-.7a11.13 11.13 0 0 0 -1.3-2.24c-.71-.91-1.37-1.81-2-2.67-.36-.49-.72-1-1.1-1.49a8.78 8.78 0 0 1 2.75-1.3c.45-.15.92-.31 1.37-.5a1.3 1.3 0 0 0 .54-1.39 1.18 1.18 0 0 0 -.51-.72 10.39 10.39 0 0 1 -3.27-.89 8.1 8.1 0 0 0 -1.67-.15 5.44 5.44 0 0 1 -2.22-.34c-.35-.17-.47-.73-.57-1.23l-.09-.39-.24-.78-.1-.34a41.73 41.73 0 0 1 10.15-1.35 27.89 27.89 0 0 1 17.35 5.48c3.37 2.62 6.31 6.86 8.74 12.61a14.55 14.55 0 0 0 -4.11 1.24 6.71 6.71 0 0 0 -3.07 2.84c-.22 0-.43 0-.62-.05a9.76 9.76 0 0 0 -1.61.19c-1-4-5.14-6.93-10.06-6.94-5.24 0-9.58 3.3-10.16 7.67a28.47 28.47 0 0 0 -9.38 1.77z" fill="#fff"/><path d="m9.49 32.35c1.08-.47 2.17-.87 3.21-1.24-.14.44-.27.87-.38 1.29a2.18 2.18 0 0 1 -.5.51l-.2.17v.42a15.33 15.33 0 0 1 -1.62 1.16z" fill="#fff"/><path d="m15.06 55.87a26.65 26.65 0 0 1 8.88-1.71c1 4 5.18 6.82 10 6.83 5.14 0 9.47-3.24 10.14-7.52a7.77 7.77 0 0 1 1.52-.21h.09a5.87 5.87 0 0 0 3.6 4.51 17.5 17.5 0 0 0 7.71 1.53h.32a42.32 42.32 0 0 1 .87 6.18 25.59 25.59 0 0 1 -3.29 1c-2.58.67-5.49 1.42-6.86 2.61-2.25 2-.21 6 2 10.27a39.72 39.72 0 0 1 2.4 5.37c-4.75-.7-7.91-1.93-10.56-4.09s-4.64-5.1-7.06-8.6a1.59 1.59 0 0 0 -1.3-.68 1.63 1.63 0 0 0 -.91.28 1.59 1.59 0 0 0 -.4 2.22l.14.21c2.47 3.57 4.61 6.65 7.51 9 3.13 2.57 7 4.09 12.22 4.8l.87.11a5.61 5.61 0 0 1 -4.57 5.9 10.89 10.89 0 0 1 -2.26.23 21.48 21.48 0 0 1 -5.44-.88 19.47 19.47 0 0 0 -4.91-.85 8.67 8.67 0 0 0 -5.17 1.7c-.92.64-3 2.09-5.55 3.54z" fill="#fff"/><path d="m15.58 72.7a8.92 8.92 0 0 1 -3.52-1 3.65 3.65 0 0 1 -2.09-3c0-.42-.05-.75-.05-1a4.9 4.9 0 0 1 1.18-3.5 8.19 8.19 0 0 1 2.08-1.6z" fill="#fff"/><path d="m57 56.61a15 15 0 0 1 -6.43-1.27c-1.44-.73-2.18-1.6-2.18-2.58s.74-1.84 2.18-2.58a12.66 12.66 0 0 1 4.05-1.1 18.7 18.7 0 0 1 2.38-.16h.48.3a14.15 14.15 0 0 1 5.64 1.32c1.65.86 2.21 1.84 2.19 2.47s-.54 1.62-2.19 2.48a12.47 12.47 0 0 1 -3.42 1.13 16.87 16.87 0 0 1 -3 .29z" fill="#00a753"/><path d="m34 58.27a8.78 8.78 0 0 1 -5.45-1.81 5 5 0 0 1 0-8.16 9.15 9.15 0 0 1 10.91 0 5 5 0 0 1 0 8.15 8.72 8.72 0 0 1 -5.46 1.82" fill="#00a753"/><path d="m11.43 44.9c.22-.81.37-1.59.48-2.25l.15-.88c.06-.38.13-.76.2-1.15a3.32 3.32 0 0 1 .33-.79c.09-.18.19-.38.28-.59a1.34 1.34 0 0 0 -.09-1.3.92.92 0 0 0 -.59-.2 2.22 2.22 0 0 0 -1 .31l-.25.06-.25.06a4.62 4.62 0 0 1 -1.42.22 4.85 4.85 0 0 1 -1.06-.12 2.65 2.65 0 0 1 .79-.65l.41-.23c.32-.17.65-.33 1-.53a4.59 4.59 0 0 0 .88-.63l.29-.14a.76.76 0 0 0 .42-.29l.31-.31a3.59 3.59 0 0 0 .83-1 11.23 11.23 0 0 0 1.26-3.49l.15-.61c.11-.45.24-.91.4-1.37.15.31.29.66.44 1.07.26.7.47 1.41.7 2.17s.54 1.8.89 2.7a.3.3 0 0 0 .32.23h.24l.13.09.08.21.18-.14a2.09 2.09 0 0 1 1.38-.41h.51.82.3a.89.89 0 0 1 .64.22l-.71.39a11.18 11.18 0 0 1 -2 .92 1.63 1.63 0 0 0 -.58 1 1 1 0 0 0 .15.77 1.21 1.21 0 0 0 .52.55l.32.26a22.81 22.81 0 0 1 3.56 4.52c-.14 0-.31-.18-.48-.35l-.11-.11a14.67 14.67 0 0 0 -2.35-1.53 13.69 13.69 0 0 1 -2.61-1.75 1.05 1.05 0 0 0 -.69-.29c-.62 0-1.13.63-1.66 1.3a8.52 8.52 0 0 1 -.84.92 12.56 12.56 0 0 0 -1.67 1.91l-.39.49-.17.23c-.13.17-.26.34-.4.49z" fill="#fcdb30"/><path d="m406.24 50.49.19-.2h4.74l.19.2v.75l-.19.18h-1.73v4.68l-.2.2h-.89l-.19-.2v-4.68h-1.73l-.19-.18z" fill="#232222"/><path d="m415.2 53.47 1.33-3 .27-.17h1.43l.19.19v5.63l-.18.18h-.85l-.19-.18v-4.26l-1.39 3.14a.27.27 0 0 1 -.28.19h-.69c-.13 0-.2 0-.27-.19l-1.39-3.09v4.25l-.18.18h-.86l-.18-.18v-5.68l.19-.19h1.46l.27.17z" fill="#232222"/></svg> \ No newline at end of file diff --git a/site/static/organisations/healthtree.png b/site/static/organisations/healthtree.png new file mode 100644 index 0000000000..ec3f219d1c Binary files /dev/null and b/site/static/organisations/healthtree.png differ diff --git a/site/static/organisations/nesta.svg b/site/static/organisations/nesta.svg index 331bcdb765..72f53e07b0 100644 --- a/site/static/organisations/nesta.svg +++ b/site/static/organisations/nesta.svg @@ -1 +1 @@ -<svg height="100.535998" viewBox="96.11001586914062 84.39999389648438 519.5299072265625 209.08999633789062" width="186.709338" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h700.16v377.01h-700.16z" fill="none"/><path d="m118.94 208.92h.26c6.8-6.64 12.34-8.47 20.57-8.47 17.31 0 24.21 10.92 24.21 26.72v39.77h-22.83v-31.36c0-6.15 1-16.94-10.29-16.94-9.28 0-11.92 6.9-11.92 14.93v33.37h-22.83v-64.36h22.83z"/><path d="m241.72 239.39h-46.72a13.8 13.8 0 0 0 14 13.5 15.68 15.68 0 0 0 13.18-6.89h19.18c-3.49 15.18-17.81 23.11-31.88 23.11-20.45 0-35.72-12.05-35.72-34.25 0-21.46 14.07-34.38 34.16-34.38 21.41 0 33.8 14.6 33.8 36.56zm-20.05-13.17c-1.11-6.15-6.64-11-12.66-11a13.32 13.32 0 0 0 -13.28 11z"/><path d="m293.68 221a28.36 28.36 0 0 0 -11.86-4.51c-2.62-.3-7.24.31-7.61 3.55-.49 4.36 8.11 5.34 11.24 6 11.62 2.06 21.35 8.82 19.87 22.34-1.84 16.84-18 22.06-32.88 20.37a49.89 49.89 0 0 1 -25-10.29l10-14.9c4.24 3.77 11.6 7.89 17.21 8.53 2.87.33 7.26-.56 7.66-4.05.57-5-8.22-5.94-15.37-7.82s-16.74-8.35-15.44-19.81c1.79-15.71 16.8-21.07 30.76-19.48a51.2 51.2 0 0 1 20.6 6.51z"/><path d="m343.58 267.08h-22.83v-45.55l-10.17-.13v-18.82l10.17.14v-19.32h22.83v19.32l10.16-.14v18.82l-10.16.13z"/><path d="m430.42 266.94h-21.82v-4.86h-.24c-4.65 4.86-11.11 7-18.3 7-18.23 0-31.35-14.12-31.35-34.38s12.88-34.25 31.11-34.25a30.74 30.74 0 0 1 18.78 6.26v-4.13h21.82zm-51.83-32.11c0 8.5 5.64 15 15.36 15s15.37-6.54 15.37-15c0-8.24-5.65-15.17-15.37-15.17s-15.36 6.93-15.36 15.17z"/><path d="m472.24 269.59a11.95 11.95 0 1 1 -11.95 12 11.95 11.95 0 0 1 11.95-12z" fill="#9b00c3"/><path d="m600.7 150.1a14.94 14.94 0 1 1 -14.94 14.9 14.93 14.93 0 0 1 14.94-14.9z" fill="#ff0041"/><circle cx="564.85" cy="105.31" fill="#ffb819" r="20.91"/><path d="m484.19 209.85a59.75 59.75 0 0 0 59.75 59.74v-119.49a59.75 59.75 0 0 0 -59.75 59.75z" fill="#ff5a00"/><path d="m585.76 251.67a41.82 41.82 0 0 0 -41.82-41.82v83.64a41.82 41.82 0 0 0 41.82-41.82z"/></svg> \ No newline at end of file +<svg height="100.535998" viewBox="96.11001587 84.3999939 519.52990723 209.08999634" width="186.709338" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h700.16v377.01h-700.16z" fill="none"/><path d="m118.94 208.92h.26c6.8-6.64 12.34-8.47 20.57-8.47 17.31 0 24.21 10.92 24.21 26.72v39.77h-22.83v-31.36c0-6.15 1-16.94-10.29-16.94-9.28 0-11.92 6.9-11.92 14.93v33.37h-22.83v-64.36h22.83z"/><path d="m241.72 239.39h-46.72a13.8 13.8 0 0 0 14 13.5 15.68 15.68 0 0 0 13.18-6.89h19.18c-3.49 15.18-17.81 23.11-31.88 23.11-20.45 0-35.72-12.05-35.72-34.25 0-21.46 14.07-34.38 34.16-34.38 21.41 0 33.8 14.6 33.8 36.56zm-20.05-13.17c-1.11-6.15-6.64-11-12.66-11a13.32 13.32 0 0 0 -13.28 11z"/><path d="m293.68 221a28.36 28.36 0 0 0 -11.86-4.51c-2.62-.3-7.24.31-7.61 3.55-.49 4.36 8.11 5.34 11.24 6 11.62 2.06 21.35 8.82 19.87 22.34-1.84 16.84-18 22.06-32.88 20.37a49.89 49.89 0 0 1 -25-10.29l10-14.9c4.24 3.77 11.6 7.89 17.21 8.53 2.87.33 7.26-.56 7.66-4.05.57-5-8.22-5.94-15.37-7.82s-16.74-8.35-15.44-19.81c1.79-15.71 16.8-21.07 30.76-19.48a51.2 51.2 0 0 1 20.6 6.51z"/><path d="m343.58 267.08h-22.83v-45.55l-10.17-.13v-18.82l10.17.14v-19.32h22.83v19.32l10.16-.14v18.82l-10.16.13z"/><path d="m430.42 266.94h-21.82v-4.86h-.24c-4.65 4.86-11.11 7-18.3 7-18.23 0-31.35-14.12-31.35-34.38s12.88-34.25 31.11-34.25a30.74 30.74 0 0 1 18.78 6.26v-4.13h21.82zm-51.83-32.11c0 8.5 5.64 15 15.36 15s15.37-6.54 15.37-15c0-8.24-5.65-15.17-15.37-15.17s-15.36 6.93-15.36 15.17z"/><path d="m472.24 269.59a11.95 11.95 0 1 1 -11.95 12 11.95 11.95 0 0 1 11.95-12z" fill="#9b00c3"/><path d="m600.7 150.1a14.94 14.94 0 1 1 -14.94 14.9 14.93 14.93 0 0 1 14.94-14.9z" fill="#ff0041"/><circle cx="564.85" cy="105.31" fill="#ffb819" r="20.91"/><path d="m484.19 209.85a59.75 59.75 0 0 0 59.75 59.74v-119.49a59.75 59.75 0 0 0 -59.75 59.75z" fill="#ff5a00"/><path d="m585.76 251.67a41.82 41.82 0 0 0 -41.82-41.82v83.64a41.82 41.82 0 0 0 41.82-41.82z"/></svg> \ No newline at end of file diff --git a/site/static/organisations/nonkosi.svg b/site/static/organisations/nonkosi.svg new file mode 100644 index 0000000000..8639c0ce38 --- /dev/null +++ b/site/static/organisations/nonkosi.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 1860.5 516.6" xmlns="http://www.w3.org/2000/svg"><path d="m520 251.6-6.2-2c-20-6.3-40.3-11.2-59.6-19-34.4-14-68.3-29.5-102.2-44.8a4740 4740 0 0 1 -107.5-50c-17.8-8.6-34.6-19.3-52.2-28.3a271.6 271.6 0 0 0 -67.1-25.5c-9.7-2.1-19.5-3.3-29.2-.6a22 22 0 0 0 -16.3 21.4c-.6 13.6 3 26.3 7.7 38.7 12.4 32.8 30.4 62.7 49.3 92.1q75.3 117.6 150.3 235.5c1 1.5 1.4 3.1 2.4 4-10.5-9.8-21.4-19.4-31.4-29.7a1989.6 1989.6 0 0 1 -166.7-194 678.3 678.3 0 0 1 -71.9-115.9c-8.5-18.2-15.6-37-18.3-57-2.7-19.5-1.2-38.3 13.3-53.5a70.8 70.8 0 0 1 39.1-19.6c24-4.8 48-4 72.1-1 4.4.4 8.6 2.7 12.6 4.5a977 977 0 0 1 105.2 58 4911.4 4911.4 0 0 1 274.8 184.1l2.2 1.7z" fill="#2258a1"/><path d="m295 272.1 46.5 22.9c77.6 38.6 155 77.4 232.8 115.7a334 334 0 0 0 80.9 29.1 68.9 68.9 0 0 0 33.6.5 21 21 0 0 0 16-19.3 70.7 70.7 0 0 0 -5.6-32.7 288.6 288.6 0 0 0 -37.2-68.2c-33-45.4-60.2-94.3-89-142.2-17.6-29.4-35-59-51.3-89.1-7.9-14.6-13.3-30.5-20-45.7-3.6-8.3-7.7-16.3-11.5-24.5l1.8-1.6c.7 1.5 1.1 3.2 2.1 4.4 75.4 86 150.3 172.3 219.1 263.6 19.5 26 37.2 53.2 56 79.7a86.7 86.7 0 0 1 15.3 44.2c1.3 15.4 2.6 30.9 2 46.2-1 19.6-6.6 37.8-23.3 50.4a58.7 58.7 0 0 1 -33.1 11 180.5 180.5 0 0 1 -68.3-11.7c-43.6-14.7-84-36.2-123.5-59.4-65.2-38.3-127-81.8-187.3-127.5-19.2-14.6-38-29.8-57-44.8z" fill="#ef7d38"/><g fill="#2258a1"><path d="m958.8 206.7v-108.1h46.4v177.8c-11.3 0-22.4-.7-33.4.2-9.8.8-15.5-2.7-21.3-10.4-24.2-32-49.2-63.4-74-95-.6-.9-1.3-1.7-2.7-3.2v108h-46.4v-177.4l4.2-.3c12.5 0 25 .1 37.5-.1 3.6 0 5.7 1.2 7.8 4q39.1 50.2 78.4 100.3z"/><path d="m1511.5 276.4c-16.9 0-32.5-.6-48 .2-9 .5-15.1-2.4-21-9-11.9-13.4-24.6-26.1-38-40.2v48.8h-43v-195.6h42.8v117.7l4.9-4.3 36.9-36c1.4-1.3 3.6-2.6 5.4-2.6 18.4-.2 36.7-.2 56.4-.2l-60.6 56z"/><path d="m1204.2 155.4h42.5v13.8l1.6 1.1a18.8 18.8 0 0 1 1.9-3.4c16.4-19.3 49.6-16.8 63.9-6.8a38.8 38.8 0 0 1 17.4 32c.7 27.7.3 55.4.3 83 0 .3-.2.6-.5 1h-42.5v-5.1-58a81.8 81.8 0 0 0 -1.1-12.4 16.5 16.5 0 0 0 -15.7-14.2c-15.5-1.1-24.9 8.2-25.1 25.8-.3 19.5 0 39 0 58.5v5.5h-42.7z"/><path d="m1773.3 184.8-25.7-4.4a10.5 10.5 0 0 0 -4.4.6c-3.7 1-6.2 3.3-6.4 7.4s2.3 6.2 5.5 7.3c4.6 1.5 9.3 2.5 14 3.6 8.5 2 16.8 4.5 23.4 10.5 14.3 12.8 14.7 37.8 1 53.4a53.6 53.6 0 0 1 -34.6 17 92 92 0 0 1 -56.4-10.1l-5.3-3.2 14.9-29c9.3 3.5 18 7.3 27 9.8 4.5 1.2 9.8.5 14.7-.1 4.1-.5 6.3-3.6 6.5-7.7a7.8 7.8 0 0 0 -5.5-8.1c-5-1.8-10.2-3-15.4-4.4l-6.7-1.6c-23-5.1-30.4-23.6-24-44.8a36.9 36.9 0 0 1 20.7-23.7c23.5-10.6 47-7.2 70.6 1.2z"/></g><path d="m1664.8 386v32.7c0 9.6 0 9.6 9.3 11.2 3 .5 6 .5 9.7 2-1.1.8-2.3 2.4-3.4 2.4-17.5.2-35 .2-52.5 0-1 0-2-1-3.1-1.5 1-.7 2-2.1 3-2.2 17.3-1 15-4 15.2-17.3v-17c0-8.4-3-12.4-11-15a57.7 57.7 0 0 0 -32.5 1.1c-3.6.9-7 2.1-10.7 3.3v38c0 3.6 2 5.2 5.2 5.6 4.4.6 8.9 1 14 2.7-1.2.8-2.4 2.3-3.7 2.3q-27.2.3-54.4 0c-1 0-2-1-3-1.5 1-.8 2-2.1 3-2.2 19.6-1 17.1-5.3 17.3-19.8q.2-10.3 0-20.5c-.1-6.8-1.2-8-7.9-9.2-2.3-.5-4.6-.5-6.9-1a19.3 19.3 0 0 1 -4-2l.5-1.4 41-6-1.2 9c8-2.3 15.6-5 23.4-6.7a66.8 66.8 0 0 1 34.6-.4c4.6 1.3 8.6 4.7 13 6.8 1.5.8 3.7 1.4 5 .8 12.2-5 24.8-9 38-9.2a86.8 86.8 0 0 1 25.5 3.6c8.5 2.5 12.7 9.6 12.6 18.9v28.5c0 4.6 2 7 6.7 7.4a51 51 0 0 1 12.4 2.4c-1.2.8-2.4 2.4-3.7 2.4-17.5.2-35 .2-52.5 0-1 0-1.9-1-2.9-1.7 1-.7 1.7-1.8 2.7-2 3.3-.6 6.6-.7 9.9-1.3 3.5-.6 5.5-2.8 5.5-6.6 0-9.6.2-19.3.1-29a11.2 11.2 0 0 0 -7.8-11 55.3 55.3 0 0 0 -16-3.2c-10.8 0-21 3-30.4 6.5z" fill="#ef7d38"/><path d="m1854.7 276.2h-42.5v-120.6h42.5z" fill="#2258a1"/><path d="m945.7 432.2c-1.3.7-2.5 2.1-3.7 2.1q-35.7.2-71.4 0c-1.3 0-2.5-1.6-4.8-3.2 7.5-.7 13-1 18.7-1.8 6.8-.9 9.5-3.7 10-10.2.2-1.5.1-3 .1-4.5v-77.8c-11 0-21.7-.2-32.5 0a63 63 0 0 0 -10.3 1.5c-8 1.4-13.8 6-16 14-1.5 5.3-4.6 6.1-9.5 4.7l-1.2-26h162.3l-2.2 26.2h-7l-1.7-4.2c-3-9.4-9.7-14.9-19.4-15.3-12.9-.7-25.9-.2-39.4-.2l-.2 4v77.5c0 7.6 1.9 9.7 9.4 10.4l17.8 1.5z" fill="#ef7d38"/><path d="m1161.1 432c-1 .8-2.2 2.3-3.3 2.3q-28.2.2-56.5 0c-1 0-1.9-1.2-2.8-1.8 1-.7 1.8-1.7 2.8-1.9a28.3 28.3 0 0 1 5-.3c9-.4 12.3-3.7 12.3-12.6v-76-5c.3-5-2.5-7.6-7.3-8.3-3.4-.4-7-.6-10.3-1.2-1.3-.2-2.5-1.4-3.7-2l.6-1.5 43.5-5.6c-.6 8.7-1.6 16.7-1.6 24.8-.3 26-.1 52-.1 78 0 6.6.9 7.6 7.4 8.5l6.4.9c2.1.2 4.3 0 6.5 0z" fill="#ef7d38"/><path d="m1854.7 373-1 18c-3.7 1-5.9.5-8-3.4-4-7.7-12-10-19.8-10.7a70.3 70.3 0 0 0 -20.2 1.2c-2.9.5-6.6 4-7.3 7-1.1 4 3 6.4 6.6 7.5 9.6 2.8 19.5 5 29.1 7.9 6.7 2 13.5 3.9 19.6 7.1 9 5 9 14.1.6 20a50.6 50.6 0 0 1 -29.7 8.6c-15 0-30.1-1.3-45-2l-4.3-20.4c3.3-1.8 6-1.7 9 2 12.3 14.8 28.5 17.7 46.4 14.4a15.6 15.6 0 0 0 5-2.2c5-3 5.4-8 .5-11.2a46 46 0 0 0 -12.2-5.4c-8.5-2.4-17.2-4-25.6-6.5a56.2 56.2 0 0 1 -14-6.2c-7.6-4.8-7.5-13.1-.5-18.6 6.8-5.4 15-7.3 23.2-8.4a110 110 0 0 1 18-1c9.7.4 19.5 1.5 29.6 2.2z" fill="#ef7d38"/><path d="m1395 421a49.5 49.5 0 0 1 -25.3 12.8 85 85 0 0 1 -60-5.7 39.5 39.5 0 0 1 -8.2-5.8c-10.4-9.4-11.3-22.4-1-31.8a71.6 71.6 0 0 1 22-13.2c20-7.7 40.9-8.7 61.8-3.7 2.4.5 4.3 2.9 6.5 4.4-1.9 2.1-3.4 4.7-5.7 6.2-3.6 2.3-7.4 2-11.6 0a52.3 52.3 0 0 0 -42.6-2.8c-7.7 2.7-14 7.4-15.1 16.2-1.4 9.6 3.3 16.8 11.1 21.2a61.3 61.3 0 0 0 58.7 1.5c3.6-1.6 6-2.2 9.3.8z" fill="#ef7d38"/><path d="m1833.5 132.6c-13.5 0-23.3-10.1-24-23.4a24 24 0 1 1 48.2-.8c0 14-10.2 24.2-24.2 24.2z" fill="#2258a1"/><path d="m294 273-1.4-1.5.2-.3 2.2.9z" fill="#ef7d38"/><path d="m292.6 271.5-.7-.7 1 .5z" fill="#ef7d38"/><path d="m290.3 269.7.1.3h-.3z" fill="#ef7d38"/><path d="m1634.8 160.2c-18.5-10.5-38.4-11.2-58.7-7.7a63.7 63.7 0 0 0 -54.6 63c.2 30 18.2 53.8 47 62a96.3 96.3 0 0 0 49.7.7 64 64 0 0 0 16.6-118zm-40.6 84.2a28.4 28.4 0 0 1 -27.8-28.6 28 28 0 0 1 28.2-28.2 28.3 28.3 0 0 1 28.1 28.8 28.5 28.5 0 0 1 -28.5 28z" fill="#2258a1"/><path d="m1169.5 181.2c-15.3-23.1-38.3-31.1-68.5-30.4-3.4.5-10.3 1.1-16.9 2.7a64.2 64.2 0 0 0 -50.3 56.4 63.4 63.4 0 0 0 41.6 66c18 6.6 36.5 7 54.9 2.4a63.8 63.8 0 0 0 39.2-97zm-63 63.1a28.4 28.4 0 0 1 -28-28.5 28.1 28.1 0 1 1 56.2 0 28 28 0 0 1 -28.2 28.5z" fill="#2258a1"/><path d="m1521.4 387.7a58 58 0 0 0 -18-11.2 96.3 96.3 0 0 0 -49.1-4.8 67.6 67.6 0 0 0 -34.5 13.5c-7.5 6.1-12.3 13.7-10 24 2 8.3 8 13.6 15.2 17.6 13.4 7.5 28 10 43.2 10.3 7.4-.9 14.9-1.3 22.2-2.8 11.9-2.4 23-6.7 31.4-16 9-9.5 9.1-21.7-.4-30.6zm-18 24.2c-2.6 11-11.5 15.8-21.6 18.4-3.5.8-7.2 1-10.8 1.3l-.4 1c-6.8-2-13.9-3.2-20.2-6.1a27.9 27.9 0 0 1 -16.6-29.6c1.7-10 10.6-18 23.6-20 13.1-2 26-.9 36.8 8.2 8.4 7 11.5 16.4 9.1 26.8z" fill="#ef7d38"/><path d="m1201.3 399.2h66c7.6 0 9.8-2.8 7.4-10-2.4-7.5-8.7-11.1-15.5-13.7a80.8 80.8 0 0 0 -47.6-2.4 59.7 59.7 0 0 0 -30.3 15.5c-10.1 10.4-10.2 23.1.5 33a48 48 0 0 0 13.8 8.7 84.2 84.2 0 0 0 54.2 3.5 55 55 0 0 0 24.3-12c-2.6-1-5.6-2-7.5-1-12 6.1-24.8 7-37.5 5.2-7.7-1-15.4-4-22.3-7.7s-11.3-9.7-11.2-19zm5.4-17.6a41.2 41.2 0 0 1 36.2-2c1.5.6 3.3 1.4 4.1 2.6a94.1 94.1 0 0 1 4.6 9.4c-2.8 1-5.7 2.6-8.5 2.6-15.4.3-30.7.1-46.7.1 1.3-6.6 5.6-10 10.3-12.7z" fill="#ef7d38"/><path d="m1074 421a66 66 0 0 1 -51.4 1.3c-10.3-3.7-17.7-10.5-19-23h73.4c5.7-.3 7-1.7 6.6-7.5-.5-7.5-5.7-12-11.7-14.2-8.2-3-16.8-5.6-25.4-6.4a74 74 0 0 0 -51.3 12.8c-6.6 4.7-12 10.5-12.6 19.4-.7 11.1 5.7 18.1 14.3 23.3a78.5 78.5 0 0 0 50.5 9.2 74.1 74.1 0 0 0 35.3-13c-2.5-3.1-5-3.5-8.7-1.8zm-60.6-38.3a39.8 39.8 0 0 1 39-2.4 15.8 15.8 0 0 1 6.5 5.8c3.1 5 1.3 8-4.5 8.2h-49.7a18 18 0 0 1 8.7-11.6z" fill="#ef7d38"/></svg> \ No newline at end of file diff --git a/site/static/organisations/nzz.svg b/site/static/organisations/nzz.svg new file mode 100644 index 0000000000..70f9486263 --- /dev/null +++ b/site/static/organisations/nzz.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 90" title="Neue Zürcher Zeitung"> <path d="M40.74.114c3.01.4 5.7 3.7 5.7 5.988v15.48c0 2.7 3.2 3.6 4.5 4.19-4.1 2.2-5.8 4.9-5.8 7.89v20.57c0 3.7 1.5 4.9 3.4 5.3 2.5.4 3.5-4.09 4.3-3.39.7.7-1.9 3.69-4 6.09-2.3 2.6-3.8 6.49-3.9 6.4 0 0-3.61-2.4-5.41-4.69-1.6-2.1-3-4.89-3-8.39v-17.87c0-6.79 7.51-10.39 9.61-11.19-1.7-.2-8.61-1.19-8.61-6.79V7.522c0-1.598-.4-3.994-2.1-3.994-3.1-.1-5.9 4.493-5.9 9.484v34.85c0 .2-.7 3.9-7.9 10.99-3.7 3.69-5.9 10.28-6.5 10.88-.5-1.1-3.01-9.29-8.918-8.49-5.902.7-5.502 7.59-6.002 7.69-.4.1 0-2.2-.22-4.79-.18-3.4 3.92-8.99 8.323-10.09 6.717-1.69 11 4.9 11.5 4.9 0 0 1.1-.8 1.1-1.5V6.032c0-2.696-1.6-4.393-3.6-4.393-4.41-.1-6.01 2.193-5.31 6 .7 4.4 7.6 12.4 6.6 19.07-.5 3.5-3.4 6.99-7.71 6.89-5.508-.2-8.41-9.28-7.51-9.68.6-.3.9 4.6 4 4.6 1.4 0 2.2-1.4 2.708-2.8.8-2.19-4.904-6.99-5.004-12.38-.2-6.79 3.3-11.38 9.118-12.68 5.3-1.2 11.7 2.1 14.7 8.1 0 0 4.2-9.59 11.8-8.59M105.2 20.28c2.4 5 5 7.5 6.7 8.59-2.1.9-2.9 2.4-2.9 4.09v24.27c0 1.4 1 2.7 1.7 2.5 3.2-.69 3.4-4.49 4.3-3.39.4.4-1.4 3-2.2 3.69-1.8 1.5-6 5.8-7.5 8.69-2.1-3.59-4.4-6.09-4.5-7.29 0-.2.1-1.3 0-4.79 0 0-11.14 6.09-12.14 12.08-1-4.39-3.3-7.69-6.8-9.29 1-.99 3-2.49 3-4.69V33.17c0-2.19-.9-3.29-2.5-3.69s-3 2.69-3.8 1.9c-.4-.5 3.9-4.3 6.6-7.49 1.7-2.1 2.8-3.6 2.8-3.6 3.1 1.1 5.3 4.1 5.3 6.59v27.46c0 1.7.3 4.6 2.7 4.2.8-.1 1.91-.8 4.84-2.9V34.57c0-3.49-.4-3.99-2.73-5.79 2.73-1.5 4.83-3.59 7.13-8.49M187.4 0c8.7.2 16.6 5.3 17.3 14.7.3 5.19-2.3 9.29-4.9 11.98-3.3 3.3-5.6 4.1-10 5.3 7 .3 15.7 7.3 14.6 17.37-1.5 14.68-16.8 24.16-26.3 18.47-5.3-3.09-4.9-11.08-10.7-11.58-5.5-.5-8.8 3.99-7.9 8.5.9 4.3 3.7 7.1 9.2 4.9 0 0 .8-.5 1 0 .2.4-.6.8-.6.8-5.9 2.2-8.9-.3-10.2-4.1-2.4-6.79 4.1-13.87 12.8-15.07 8.9-1.2 11.3 10.4 13.6 13.7 1.2 1.8 2.8 2.3 4 2.2 3.4-.2 4.5-3.29 4.5-5.19V39.41c0-3.39-2.6-6.69-5.7-6.69-5.9.1-7.2 5.7-7.9 5s2.3-5.69 7.7-5.79c-4.7.1-8.6-4.7-8.6-7.89 0-3.8 2.2-5 4.5-5.4 2.9-.39 5.4 1.6 5.5 4.6 0 4.19-4 4.59-5.3 4.6 0 2.5 3.2 3.6 4.9 3.2 1.8-.4 4.9-1.7 4.9-5.89V9.57c0-3.598-2.4-7.99-8.7-7.99-6.7-.1-11.4 4.392-11.6 10.1 0 .2 0 2.29-.5 2.29-.6-.1-.6-2.2-.6-2.29.2-7.3 5.8-11.72 15-11.6m44.3 19.8c2.4 4.9 4.9 7.4 6.7 8.49-2.1 1-2.9 2.5-2.9 4.09v24.27c0 1.4 1 2.7 1.7 2.6 3.2-.7 3.4-4.5 4.3-3.4.4.4-1.4 3-2.2 3.69-1.8 1.5-6 5.7-7.5 8.59-2.1-3.59-4.5-5.99-4.5-7.29 0-.1.1-1.3 0-4.69 0 0-11.2 6.09-12.2 11.98-1-4.29-3.3-7.69-6.8-9.28 1-.9 3-2.4 3-4.6V32.66c0-2.09-.9-3.19-2.5-3.59s-3 2.7-3.8 1.8c-.4-.4 3.9-4.2 6.6-7.49 1.7-2 2.8-3.5 2.8-3.5 3.1 1 5.3 4.1 5.3 6.49v27.46c0 1.8.3 4.6 2.7 4.3.7-.1 1.9-.8 5-2.9V34.36c0-3.49-.5-4.19-2.9-5.99 2.8-1.5 4.9-3.69 7.2-8.49M217.9 1.208c2.2 0 4.2 1.9 4.1 4.194-.2 3.8-4.1 10.49-4.1 10.5 0-.1-4-6.9-4-10.49 0-2.396 2.2-4.194 4-4.194m13.7-.11c2.2 0 4.1 1.9 4 4.294-.1 3.7-4.1 10.39-4.1 10.39s-4-6.9-4-10.49c0-2.296 2.3-4.194 4.1-4.194m19.1 18.772c4.4 1.3 5.6 5.8 5.4 8.9 1.5-1.2 4.4-4.19 6.4-6.29 1.5-1.5 2.1-2.6 2.1-2.6l5.5 8.49-6.3 5.89c-1.2-1.1-4.4-5.99-5-6.49 0 0-2.7 1.6-2.7 2.5l.1 26.46c-.1 1.6.1 2.6 1 2.7 2.1 0 2.8-3.89 3.5-3.09.2.3.1 1.4-1.2 2.8-1.9 2.19-5.5 5.09-7.7 9.18-1.3-3.29-4-7.89-6.9-9.18 1.2-.8 2.6-2.3 2.6-4.6V30.79c0-1.4-1.4-2.5-2.3-2.5-1.1 0-2.6 2.5-3.1 1.6-.4-.5 2.4-2.4 5-5.39 2.9-3.4 3.5-4.7 3.6-4.6m39.8 8.8l-4.7-8.72c-3.6 2.9-1.4 1.3-8.4 6.79-3.7 2.9-7.1 4.7-7.1 8.29v23.37c0 5.5 9.5 10.1 9.5 10.1.9-5.49 2.9-8.49 7.9-8.69 3.9-.1 6.4 3.2 7.2 8.6 1.4-5.59 4.3-7.59 6.4-9.38-.8-.7-2.4-1.2-2.4-4.9V32c0-1.1 4.7-5.2 5.1-5.2.2 0 2 1.5 2 3.9 0 0 0 35.64-.1 35.74-.6 2.9-1.9 4.1-1.6 4.4.4.4 1.3-1.5 5-5.59 3.3-3.6 4.9-4.4 4.9-5.6V27.6c0-2.89-3.3-7.09-4.5-7.69L298.9 30V14.12c0-3.79 2.7-11.68 5.6-14.09-5.4 0-9.1 8.6-10.4 11.69-2.1-3.492-5.4-5.49-8.3-5.19 3.3 2.3 5.2 4.9 5.2 9.49v37.64c0 2.4-1 5.89-6.7 5.99-3.4.1-5.6-2.59-5.6-5.79V28.7c0-.5.3-2.4 1.5-2.6s4.1 6.4 4.7 6.99c2.9-2.09 3.3-2.59 5.6-4.39m62.8-8.72c3.6 1.4 5.5 5.7 5.4 8.8 1.4-1.2 4.3-4.19 6.3-6.29 1.5-1.5 1.8-2.4 1.9-2.4l6.1 9.19-7.2 5.99c-1.1-1.4-4.3-6.59-5-7.09 0 0-2.2 1.4-2.2 2.3v26.16c-.1 1.6.9 2.6 1.8 2.5 3.4-.2 3.6-3.9 4.6-3.2.4.3-.6 2.2-2 3.4-2.1 1.89-6.5 4.89-8.7 8.98-1.3-3.29-4-7.89-6.9-9.18 1.2-.8 3.2-2.2 3.2-4.5V31.38c0-1.4-1.6-3.2-3.2-2.9-1.1.2-3 2.8-3.5 1.8-.3-.8 3.1-2.8 5.7-5.79 3-3.4 3.6-4.6 3.7-4.5M415.6 0c8.9.1 16.8 5.1 17.4 14.5.3 5.19-2.3 9.39-4.9 11.98-3.2 3.3-5.6 4.1-10 5.3 7.1.4 15.7 7.3 14.7 17.37-1.6 14.68-16.9 24.16-26.5 18.47-5.2-2.99-4.9-11.08-10.7-11.58-5.5-.4-8.8 4.09-7.9 8.6.9 4.3 3.7 7 9.3 4.9 0 0 .7-.5.9-.1s-.6.9-.6.9c-5.8 2.2-8.9-.4-10.2-4.19-2.4-6.79 4.2-13.78 12.8-14.98 8.9-1.2 11.3 10.3 13.6 13.7 1.3 1.8 2.9 2.3 4.1 2.2 3.4-.3 4.5-3.29 4.5-5.19V39.31c0-3.39-2.5-6.69-5.8-6.69-5.8.1-7.1 5.6-7.9 4.9-.7-.7 2.3-5.59 7.8-5.69-4.8 0-8.6-4.7-8.6-7.99 0-3.7 2.1-5 4.4-5.3 2.9-.49 5.6 1.6 5.6 4.6.1 4.19-4 4.49-5.4 4.5 0 2.6 3.2 3.6 5.1 3.2 1.7-.3 4.8-1.7 4.8-5.79V9.47c0-3.694-2.4-7.988-8.8-8.088-6.7 0-11.4 4.394-11.6 10.1 0 .3.1 2.39-.5 2.29s-.5-2.19-.5-2.29c.1-7.192 5.7-11.69 14.9-11.4m56.8 34.478v22.37c-.1 1.7 1 2.9 1.9 2.9 2 0 2.5-3.59 3.3-2.69.1.2 0 1.3-1.2 2.69-1.9 2.3-6.7 5.1-8.8 9.59-1.3-3.29-3.2-7.49-6-8.79 1.2-.8 2.9-2.29 2.9-4.59V32.17c0-1.29-.8-2.49-1.8-2.49-1.1 0-2.2 2.49-2.8 1.9-.9-.7 4-4.3 6.9-7.29 1.1-1.1 1.1-1.1 2.7-3.1.7 1.7 3.3 6.6 6.2 8.39-2.5 1.5-3.3 2.79-3.3 5m-2.9-32.47c2.2 0 4.1 1.9 4 4.295-.1 3.695-4.1 10.48-4.1 10.5 0-.1-4-6.988-4-10.58 0-2.297 2.3-4.194 4.1-4.194m22.6 7.67v17.17c0 1.2 3.5.1 3.5.8v.8c0 .8-3.5-.1-3.6.7v27.56c0 .1-.4 3.2 1.8 3.3 2 .1 3.1-3.99 3.7-3.49.8.5-.6 2.79-4.8 6.69-3.9 3.59-3.7 3.19-5.4 6.09-1.3-2.6-3.8-7.09-6.8-8.99 1-.5 3.2-2.19 3.2-5.09V29.48c0-1.4-3.2.1-3-1 .1-.6-.1-.5 0-.6 4.8-2.2 9.7-12.28 11.4-18.07m50.2 11.37c2.5 1.4 5.2 4 5.9 10.7 4.4-4.5 10.3-10.69 10.3-10.69 1.4 3.6 4.7 7.1 6.2 8.2 0 0-2 2.7-2 4.49v24.47c0 1.3.9 2.6 1.9 2.5 1.7 0 2.4-2.59 2.7-2.39.5.3.2 1.39-1 2.69-2.2 2.4-5.9 5.69-7 8.49-1.7-1.1-4.7-4.59-4.7-7.69V33.49c0-2.19-.9-3.59-2.6-3.39-1.2.2-4.1 2.79-4.1 4.59v21.37c0 3 1.5 4 2.4 4.39-3.8 3.2-6.4 7.49-6.9 9.29-1.5-4.69-5-8.19-6.3-9.39 0 0 2.6-2.39 2.6-5.09V34.69c0-2-.4-4.69-2.4-4.69-2.2 0-3.4 3.39-4 2.39-.5-.69 5-5.99 7-8.28 1-1.1.8-1 2-2.9M520.8 56.7V35.4c0-3.5-.4-4-2.8-5.8 2.8-1.5 4.9-3.6 7.2-8.5 2.4 5 4.9 7.5 6.6 8.6-2.1.9-2.8 2.4-2.8 4.1l-.1 24.3c0 1.4 1.1 2.7 1.7 2.5 3.3-.7 3.4-4.5 4.4-3.4.3.4-1.4 3-2.2 3.7-1.8 1.5-6.1 5.7-7.5 8.6-2.2-3.6-4.5-6-4.5-7.2 0-.2.1-.9 0-4.4 0 0-10.7 5.7-11.7 11.6-1-4.3-3.3-7.6-6.8-9.2 1-1 3.1-2.5 3.1-4.7V34c0-2.2-.8-3.7-2.5-4.1-1.6-.4-3.1 3.1-3.9 2.2-.4-.4 3.9-4.2 6.6-7.5 1.7-2 2.8-3.5 2.8-3.5 3.2 1.1 5.3 4.1 5.3 6.5v27.6c0 1.7.3 4.6 2.8 4.2.7-.1 1.3-.6 4.3-2.7M134.2 20.28c.4.8 2.9 5.4 4.7 9 1.4 2.5 2.4 4.4 2.2 4.49-.1.1-13.8 10.39-13.8 10.69v11.18c0 2.6 1.5 4.5 3.5 4.7 3.5.4 3.9-4.69 4.8-3.79.8.7-1.9 4.59-4.3 6.59s-4.9 5.59-4.9 5.59-7.6-3.99-7.6-9.98V37.18c0-3.1.5-5.69 4.5-8.59 4.6-3.1 10.9-8.29 10.9-8.29zm-6.9 6.69c.1 1.3 0 16.2 0 16.2 1.3-.8 5.3-4.2 6.3-4.89 0 0-2-4-3.8-7.29-1.4-2.7-2.6-5-2.5-4zm-56.54-6.69c.4.9 2.8 5.5 4.7 9.1 1.3 2.5 2.3 4.4 2.1 4.49-.1 0-13.71 10.39-13.71 10.69v11.18c0 2.5 1 4 3 4.2 3.2.4 3.91-4.49 4.91-3.59.8.6-2.2 4.29-4.71 6.29-2.3 2-4.4 5.99-4.4 5.99s-7.3-3.79-7.3-9.78V37.28c0-3.1.5-5.79 4.5-8.59 4.6-3.1 10.91-8.39 10.91-8.39zm-6.91 6.79c.1 1.3 0 16.2 0 16.2 1.3-.8 5.3-4.2 6.31-4.99 0 0-2.01-3.9-3.81-7.29-1.4-2.7-2.6-5-2.5-3.9zm272.05-7.09c.4.9 2.8 5.5 4.7 9.1 1.2 2.5 2.3 4.4 2 4.49-.1 0-13.6 10.39-13.6 10.69v11.18c0 2.5 1.4 4.5 3.4 4.7 3.5.3 3.9-4.69 4.9-3.79.7.6-2 4.59-4.4 6.59-2.3 2-4.9 5.59-4.9 5.59s-7.5-3.99-7.5-9.98V36.98c0-3.1.4-5.79 4.5-8.59 4.5-3.19 10.9-8.39 10.9-8.39zm-6.9 6.79v16.08c1.3-.7 5.3-4.09 6.3-4.89 0 0-2.1-3.9-3.8-7.29-1.4-2.7-2.6-5-2.5-3.9zm258.1-5.59c3.7 5.2 9.3 8.8 9.3 8.79-.8 1.4-2.3 1.7-2.3 6.29v22.27c2.3 3.2 6.5 9.1 5.8 15.67-1 9.89-10.4 16.18-19.5 15.78-8.9-.3-12.4-7.59-11.5-12.68.7-3.5 3.6-4.69 5.6-4.2 1.8.4 3.4 2.4 2.9 4.7-.4 2.39-3.4 3.89-5.5 2.69-.6.1-1.2 1.9-.7 2.8 1.9 4.7 6.5 5.2 9.9 5.1 4.9-.2 10.3-4.49 11.1-10.78 1.2-8.49-6-10.39-6.3-17.98l-9.4 9.99c-1.7-.5-6.5-5.39-6.6-8.79-.1-1.2 0-10.68 0-22.46 0-3.6 1.6-5.1 7-8.99 6.3-4.59 7-4.69 10.2-8.19zm-5.8 6.79c-3.1 1-3.2 3.2-3.2 3.2v25.96c0 .2 1.5 4.1 3.7 4.5 1.4.3 4-2.99 4-3.29V31.48c-2-1.8-2.6-2.2-4.5-3.5zm-129-6.79c.4.9 2.8 5.5 4.7 9.1 1.2 2.5 2.3 4.4 2 4.5 0 0-13.6 10.39-13.6 10.69v11.18c0 2.6 1.5 4.5 3.4 4.7 3.5.3 3.9-4.69 4.9-3.79.8.6-2 4.59-4.4 6.59-2.3 2-4.8 5.59-4.8 5.59s-7.6-3.99-7.6-9.99V38.19c0-3.1.5-5.7 4.5-8.59 4.5-3.2 10.9-8.39 10.9-8.39zm-6.9 6.79v16.18c1.3-.8 5.3-4.2 6.3-5 0 0-2.1-3.89-3.8-7.28-1.4-2.7-2.6-5-2.5-3.9z"></path> </svg> \ No newline at end of file diff --git a/site/static/organisations/open-state-foundation.svg b/site/static/organisations/open-state-foundation.svg new file mode 100644 index 0000000000..f8c010e7e2 --- /dev/null +++ b/site/static/organisations/open-state-foundation.svg @@ -0,0 +1 @@ +<svg height="73.575" viewBox="0 0 338.40898 73.574781" width="338.41" xmlns="http://www.w3.org/2000/svg"><path d="m117.93 21.04-44.5 44.49a31.51 31.51 0 0 0 44.5-44.49" fill="#035c6e"/><path d="m126 8.0001-44.49 44.49a31.51 31.51 0 0 1 44.49-44.49" fill="#7dd0e3"/><path d="m54.949 21.04-44.49 44.49a31.51 31.51 0 0 0 44.49-44.49" fill="#035c6e"/><path d="m52.469 18.55-44.5 44.5a31.52 31.52 0 0 1 44.5-44.5" fill="#7dd0e3"/><g fill="#035c6e"><path d="m322.28 64.71h3.26v-14.13h.05l8.68 14.13h4.14v-18.28h-3.26v13.68h-.05l-8.5-13.68h-4.32zm-21.33-11.83a6.23 6.23 0 0 1 1.28-2.12 5.81 5.81 0 0 1 2-1.42 6.15 6.15 0 0 1 2.57-.52 6.24 6.24 0 0 1 2.59.52 5.8 5.8 0 0 1 2 1.42 6.57 6.57 0 0 1 1.28 2.12 7.45 7.45 0 0 1 .45 2.63 7.8 7.8 0 0 1 -.45 2.7 6.39 6.39 0 0 1 -1.3 2.13 5.81 5.81 0 0 1 -2 1.41 6.29 6.29 0 0 1 -2.56.5 6.16 6.16 0 0 1 -2.54-.5 5.87 5.87 0 0 1 -2-1.41 6.21 6.21 0 0 1 -1.29-2.13 7.8 7.8 0 0 1 -.46-2.7 7.45 7.45 0 0 1 .46-2.63m-3.31 6.55a9 9 0 0 0 5.14 5 10.43 10.43 0 0 0 3.92.71 10.55 10.55 0 0 0 3.94-.71 9.15 9.15 0 0 0 3.13-2 8.92 8.92 0 0 0 2-3 10.14 10.14 0 0 0 .74-3.92 10.29 10.29 0 0 0 -.74-4 8.61 8.61 0 0 0 -2-3 9.28 9.28 0 0 0 -3.13-1.89 11.18 11.18 0 0 0 -3.95-.67 11.05 11.05 0 0 0 -3.92.67 9.24 9.24 0 0 0 -3.1 1.91 8.72 8.72 0 0 0 -2 3 10.29 10.29 0 0 0 -.74 4 10.14 10.14 0 0 0 .71 3.9m-9.69 5.28h3.25v-18.28h-3.25zm-13.5 0h3.25v-15.45h5.61v-2.83h-14.45v2.84h5.61zm-18.46-7 2.87-7.44 2.81 7.44zm-6.41 7h3.64l1.66-4.19h7.93l1.71 4.19h3.72l-7.87-18.28h-2.81zm-15.9-2.84v-12.66h2.71a12.77 12.77 0 0 1 2.53.25 6.4 6.4 0 0 1 2.29 1 5.2 5.2 0 0 1 1.66 1.94 6.8 6.8 0 0 1 .65 3.2 6.42 6.42 0 0 1 -.65 3.08 5.29 5.29 0 0 1 -1.66 1.92 6.49 6.49 0 0 1 -2.29 1 10.93 10.93 0 0 1 -2.53.3zm-3.26 2.84h6.49a12.9 12.9 0 0 0 3.59-.53 9.77 9.77 0 0 0 3.25-1.64 8.39 8.39 0 0 0 2.35-2.84 8.78 8.78 0 0 0 .91-4.14 9.28 9.28 0 0 0 -.91-4.33 7.92 7.92 0 0 0 -2.33-2.8 9.2 9.2 0 0 0 -3.25-1.54 14.43 14.43 0 0 0 -3.59-.46h-6.49zm-22.74 0h3.26v-14.13h.05l8.68 14.13h4.14v-18.28h-3.26v13.68h-.05l-8.48-13.68h-4.32zm-6.47-18.28h-3.25v11.43a6.09 6.09 0 0 1 -.21 1.59 4 4 0 0 1 -.68 1.41 3.58 3.58 0 0 1 -1.27 1 4.4 4.4 0 0 1 -1.95.38 4.35 4.35 0 0 1 -2-.38 3.58 3.58 0 0 1 -1.27-1 3.85 3.85 0 0 1 -.68-1.41 6.09 6.09 0 0 1 -.21-1.59v-11.43h-3.26v11.56a7.73 7.73 0 0 0 .56 3 6.55 6.55 0 0 0 1.65 2.25 7 7 0 0 0 2.34 1.43 8.78 8.78 0 0 0 5.84 0 6.86 6.86 0 0 0 2.32-1.43 6.55 6.55 0 0 0 1.5-2.26 7.55 7.55 0 0 0 .57-3zm-35.87 6.45a6.4 6.4 0 0 1 1.3-2.12 5.81 5.81 0 0 1 2-1.42 6.15 6.15 0 0 1 2.57-.52 6.24 6.24 0 0 1 2.59.52 5.8 5.8 0 0 1 2 1.42 6.4 6.4 0 0 1 1.28 2.12 7.45 7.45 0 0 1 .45 2.63 7.8 7.8 0 0 1 -.45 2.7 6.37 6.37 0 0 1 -1.29 2.13 5.85 5.85 0 0 1 -2 1.41 6.29 6.29 0 0 1 -2.56.5 6.19 6.19 0 0 1 -2.54-.5 5.87 5.87 0 0 1 -2-1.41 6.21 6.21 0 0 1 -1.29-2.13 7.8 7.8 0 0 1 -.45-2.7 7.45 7.45 0 0 1 .45-2.63m-3.32 6.55a9 9 0 0 0 5.14 5 11.26 11.26 0 0 0 7.87 0 9.15 9.15 0 0 0 3.13-2 8.92 8.92 0 0 0 2-3 10.14 10.14 0 0 0 .74-3.92 10.29 10.29 0 0 0 -.74-4 8.61 8.61 0 0 0 -2-3 9.28 9.28 0 0 0 -3.13-1.91 11.89 11.89 0 0 0 -7.87 0 9.24 9.24 0 0 0 -3.1 1.91 8.72 8.72 0 0 0 -2 3 10.29 10.29 0 0 0 -.73 4 10.14 10.14 0 0 0 .73 3.92m-16.93 5.28h3.26v-7.7h8.06v-2.74h-8.06v-5h8.55v-2.84h-11.85z"/><path d="m258.67 20.05a9.16 9.16 0 0 0 -3.23-1.92 10.74 10.74 0 0 0 -3.62-.65 11.65 11.65 0 0 0 -2.93.37 8 8 0 0 0 -2.6 1.16 6.27 6.27 0 0 0 -1.86 2 6 6 0 0 0 -.71 3 5.66 5.66 0 0 0 .46 2.41 5.17 5.17 0 0 0 1.21 1.68 6.72 6.72 0 0 0 1.71 1.14 19.61 19.61 0 0 0 2 .77c.69.21 1.3.41 1.85.6a7.16 7.16 0 0 1 1.35.62 2.9 2.9 0 0 1 .85.76 1.71 1.71 0 0 1 .29 1 2.3 2.3 0 0 1 -.23 1.06 1.84 1.84 0 0 1 -.64.71 2.77 2.77 0 0 1 -.93.39 4.92 4.92 0 0 1 -1.09.11 5.54 5.54 0 0 1 -2.5-.63 6 6 0 0 1 -2-1.58l-3.38 3.38a9.16 9.16 0 0 0 3.48 2.23 12.39 12.39 0 0 0 4.35.78 11 11 0 0 0 3-.41 7.73 7.73 0 0 0 2.57-1.27 6.21 6.21 0 0 0 1.79-2.17 6.9 6.9 0 0 0 .66-3.12 5 5 0 0 0 -.62-2.62 6 6 0 0 0 -1.56-1.76 8.16 8.16 0 0 0 -2.1-1.13c-.77-.29-1.51-.55-2.22-.79-.49-.15-.93-.31-1.33-.45a6.07 6.07 0 0 1 -1-.49 2.15 2.15 0 0 1 -.65-.62 1.72 1.72 0 0 1 -.22-.89 1.8 1.8 0 0 1 .28-1 2.42 2.42 0 0 1 .7-.65 2.71 2.71 0 0 1 .93-.34 5.86 5.86 0 0 1 1-.09 4.86 4.86 0 0 1 2 .49 4.61 4.61 0 0 1 1.7 1.32z"/><path d="m159.67 31a6.21 6.21 0 0 1 -1.24 2 5.66 5.66 0 0 1 -1.93 1.43 6.25 6.25 0 0 1 -4.83 0 5.48 5.48 0 0 1 -1.87-1.34 6 6 0 0 1 -1.23-2 7.39 7.39 0 0 1 -.44-2.62 7.56 7.56 0 0 1 .42-2.54 5.8 5.8 0 0 1 1.23-2 5.63 5.63 0 0 1 1.89-1.44 5.82 5.82 0 0 1 2.42-.49 5.91 5.91 0 0 1 2.44.49 5.44 5.44 0 0 1 1.89 1.33 6.12 6.12 0 0 1 1.23 2 7.33 7.33 0 0 1 .42 2.61 7.62 7.62 0 0 1 -.44 2.62m5-7.15a9.91 9.91 0 0 0 -2.39-3.47 10.55 10.55 0 0 0 -3.57-2.21 13.77 13.77 0 0 0 -9.08 0 10.7 10.7 0 0 0 -3.66 2.21 10 10 0 0 0 -2.37 3.45 11.33 11.33 0 0 0 -.89 4.55 11.52 11.52 0 0 0 .86 4.54 10.27 10.27 0 0 0 2.4 3.46 10.57 10.57 0 0 0 3.61 2.26 13.28 13.28 0 0 0 9.08 0 10.43 10.43 0 0 0 3.62-2.26 10.15 10.15 0 0 0 2.43-3.51 11.7 11.7 0 0 0 .86-4.54 11.5 11.5 0 0 0 -.86-4.53"/><path d="m338.41 38.93v-4.31h-9.74v-4.35h8.69v-4.05h-8.69v-3.95h9.19v-4.26h-14.05v20.92zm-19.4-16.61v-4.31h-16.88v4.31h5.91v16.61h5.06v-16.61zm-25.9 8.45h-5.26l2.66-7.17zm8.63 8.16-8.69-20.92h-4.9l-8.78 20.92h5.5l1.54-4.11h8.09l1.63 4.11zm-22.78-16.61v-4.31h-16.87v4.31h5.91v16.61h5.05v-16.61z"/><path d="m230.84 38.93v-20.92h-4.9l.11 13.65h-.08l-8.4-13.65h-5.76v20.92h4.91l-.12-13.68h.07l8.42 13.68zm-25.2 0v-4.31h-9.72v-4.35h8.68v-4.05h-8.68v-4h9.19v-4.21h-14.07v20.92z"/><path d="m181.01 25.71a2.33 2.33 0 0 1 -.81.78 3.69 3.69 0 0 1 -1.17.41 7.48 7.48 0 0 1 -1.36.12h-2.13v-4.93h2.22a9.54 9.54 0 0 1 1.32.09 3.33 3.33 0 0 1 1.13.35 2 2 0 0 1 .8.74 2.21 2.21 0 0 1 .3 1.21 2.34 2.34 0 0 1 -.3 1.23m4.71-4.28a5.36 5.36 0 0 0 -1.74-2 7.72 7.72 0 0 0 -2.6-1.09 14.18 14.18 0 0 0 -3.21-.34h-7.68v20.93h5.05v-7.89h2.52a14 14 0 0 0 3.13-.35 8.07 8.07 0 0 0 2.66-1.13 5.48 5.48 0 0 0 1.83-2 7.43 7.43 0 0 0 0-6.12"/></g></svg> \ No newline at end of file diff --git a/site/static/organisations/razorpay.svg b/site/static/organisations/razorpay.svg index 003a1bfc3d..829adb319e 100644 --- a/site/static/organisations/razorpay.svg +++ b/site/static/organisations/razorpay.svg @@ -1 +1 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="316" height="67" fill="#072654" viewBox="0 0 1896 401"><path fill="#3395FF" d="M122.63 105.7l-15.75 57.97 90.15-58.3-58.96 219.98 59.88.05L285.05.48"/><path d="M25.6 232.92L.8 325.4h122.73l50.22-188.13L25.6 232.92m426.32-81.42c-3 11.15-8.78 19.34-17.4 24.57-8.6 5.22-20.67 7.84-36.25 7.84h-49.5l17.38-64.8h49.5c15.56 0 26.25 2.6 32.05 7.9 5.8 5.3 7.2 13.4 4.22 24.6m51.25-1.4c6.3-23.4 3.7-41.4-7.82-54-11.5-12.5-31.68-18.8-60.48-18.8H324.4l-66.5 248.1h53.67l26.8-100h35.2c7.9 0 14.12 1.3 18.66 3.8 4.55 2.6 7.22 7.1 8.04 13.6l9.58 82.6h57.5l-9.32-77c-1.9-17.2-9.77-27.3-23.6-30.3 17.63-5.1 32.4-13.6 44.3-25.4a92.6 92.6 0 0 0 24.44-42.5m130.46 86.4c-4.5 16.8-11.4 29.5-20.73 38.4-9.34 8.9-20.5 13.3-33.52 13.3-13.26 0-22.25-4.3-27-13-4.76-8.7-4.92-21.3-.5-37.8 4.42-16.5 11.47-29.4 21.17-38.7 9.7-9.3 21.04-13.95 34.06-13.95 13 0 21.9 4.5 26.4 13.43 4.6 8.97 4.7 21.8.2 38.5zm23.52-87.8l-6.72 25.1c-2.9-9-8.53-16.2-16.85-21.6-8.34-5.3-18.66-8-30.97-8-15.1 0-29.6 3.9-43.5 11.7-13.9 7.8-26.1 18.8-36.5 33-10.4 14.2-18 30.3-22.9 48.4-4.8 18.2-5.8 34.1-2.9 47.9 3 13.9 9.3 24.5 19 31.9 9.8 7.5 22.3 11.2 37.6 11.2a82.4 82.4 0 0 0 35.2-7.7 82.11 82.11 0 0 0 28.4-21.2l-7 26.16h51.9L709.3 149h-52zm238.65 0H744.87l-10.55 39.4h87.82l-116.1 100.3-9.92 37h155.8l10.55-39.4h-94.1l117.88-101.8m142.4 52c-4.67 17.4-11.6 30.48-20.75 39-9.15 8.6-20.23 12.9-33.24 12.9-27.2 0-36.14-17.3-26.86-51.9 4.6-17.2 11.56-30.13 20.86-38.84 9.3-8.74 20.57-13.1 33.82-13.1 13 0 21.78 4.33 26.3 13.05 4.52 8.7 4.48 21.67-.13 38.87m30.38-80.83c-11.95-7.44-27.2-11.16-45.8-11.16-18.83 0-36.26 3.7-52.3 11.1a113.09 113.09 0 0 0-41 32.06c-11.3 13.9-19.43 30.2-24.42 48.8-4.9 18.53-5.5 34.8-1.7 48.73 3.8 13.9 11.8 24.6 23.8 32 12.1 7.46 27.5 11.17 46.4 11.17 18.6 0 35.9-3.74 51.8-11.18 15.9-7.48 29.5-18.1 40.8-32.1 11.3-13.94 19.4-30.2 24.4-48.8 5-18.6 5.6-34.84 1.8-48.8-3.8-13.9-11.7-24.6-23.6-32.05m185.1 40.8l13.3-48.1c-4.5-2.3-10.4-3.5-17.8-3.5-11.9 0-23.3 2.94-34.3 8.9-9.46 5.06-17.5 12.2-24.3 21.14l6.9-25.9-15.07.06h-37l-47.7 176.7h52.63l24.75-92.37c3.6-13.43 10.08-24 19.43-31.5 9.3-7.53 20.9-11.3 34.9-11.3 8.6 0 16.6 1.97 24.2 5.9m146.5 41.1c-4.5 16.5-11.3 29.1-20.6 37.8-9.3 8.74-20.5 13.1-33.5 13.1s-21.9-4.4-26.6-13.2c-4.8-8.85-4.9-21.6-.4-38.36 4.5-16.75 11.4-29.6 20.9-38.5 9.5-8.97 20.7-13.45 33.7-13.45 12.8 0 21.4 4.6 26 13.9 4.6 9.3 4.7 22.2.28 38.7m36.8-81.4c-9.75-7.8-22.2-11.7-37.3-11.7-13.23 0-25.84 3-37.8 9.06-11.95 6.05-21.65 14.3-29.1 24.74l.18-1.2 8.83-28.1h-51.4l-13.1 48.9-.4 1.7-54 201.44h52.7l27.2-101.4c2.7 9.02 8.2 16.1 16.6 21.22 8.4 5.1 18.77 7.63 31.1 7.63 15.3 0 29.9-3.7 43.75-11.1 13.9-7.42 25.9-18.1 36.1-31.9 10.2-13.8 17.77-29.8 22.6-47.9 4.9-18.13 5.9-34.3 3.1-48.45-2.85-14.17-9.16-25.14-18.9-32.9m174.65 80.65c-4.5 16.7-11.4 29.5-20.7 38.3-9.3 8.86-20.5 13.27-33.5 13.27-13.3 0-22.3-4.3-27-13-4.8-8.7-4.9-21.3-.5-37.8 4.4-16.5 11.42-29.4 21.12-38.7 9.7-9.3 21.05-13.94 34.07-13.94 13 0 21.8 4.5 26.4 13.4 4.6 8.93 4.63 21.76.15 38.5zm23.5-87.85l-6.73 25.1c-2.9-9.05-8.5-16.25-16.8-21.6-8.4-5.34-18.7-8-31-8-15.1 0-29.68 3.9-43.6 11.7-13.9 7.8-26.1 18.74-36.5 32.9-10.4 14.16-18 30.3-22.9 48.4-4.85 18.17-5.8 34.1-2.9 47.96 2.93 13.8 9.24 24.46 19 31.9 9.74 7.4 22.3 11.14 37.6 11.14 12.3 0 24.05-2.56 35.2-7.7a82.3 82.3 0 0 0 28.33-21.23l-7 26.18h51.9l47.38-176.7h-51.9zm269.87.06l.03-.05h-31.9c-1.02 0-1.92.05-2.85.07h-16.55l-8.5 11.8-2.1 2.8-.9 1.4-67.25 93.68-13.9-109.7h-55.08l27.9 166.7-61.6 85.3h54.9l14.9-21.13c.42-.62.8-1.14 1.3-1.8l17.4-24.7.5-.7 77.93-110.5 65.7-93 .1-.06h-.03z"/></svg> \ No newline at end of file +<svg fill="#072654" height="67" viewBox="0 0 1896 401" width="316" xmlns="http://www.w3.org/2000/svg"><path d="m122.63 105.7-15.75 57.97 90.15-58.3-58.96 219.98 59.88.05 87.1-324.92" fill="#3395ff"/><path d="m25.6 232.92-24.8 92.48h122.73l50.22-188.13zm426.32-81.42c-3 11.15-8.78 19.34-17.4 24.57-8.6 5.22-20.67 7.84-36.25 7.84h-49.5l17.38-64.8h49.5c15.56 0 26.25 2.6 32.05 7.9s7.2 13.4 4.22 24.6m51.25-1.4c6.3-23.4 3.7-41.4-7.82-54-11.5-12.5-31.68-18.8-60.48-18.8h-110.47l-66.5 248.1h53.67l26.8-100h35.2c7.9 0 14.12 1.3 18.66 3.8 4.55 2.6 7.22 7.1 8.04 13.6l9.58 82.6h57.5l-9.32-77c-1.9-17.2-9.77-27.3-23.6-30.3 17.63-5.1 32.4-13.6 44.3-25.4a92.6 92.6 0 0 0 24.44-42.5m130.46 86.4c-4.5 16.8-11.4 29.5-20.73 38.4-9.34 8.9-20.5 13.3-33.52 13.3-13.26 0-22.25-4.3-27-13-4.76-8.7-4.92-21.3-.5-37.8s11.47-29.4 21.17-38.7 21.04-13.95 34.06-13.95c13 0 21.9 4.5 26.4 13.43 4.6 8.97 4.7 21.8.2 38.5zm23.52-87.8-6.72 25.1c-2.9-9-8.53-16.2-16.85-21.6-8.34-5.3-18.66-8-30.97-8-15.1 0-29.6 3.9-43.5 11.7s-26.1 18.8-36.5 33-18 30.3-22.9 48.4c-4.8 18.2-5.8 34.1-2.9 47.9 3 13.9 9.3 24.5 19 31.9 9.8 7.5 22.3 11.2 37.6 11.2a82.4 82.4 0 0 0 35.2-7.7 82.11 82.11 0 0 0 28.4-21.2l-7 26.16h51.9l47.39-176.77h-52zm238.65 0h-150.93l-10.55 39.4h87.82l-116.1 100.3-9.92 37h155.8l10.55-39.4h-94.1l117.88-101.8m142.4 52c-4.67 17.4-11.6 30.48-20.75 39-9.15 8.6-20.23 12.9-33.24 12.9-27.2 0-36.14-17.3-26.86-51.9 4.6-17.2 11.56-30.13 20.86-38.84 9.3-8.74 20.57-13.1 33.82-13.1 13 0 21.78 4.33 26.3 13.05 4.52 8.7 4.48 21.67-.13 38.87m30.38-80.83c-11.95-7.44-27.2-11.16-45.8-11.16-18.83 0-36.26 3.7-52.3 11.1a113.09 113.09 0 0 0 -41 32.06c-11.3 13.9-19.43 30.2-24.42 48.8-4.9 18.53-5.5 34.8-1.7 48.73 3.8 13.9 11.8 24.6 23.8 32 12.1 7.46 27.5 11.17 46.4 11.17 18.6 0 35.9-3.74 51.8-11.18 15.9-7.48 29.5-18.1 40.8-32.1 11.3-13.94 19.4-30.2 24.4-48.8s5.6-34.84 1.8-48.8c-3.8-13.9-11.7-24.6-23.6-32.05m185.1 40.8 13.3-48.1c-4.5-2.3-10.4-3.5-17.8-3.5-11.9 0-23.3 2.94-34.3 8.9-9.46 5.06-17.5 12.2-24.3 21.14l6.9-25.9-15.07.06h-37l-47.7 176.7h52.63l24.75-92.37c3.6-13.43 10.08-24 19.43-31.5 9.3-7.53 20.9-11.3 34.9-11.3 8.6 0 16.6 1.97 24.2 5.9m146.5 41.1c-4.5 16.5-11.3 29.1-20.6 37.8-9.3 8.74-20.5 13.1-33.5 13.1s-21.9-4.4-26.6-13.2c-4.8-8.85-4.9-21.6-.4-38.36 4.5-16.75 11.4-29.6 20.9-38.5 9.5-8.97 20.7-13.45 33.7-13.45 12.8 0 21.4 4.6 26 13.9s4.7 22.2.28 38.7m36.8-81.4c-9.75-7.8-22.2-11.7-37.3-11.7-13.23 0-25.84 3-37.8 9.06-11.95 6.05-21.65 14.3-29.1 24.74l.18-1.2 8.83-28.1h-51.4l-13.1 48.9-.4 1.7-54 201.44h52.7l27.2-101.4c2.7 9.02 8.2 16.1 16.6 21.22 8.4 5.1 18.77 7.63 31.1 7.63 15.3 0 29.9-3.7 43.75-11.1 13.9-7.42 25.9-18.1 36.1-31.9s17.77-29.8 22.6-47.9c4.9-18.13 5.9-34.3 3.1-48.45-2.85-14.17-9.16-25.14-18.9-32.9m174.65 80.65c-4.5 16.7-11.4 29.5-20.7 38.3-9.3 8.86-20.5 13.27-33.5 13.27-13.3 0-22.3-4.3-27-13-4.8-8.7-4.9-21.3-.5-37.8s11.42-29.4 21.12-38.7 21.05-13.94 34.07-13.94c13 0 21.8 4.5 26.4 13.4 4.6 8.93 4.63 21.76.15 38.5zm23.5-87.85-6.73 25.1c-2.9-9.05-8.5-16.25-16.8-21.6-8.4-5.34-18.7-8-31-8-15.1 0-29.68 3.9-43.6 11.7-13.9 7.8-26.1 18.74-36.5 32.9s-18 30.3-22.9 48.4c-4.85 18.17-5.8 34.1-2.9 47.96 2.93 13.8 9.24 24.46 19 31.9 9.74 7.4 22.3 11.14 37.6 11.14 12.3 0 24.05-2.56 35.2-7.7a82.3 82.3 0 0 0 28.33-21.23l-7 26.18h51.9l47.38-176.7h-51.9zm269.87.06.03-.05h-31.9c-1.02 0-1.92.05-2.85.07h-16.55l-8.5 11.8-2.1 2.8-.9 1.4-67.25 93.68-13.9-109.7h-55.08l27.9 166.7-61.6 85.3h54.9l14.9-21.13c.42-.62.8-1.14 1.3-1.8l17.4-24.7.5-.7 77.93-110.5 65.7-93 .1-.06h-.03z"/></svg> \ No newline at end of file diff --git a/site/static/organisations/socialist-party.svg b/site/static/organisations/socialist-party.svg new file mode 100644 index 0000000000..9dde31a5c0 --- /dev/null +++ b/site/static/organisations/socialist-party.svg @@ -0,0 +1 @@ +<svg height="76.6" viewBox="0 0 136.5 76.599998" width="136.5" xmlns="http://www.w3.org/2000/svg"><g fill="#ec1b23" transform="translate(-20.6 -7)"><path d="m36.4 57.2v5.2c0 4.2 1.4 7.9 6.8 7.9 4 0 5.7-3.6 5.7-7.3 0-6.1-5.1-8.5-9.5-11.2-5.3-3-9.7-5.8-12.9-9.5-3.1-3.7-5-8.2-5-14.6 0-13.7 8.3-20.7 21.5-20.7 14.9 0 22.5 9.9 21.7 23.7h-15.8c-.2-4.3 0-10.1-5.6-10.5-3.5-.3-5.5 1.7-5.9 4.9-.5 4.4 1.8 6.6 5.2 9 6.4 4.1 12 6.6 16 10.3s6.3 8.6 6.3 17.4c0 14-7.8 21.8-22 21.8-15.7 0-22.3-8.8-22.3-18.4v-7.8h15.8z"/><path d="m72.8 81.6v-73h20.3c6.6 0 16.2.6 20.9 6 4 4.5 4.8 9.9 4.8 15.9 0 7.9-1.8 16.7-9.6 20.3-5.9 2.9-12.8 2-19.3 2.3v28.4h-17.1zm17.1-41.5c3.2-.1 6.9.3 9.6-1.8 1.8-1.9 2.1-4.9 2.1-7.4 0-2.8-.3-7.1-3.2-8.5-1.7-.6-4-.6-6.7-.6h-1.8z"/><path d="m152.1 54.5c-2.2-2.2-4.8-3.3-7.7-3.3-2.5 0-4.2.8-5.3 1.4-.2.1-.2.3-.2.5l.7 2c.1.2.2.3.4.3h4.3c.2 0 .3.1.4.3s0 .3-.1.4l-3.4 2.5c-.1.1-.2.3-.1.4l1.3 4.1c.1.2 0 .3-.1.4s-.3.1-.4 0l-3.9-2.5c-.1-.1-.3-.1-.4 0l-3.5 2.5c-.1.1-.3.1-.4 0s-.2-.3-.1-.4l1.3-4.1c.1-.2 0-.3-.1-.4l-3.4-2.5c-.1-.1-.2-.3-.1-.4.1-.2.2-.3.4-.3h4.3c.2 0 .3-.1.4-.3l.7-2c.1-.2 0-.4-.2-.5-1.1-.6-2.8-1.4-5.3-1.4-2.9 0-5.6 1.1-7.7 3.3-2.9 2.9-4.6 7.3-4.6 11.9 0 9.4 8.5 17 18.9 17s18.9-7.6 18.9-17c-.4-4.6-2.1-9.1-5-11.9z"/></g></svg> \ No newline at end of file diff --git a/site/static/organisations/stone.svg b/site/static/organisations/stone.svg index 920626ba49..0401dbb292 100644 --- a/site/static/organisations/stone.svg +++ b/site/static/organisations/stone.svg @@ -1 +1 @@ -<svg enable-background="new 0 0 1563.3 590.7" viewBox="0 0 1563.3 700.7" xmlns="http://www.w3.org/2000/svg"><g fill="#0db14b"><path d="m1380.1 270.4-114.7-114.7c-8.8-8.8-8.8-23.1 0-31.9l114.7-114.7c6.3-6.3 17-1.8 17 7v247.2c0 8.9-10.7 13.3-17 7.1z"/><path d="m1431.5 6c-5.7-.4-10.6 4.2-10.6 9.9v53.6c0 4.9 3.5 9.2 8.3 9.8 29.8 4 52.8 29.5 52.8 60.3s-23 56.3-52.8 60.3c-4.8.7-8.3 5-8.3 9.8v53.6c0 5.8 4.9 10.4 10.6 9.9 69.3-5.4 123.9-63.2 123.9-133.6-.1-70.4-54.6-128.2-123.9-133.6z"/><path d="m19.1 549c-7.4-4-13.1-12.5-13.1-23.8 0-15.3 11.9-27.8 27.8-27.8 5.7 0 10.8 1.7 14.8 4 29 19.3 59 28.9 86.3 28.9 29.5 0 46.6-12.5 46.6-32.3v-1.1c0-23.2-31.8-31.2-67-41.9-44.3-12.5-93.7-30.6-93.7-87.8v-1.2c0-56.6 47.1-91.2 106.7-91.2 31.8 0 65.3 9.1 94.2 24.4 9.6 5.1 16.5 14.2 16.5 26.1 0 15.9-12.5 27.8-28.4 27.8-5.7 0-9.1-1.1-13.6-3.4-24.4-12.5-49.4-20.4-70.4-20.4-26.7 0-42 12.5-42 29.5v1.1c0 22.1 32.4 31.2 67.6 42.5 43.7 13.6 93.1 33.4 93.1 87.2v1.1c0 62.9-48.8 94-111.3 94-38.1-.1-79.5-11.9-114.1-35.7"/><path d="m432.4 431.1v-1.1c0-85.5 68.1-156.4 160.1-156.4s159.5 69.7 159.5 155.2v1.1c0 85-68.1 155.8-160.7 155.8-91.4.1-158.9-69.6-158.9-154.6m250.9 0v-1.1c0-52.7-38-96.3-92-96.3-55.1 0-90.3 43.1-90.3 95.2v1.1c0 52.1 38 95.7 91.4 95.7 55.7 0 90.9-43 90.9-94.6"/><path d="m847.9 547.5v-144.1c0-33.7 24.8-63.3 58.4-67 39.7-4.4 73.3 26.5 73.3 65.3v145.9c0 18.9 15.4 34.3 34.3 34.3 19 0 34.3-15.3 34.3-34.3v-139.1c0-74.1-60.2-134.3-134.5-134.3-74.3 0-134.5 60.1-134.5 134.3v139.1c0 18.9 15.4 34.3 34.3 34.3 19-.1 34.4-15.4 34.4-34.4z"/><path d="m402.3 342.2c17.2 0 31.2-13.9 31.2-31.2 0-17.2-14-31.2-31.2-31.2h-52.8v-50.7c0-18.9-15.4-34.3-34.3-34.3-19 0-34.3 15.3-34.3 34.3v81.9 166.2.8 3.5h.2c1.7 55.1 44.2 100 102.5 103.9 1.5.2 3.1.4 4.7.4h13.4c17.6 0 31.9-14.3 31.9-31.9 0-17.6-14.3-31.9-31.9-31.9h-9.3c-24.5 0-42-19.6-42.8-43.3v-136.5z"/><path d="m1190.2 424.4c0 16.3 13.2 29.5 29.5 29.5h76.7 18.4 17c16.3 0 29.5-13.2 29.5-29.5 0-85.5-57.2-150.8-136.8-150.8-90.4 0-152.4 70.8-152.4 156.4v1.1c0 85 66.4 154.7 156.3 154.7 38.7 0 73-12.8 99.7-34 15.2-12.1 15.9-34.9 1.4-47.7-11.9-10.5-29.6-10.2-41.5.3-15 13.3-34.8 21.3-58.5 21.3-52.5 0-89.9-43.6-89.9-95.7v-1.1c0-52.1 29.6-95.2 83.7-95.2 35.8 0 60.9 25.6 70.7 61.3h-74.5c-16.1 0-29.3 13.2-29.3 29.4z"/></g></svg> \ No newline at end of file +<svg enable-background="new 0 0 1563.3 590.7" viewBox="0 0 1563.3 700.7" xmlns="http://www.w3.org/2000/svg"><g fill="#0db14b"><path d="m1380.1 270.4-114.7-114.7c-8.8-8.8-8.8-23.1 0-31.9l114.7-114.7c6.3-6.3 17-1.8 17 7v247.2c0 8.9-10.7 13.3-17 7.1z"/><path d="m1431.5 6c-5.7-.4-10.6 4.2-10.6 9.9v53.6c0 4.9 3.5 9.2 8.3 9.8 29.8 4 52.8 29.5 52.8 60.3s-23 56.3-52.8 60.3c-4.8.7-8.3 5-8.3 9.8v53.6c0 5.8 4.9 10.4 10.6 9.9 69.3-5.4 123.9-63.2 123.9-133.6-.1-70.4-54.6-128.2-123.9-133.6z"/><path d="m19.1 549c-7.4-4-13.1-12.5-13.1-23.8 0-15.3 11.9-27.8 27.8-27.8 5.7 0 10.8 1.7 14.8 4 29 19.3 59 28.9 86.3 28.9 29.5 0 46.6-12.5 46.6-32.3v-1.1c0-23.2-31.8-31.2-67-41.9-44.3-12.5-93.7-30.6-93.7-87.8v-1.2c0-56.6 47.1-91.2 106.7-91.2 31.8 0 65.3 9.1 94.2 24.4 9.6 5.1 16.5 14.2 16.5 26.1 0 15.9-12.5 27.8-28.4 27.8-5.7 0-9.1-1.1-13.6-3.4-24.4-12.5-49.4-20.4-70.4-20.4-26.7 0-42 12.5-42 29.5v1.1c0 22.1 32.4 31.2 67.6 42.5 43.7 13.6 93.1 33.4 93.1 87.2v1.1c0 62.9-48.8 94-111.3 94-38.1-.1-79.5-11.9-114.1-35.7"/><path d="m432.4 431.1v-1.1c0-85.5 68.1-156.4 160.1-156.4s159.5 69.7 159.5 155.2v1.1c0 85-68.1 155.8-160.7 155.8-91.4.1-158.9-69.6-158.9-154.6m250.9 0v-1.1c0-52.7-38-96.3-92-96.3-55.1 0-90.3 43.1-90.3 95.2v1.1c0 52.1 38 95.7 91.4 95.7 55.7 0 90.9-43 90.9-94.6"/><path d="m847.9 547.5v-144.1c0-33.7 24.8-63.3 58.4-67 39.7-4.4 73.3 26.5 73.3 65.3v145.9c0 18.9 15.4 34.3 34.3 34.3 19 0 34.3-15.3 34.3-34.3v-139.1c0-74.1-60.2-134.3-134.5-134.3s-134.5 60.1-134.5 134.3v139.1c0 18.9 15.4 34.3 34.3 34.3 19-.1 34.4-15.4 34.4-34.4z"/><path d="m402.3 342.2c17.2 0 31.2-13.9 31.2-31.2 0-17.2-14-31.2-31.2-31.2h-52.8v-50.7c0-18.9-15.4-34.3-34.3-34.3-19 0-34.3 15.3-34.3 34.3v81.9 166.2.8 3.5h.2c1.7 55.1 44.2 100 102.5 103.9 1.5.2 3.1.4 4.7.4h13.4c17.6 0 31.9-14.3 31.9-31.9s-14.3-31.9-31.9-31.9h-9.3c-24.5 0-42-19.6-42.8-43.3v-136.5z"/><path d="m1190.2 424.4c0 16.3 13.2 29.5 29.5 29.5h76.7 18.4 17c16.3 0 29.5-13.2 29.5-29.5 0-85.5-57.2-150.8-136.8-150.8-90.4 0-152.4 70.8-152.4 156.4v1.1c0 85 66.4 154.7 156.3 154.7 38.7 0 73-12.8 99.7-34 15.2-12.1 15.9-34.9 1.4-47.7-11.9-10.5-29.6-10.2-41.5.3-15 13.3-34.8 21.3-58.5 21.3-52.5 0-89.9-43.6-89.9-95.7v-1.1c0-52.1 29.6-95.2 83.7-95.2 35.8 0 60.9 25.6 70.7 61.3h-74.5c-16.1 0-29.3 13.2-29.3 29.4z"/></g></svg> \ No newline at end of file diff --git a/site/static/organisations/strixcloud.svg b/site/static/organisations/strixcloud.svg new file mode 100644 index 0000000000..49fe96b061 --- /dev/null +++ b/site/static/organisations/strixcloud.svg @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="77.812546" + height="65.824883" + version="1.1" + viewBox="0 0 20.587969 17.416218" + id="svg3851" + sodipodi:docname="strix-logo-web.svg" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + <metadata + id="metadata3855"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1373" + id="namedview3853" + showgrid="false" + inkscape:zoom="12.474013" + inkscape:cx="9.5353719" + inkscape:cy="29.397461" + inkscape:window-x="-9" + inkscape:window-y="-9" + inkscape:window-maximized="1" + inkscape:current-layer="g3849" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + <defs + id="defs3783"> + <linearGradient + id="SVGID_1_" + x1="675.27002" + x2="707.73999" + y1="88.300003" + y2="88.300003" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458,0,0,0.26458,-179.34646,261.28646)"> + <stop + stop-color="#565756" + offset="0" + id="stop3778" + style="stop-color:#ff4081;stop-opacity:0.94117647" /> + <stop + stop-color="#131313" + offset="1" + id="stop3780" /> + </linearGradient> + <linearGradient + id="2" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.71308228,0,0,0.71691205,-280.60594,-94.816757)" + x1="396.64001" + y1="546.10999" + x2="394.41" + y2="538.60999"> + <stop + stop-color="#b7d7e1" + id="stop5184" /> + <stop + offset="1" + stop-color="#fff" + id="stop5186" /> + </linearGradient> + <linearGradient + id="1" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45111156,0,0,0.45353436,-179.31551,50.009071)" + x1="393.82999" + y1="549.46002" + x2="390.45001" + y2="542.88"> + <stop + stop-color="#c3e6ee" + id="stop5179" /> + <stop + offset="1" + stop-color="#fff" + id="stop5181" /> + </linearGradient> + <linearGradient + id="0" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.59937345,0,0,0.60259335,245.86106,-30.678204)" + x1="393.82999" + y1="549.46002" + x2="395.79001" + y2="542.83002"> + <stop + stop-color="#c8e1e8" + id="stop5174" /> + <stop + offset="1" + stop-color="#fff" + id="stop5176" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#SVGID_1_" + id="linearGradient5276" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.26458,0,0,0.26458,-179.34646,261.28646)" + x1="675.27002" + y1="88.300003" + x2="707.73999" + y2="88.300003" /> + </defs> + <g + transform="translate(5.7515037,-283.32597)" + id="g3849"> + <path + id="path5191" + d="m -1.1904367,292.97168 c -0.299931,-0.23541 -0.6770741,-0.37577 -1.0861321,-0.37577 -0.96362,0 -1.7477619,0.77728 -1.7724709,1.7457 -0.994505,0.37715 -1.702464,1.34763 -1.702464,2.48489 0,1.34386 0.987985,2.45401 2.2693799,2.62937 v 0.024 H 5.595054 v -0.004 c 1.265609,-0.0741 2.2693798,-1.13555 2.2693798,-2.4341 0,-1.25223 -0.9334208,-2.2838 -2.1352008,-2.42278 0.0048,-0.0762 0.0076,-0.1534 0.0076,-0.23095 0,-1.94063 -1.6194168,-3.51372 -3.6166637,-3.51372 -1.47837401,0 -2.74878801,0.86205 -3.310556,2.09677" + inkscape:connector-curvature="0" + style="fill:url(#2);stroke-width:0.34316954" /> + <g + id="g5271" + transform="translate(0.795721,0.02191)"> + <polygon + transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)" + class="st9" + points="671.3,126.2 671.8,120.3 674.2,125.4 673.7,131.3 " + id="polygon3805" + style="fill:#567b03" /> + <polygon + transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)" + class="st10" + points="671.3,126.2 671.8,120.3 674.2,125.4 673.7,131.3 " + id="polygon3807" + style="fill:#231815" /> + <g + transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)" + class="st11" + id="g3813" + style="enable-background:new"> + <path + class="st9" + d="m 670.8,127.3 -2.4,-5.1 c 0.3,-1.9 6.9,-37.6 6.8,-37.9 l 2.4,5.1 c 0.2,0.4 -6.4,36.1 -6.8,37.9" + id="path3809" + inkscape:connector-curvature="0" + style="fill:#567b03" /> + <path + class="st10" + d="m 670.8,127.3 -2.4,-5.1 c 0.3,-1.9 6.9,-37.6 6.8,-37.9 l 2.4,5.1 c 0.2,0.4 -6.4,36.1 -6.8,37.9" + id="path3811" + inkscape:connector-curvature="0" + style="fill:#580024;fill-opacity:0.94117647" /> + </g> + <path + sodipodi:nodetypes="ccccccccccc" + class="st12" + d="m 9.695952,294.54416 -0.899572,-0.44978 0.13229,1.56102 c -1.45519,0.13229 -5.000562,0.52916 -5.000562,1.95789 0,-1.42873 -3.545372,-1.58748 -5.000562,-1.61394 l 0.13229,-1.56102 -0.899572,0.52916 c 0.079374,-0.5027 1.82185242,-9.98946 1.79539442,-10.06883 0.52916,0.92603 2.72892358,1.12603 3.97244958,1.07311 1.243526,-0.0529 3.43954,-0.34395 3.9687,-1.29644 0,0.0794 1.71977,9.39259 1.799144,9.86883 z" + id="path3815" + inkscape:connector-curvature="0" + style="fill:#ff4081;fill-opacity:1;stroke-width:0.26458001" /> + <path + class="st13" + d="m -0.040592,284.93991 -0.634992,-1.34936 c 0.52916,0.92603 2.725174,1.08478 3.9687,1.03187 1.243526,-0.0529 3.43954,-0.34396 3.9687,-1.29645 l 0.634992,1.34936 c -0.52916,0.97895 -2.725174,1.26999 -3.9687,1.29644 -1.243526,0.0529 -3.43954,-0.10583 -3.9687,-1.03186 z" + id="path3817" + inkscape:connector-curvature="0" + style="fill:url(#linearGradient5276);stroke-width:0.26458001" /> + <path + class="st6" + d="m 5.727252,286.8978 c -1.005404,0 -1.825602,0.8202 -1.825602,1.8256 0,-1.0054 -0.820198,-1.8256 -1.799144,-1.8256 -0.978946,0 -1.799144,0.8202 -1.799144,1.8256 0,1.00541 0.820198,1.82561 1.799144,1.82561 0.502702,0 0.952488,-0.21167 1.296442,-0.52916 l 0.52916,1.69331 0.52916,-1.69331 c 0.317496,0.34395 0.79374,0.52916 1.296442,0.52916 1.005404,0 1.825602,-0.8202 1.825602,-1.82561 -0.026458,-1.03186 -0.846656,-1.8256 -1.85206,-1.8256 z" + id="path3829" + inkscape:connector-curvature="0" + style="fill:#ffffff;stroke-width:0.26458001" /> + <g + transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)" + id="g3835" + style="fill:#231815"> + <circle + class="st10" + cx="699.40002" + cy="103.7" + r="4.0999999" + id="circle3831" /> + <circle + class="st10" + cx="685.70001" + cy="103.7" + r="4.0999999" + id="circle3833" /> + </g> + <g + transform="matrix(0.26458,0,0,0.26458,-179.32,261.26)" + id="g3841" + style="fill:#ffffff"> + <path + class="st6" + d="m 699.7,122.7 -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 -0.2,0.2 -0.2,0.6 0,0.8 l 3.7,3.7 c 0.2,0.2 0.6,0.2 0.8,0 l 3.3,-3.3 3.3,3.3 c 0.1,0.1 0.3,0.2 0.4,0.2 0.2,0 0.3,-0.1 0.4,-0.2 l 3.7,-3.7 c 0.2,-0.2 0.2,-0.6 0,-0.8 -0.2,-0.2 -0.6,-0.2 -0.8,0 z" + id="path3837" + inkscape:connector-curvature="0" /> + <path + class="st6" + d="m 704.2,116.4 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 l -3.3,3.3 -3.3,-3.3 c -0.2,-0.2 -0.6,-0.2 -0.8,0 -0.2,0.2 -0.2,0.6 0,0.8 l 3.7,3.7 c 0.2,0.2 0.6,0.2 0.8,0 l 3.3,-3.3 3.3,3.3 c 0.1,0.1 0.3,0.2 0.4,0.2 0.2,0 0.3,-0.1 0.4,-0.2 l 3.3,-3.3 3.3,3.3 c 0.2,0.2 0.6,0.2 0.8,0 l 3.7,-3.7 c 0.2,-0.2 0.2,-0.5 0,-0.8 z" + id="path3839" + inkscape:connector-curvature="0" /> + </g> + <circle + class="st16" + cx="5.7272587" + cy="288.69696" + r="1.5874799" + id="circle3843" + style="fill:none;stroke-width:0.26458001" /> + </g> + <path + id="path5193" + d="m -2.5511142,295.33257 c -0.189742,-0.14893 -0.428331,-0.23772 -0.68711,-0.23772 -0.6096081,0 -1.105673,0.49172 -1.121304,1.10437 -0.629146,0.23859 -1.077017,0.85253 -1.077017,1.57199 0,0.85015 0.625021,1.55246 1.4356599,1.6634 v 0.0152 h 5.7424231 v -0.003 c 0.800652,-0.0469 1.435659,-0.71837 1.435659,-1.53986 0,-0.79219 -0.590502,-1.44478 -1.350775,-1.53271 0.003,-0.0482 0.0048,-0.097 0.0048,-0.1461 0,-1.22768 -1.024479,-2.22285 -2.28798204,-2.22285 -0.93525196,0 -1.73894386,0.54534 -2.09433096,1.32646" + inkscape:connector-curvature="0" + style="fill:url(#1);stroke-width:0.21709661" /> + <path + id="path5195" + d="m 11.002773,295.27147 c 0.252287,-0.1981 0.570045,-0.31578 0.912918,-0.31578 0.809914,0 1.468852,0.6533 1.489735,1.46744 0.836159,0.3172 1.431037,1.13163 1.431037,2.08885 0,1.1288 -0.830233,2.06288 -1.907391,2.20991 v 0.0203 H 5.298379 v -0.004 c -1.063895,-0.0624 -1.907391,-0.9544 -1.907391,-2.04595 0,-1.05261 0.784516,-1.91953 1.794793,-2.03608 -0.0042,-0.0641 -0.0065,-0.12896 -0.0065,-0.19415 0,-1.63112 1.361052,-2.95351 3.040143,-2.95351 1.2428086,0 2.311219,0.72441 2.782776,1.76234" + inkscape:connector-curvature="0" + style="fill:url(#0);stroke-width:0.28220019" /> + </g> +</svg> diff --git a/site/static/organisations/sucuri.png b/site/static/organisations/sucuri.png new file mode 100644 index 0000000000..a30b161139 Binary files /dev/null and b/site/static/organisations/sucuri.png differ diff --git a/site/static/organisations/thunderdome.svg b/site/static/organisations/thunderdome.svg new file mode 100644 index 0000000000..0a5d8ee055 --- /dev/null +++ b/site/static/organisations/thunderdome.svg @@ -0,0 +1 @@ +<svg height="60.298889mm" viewBox="0 0 274.77133 60.298889" width="274.77133mm" xmlns="http://www.w3.org/2000/svg"><g stroke="#646464"><g stroke-width="1.8" transform="matrix(.45367544 0 0 .45367544 -18.95927 -52.123469)"><path d="m178.30147 211.4295s-41.87399-81.14294-120.817617-67.37697m-5.94379 67.68201s45.783-83.2982 122.198207-66.72283m-58.28473-25.96854v124.35097m45.89507-84.33553a46.124953 39.331358 0 0 1 -46.12495 39.33136 46.124953 39.331358 0 0 1 -46.124947-39.33136 46.124953 39.331358 0 0 1 46.124947-39.33135 46.124953 39.331358 0 0 1 46.12495 39.33135zm26.30592 22.47508a72.482072 61.806418 0 0 1 -72.48207 61.80641 72.482072 61.806418 0 0 1 -72.482077-61.80641 72.482072 61.806418 0 0 1 72.482077-61.80643 72.482072 61.806418 0 0 1 72.48207 61.80643z" fill="none"/><g fill="#ffdd57"><circle cx="115.33445" cy="198.46136" r="3.950355"/><circle cx="154.28223" cy="179.61028" r="3.950355"/><circle cx="178.06921" cy="211.14809" r="3.950355"/><circle cx="115.79539" cy="242.95314" r="3.950355"/><circle cx="52.719795" cy="211.14809" r="3.950355"/><circle cx="157.48947" cy="142.72708" r="3.950355"/><circle cx="115.2609" cy="151.54697" r="3.950355"/><circle cx="115.2609" cy="119.7419" r="3.950355"/><circle cx="73.834099" cy="142.19254" r="3.950355"/><circle cx="76.506798" cy="178.80847" r="3.950355"/></g></g><g fill="#ffdd57" stroke-width="3.250985" transform="matrix(.22880747 0 0 .22880747 51.447657 -156.935141)"><path d="m99.216 745.60469-7.296 25.92h18.624v113.28h28.416v-113.28h18.624l-6.912-25.92z" stroke-width="3.250985"/><path d="m237.135 745.60469h-28.416v59.52h-15.168v-59.52h-28.416v139.2h28.416v-55.68h15.168v55.68h28.416z" stroke-width="3.250985"/><path d="m-814.90625 747.83984v.0137h-15.81836v97.19726c0 12.68484 4.7555 17.75977 17.91602 17.75977h23.62695c13.16052 0 17.91601-5.07493 17.91602-17.75977v-97.19726h-16.49805v-.0137l-11.50586 40.55664h19.56055l-29.33985 55.51563 7.76758-41.70899h-16.9707l14.60742-54.36328z" stroke-width="2.684779" transform="matrix(1.2108945 0 0 1.2108945 1254.6805 -159.96715)"/><g stroke-width="3.250985"><path d="m332.385 884.80469h25.728v-58.176l14.976 58.176h28.608v-139.2h-28.608v55.872l-14.208-55.872h-26.496z"/><path d="m454.281 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-13.056v-90.432zm30.144-7.488c0-10.176-5.568-16.896-16.512-16.896h-54.528v139.2h49.344c15.936 0 21.696-6.144 21.696-21.504z"/><path d="m495.885 884.80469h52.992l4.8-25.92h-29.184v-30.336h23.04v-24h-23.04v-33.024h30.336l-4.8-25.92h-54.144z"/><path d="m605.982 769.98869c1.92 0 2.688 1.152 2.688 2.88v42.24c0 2.112-.576 2.88-2.688 2.88h-13.632v-48zm30.144-6.336c0-10.944-5.76-18.048-18.816-18.048h-52.8v139.2h27.84v-44.352h3.648l13.44 44.352h28.8l-14.592-44.352c8.064 0 12.48-6.144 12.48-12.288z"/><path d="m689.031 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-13.056v-90.432zm30.144-7.488c0-10.176-5.568-16.896-16.512-16.896h-54.528v139.2h49.344c15.936 0 21.696-6.144 21.696-21.504z"/><path d="m772.107 769.98869c1.92 0 2.496.96 2.496 2.688v84.864c0 2.112-.384 2.88-2.688 2.88h-10.56c-2.304 0-2.688-.768-2.688-2.88v-84.864c0-1.728.576-2.688 2.496-2.688zm30.72-6.336c0-10.944-5.76-18.048-18.816-18.048h-34.56c-13.056 0-18.816 7.104-18.816 18.048v101.376c0 10.56 4.416 19.776 19.968 19.776h32.256c15.552 0 19.968-9.216 19.968-19.776z"/><path d="m858.804 874.82069 17.664-55.68v65.664h27.072v-139.2h-29.568l-15.168 58.752-15.168-58.752h-29.376v139.2h27.072v-65.664z"/><path d="m915.135 884.80469h52.992l4.8-25.92h-29.184v-30.336h23.04v-24h-23.04v-33.024h30.336l-4.8-25.92h-54.144z"/></g></g></g></svg> \ No newline at end of file diff --git a/site/static/organisations/tokopedia.2x.png b/site/static/organisations/tokopedia.2x.png new file mode 100644 index 0000000000..5ba45fdb2b Binary files /dev/null and b/site/static/organisations/tokopedia.2x.png differ diff --git a/site/static/organisations/tokopedia.3x.png b/site/static/organisations/tokopedia.3x.png new file mode 100644 index 0000000000..52b34a0b91 Binary files /dev/null and b/site/static/organisations/tokopedia.3x.png differ diff --git a/site/static/organisations/tokopedia.png b/site/static/organisations/tokopedia.png new file mode 100644 index 0000000000..16fef7fe63 Binary files /dev/null and b/site/static/organisations/tokopedia.png differ diff --git a/site/static/organisations/webdesq.svg b/site/static/organisations/webdesq.svg new file mode 100644 index 0000000000..c9f0012de0 --- /dev/null +++ b/site/static/organisations/webdesq.svg @@ -0,0 +1 @@ +<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4" viewBox="0 0 616 143" xmlns="http://www.w3.org/2000/svg"><path d="m140 38c0-20.8-17.2-38-38-38h-64c-20.7 0-38 17.2-38 38v64c0 20.8 17.2 38 38 38h64c20.8 0 38-17.2 38-38z" fill="#c71a74"/><g fill-rule="nonzero"><path d="m31.6 94a61 61 0 0 1 -17 3.9l2.8 15.6c3 0 6-.5 9.2-1.2l14.6-5c5.4 4.5 11.7 7.9 18.5 9.8 14 4 26.1 2.8 36.5-3.7 10.4-6.4 17.9-17.5 22.4-33.2s4-29-1.3-40a43 43 0 0 0 -28.5-22.4 42.6 42.6 0 0 0 -35.7 4c-10.4 6.4-17.8 17.4-22.3 33.1-2.4 8.3-3.4 16-3 22.9a48 48 0 0 0 3.7 16.2zm17.9-6.7a31 31 0 0 1 -2.2-12.3c0-4.4.8-9.4 2.3-14.8 3.2-11 7.9-18.7 14.1-22.8 6.2-4.2 13-5.2 20.5-3a23.5 23.5 0 0 1 15.7 13.4c3 6.9 3 15.8-.2 26.9-3.2 11.2-8 19-14.2 23.2a22.8 22.8 0 0 1 -27-.3c4.2-1.4 8.6-2.4 13-2.7l-2-12.6c-6.9.5-13.6 2.2-20 4.9z" fill="#fff"/><path d="m161.5 28.6 16.8 55.3h17l5.7-19.4c1.4-5.1 2.6-10.3 3.7-17.2h.2a158 158 0 0 0 3.8 17.3l5.4 19.3h16.9l17.7-55.3h-17.7l-4.8 22a219 219 0 0 0 -3.5 18.9h-.2c-1.1-6.4-2.6-12.6-4.3-18.8l-5.7-22.1h-14.2l-6.1 22.9c-1.3 5.4-3.1 11.7-4.2 18h-.3c-1-6.4-2.1-12.5-3.2-18.1l-4.7-22.8zm144.1 33.2c.3-1.3.6-3.9.6-6.8 0-13.7-7-27.6-25.7-27.6-20 0-29.2 15.5-29.2 29.5 0 17.3 11.2 28.2 30.8 28.2 7.8 0 15-1.2 21-3.5l-2.4-11.7a49.4 49.4 0 0 1 -16 2.4c-8.4 0-15.7-3.4-16.3-10.5zm-37.3-11.8c.5-4.5 3.5-11.2 11.2-11.2 8.2 0 10 7 10 11.2zm46.3 17.4c0 6.2-.3 13-.5 16.5h15.3l.7-7.7h.2c4 6.6 10.6 9 17.3 9 13.3 0 26.4-10 26.4-29.9 0-17-10-28-23.8-28-8 0-14 3.1-17.4 7.9h-.3v-31.7h-17.9v64zm18-15.2c0-1 0-2.1.3-3.1a11 11 0 0 1 10.5-8.5c8.4 0 12.4 6.8 12.4 15.4 0 10-4.7 15.6-12.4 15.6a11 11 0 0 1 -10.9-11.2v-8.1zm88.2-48.7v30h-.2c-2.6-3.6-8-6.1-15.2-6.1-13.8 0-26 10.8-25.9 29.4 0 17.2 11 28.4 24.7 28.4 7.4 0 14.5-3.2 18-9.3h.4l.7 8h16c-.3-3.7-.5-10.3-.5-16.5v-64h-18zm0 55.9c0 1.3 0 2.7-.3 3.8-1.1 5-5.5 8.4-10.5 8.3-7.5 0-12.3-5.9-12.3-15.2 0-8.7 4.1-15.7 12.4-15.7 5.5 0 9.4 3.7 10.5 8.4.2 1 .2 2.1.2 3.1zm81 2.4c.3-1.3.6-3.9.6-6.8 0-13.7-7-27.6-25.7-27.6-20 0-29.2 15.5-29.2 29.5 0 17.3 11.2 28.2 30.8 28.2 7.8 0 15-1.2 21-3.5l-2.4-11.7a49.4 49.4 0 0 1 -16 2.4c-8.3 0-15.7-3.4-16.3-10.5zm-37.3-11.8c.5-4.5 3.6-11.2 11.2-11.2 8.2 0 10 7 10 11.2zm43 31.1c4.4 2.3 11 4 18.6 4 16.6 0 25-7.6 25-18-.2-8-4.6-13.4-15.6-17-7.1-2.3-9.4-3.7-9.4-6.3 0-2.8 2.5-4.4 6.9-4.4 4.8 0 10 1.8 12.5 3l3-11.8a39.3 39.3 0 0 0 -16.1-3.2c-14.3 0-23.5 7.8-23.5 18.2-.1 6.4 4.5 12.6 16.5 16.5 6.6 2 8.4 3.5 8.4 6.3 0 2.9-2.2 4.6-7.7 4.6-5.3 0-12.1-2.2-15.4-4.1l-3.2 12.1zm90.2 25.2h18v-61c0-5.8.2-11.3.3-16.7h-17.3l-.4 6.6-.3-.2c-3.3-5-8.7-7.6-16.1-7.6-12.4 0-25.5 9.8-25.5 29.6 0 17.5 11.3 28.2 23.8 28.2 7.8 0 13.6-3 17.3-8.3h.2zm0-46.2c0 1-.1 2.6-.5 3.7a10.6 10.6 0 0 1 -10.4 7.8c-7.5 0-12.3-6-12.3-15.3 0-9 4.3-15.5 12.5-15.5 5.5 0 9.4 3.8 10.3 8.3.3.8.4 1.8.4 2.7z"/><path d="m166 108.2 7 23.8h4l3.8-11.3c.8-2.6 1.6-5.2 2.1-7.9h.1c.6 2.8 1.3 5.2 2.1 7.8l3.6 11.4h4l7.6-23.8h-4.3l-3.4 12c-.7 2.8-1.4 5.3-1.8 7.6h-.1c-.6-2.6-1.3-5.1-2.1-7.7l-3.7-11.9h-3.6l-3.9 12.1c-.7 2.6-1.5 5.1-2 7.5h-.2c-.4-2.4-1-4.9-1.7-7.5l-3.2-12h-4.3zm57.4 12.7.2-2c0-4.4-2-11.2-9.7-11.2-7 0-11.2 5.6-11.2 12.8 0 7.1 4.4 12 11.7 12 3.7 0 6.3-.9 7.9-1.6l-.8-3c-2 .8-4.3 1.2-6.6 1.2-4.3 0-8-2.4-8-8.2zm-16.5-3.1c.4-3 2.2-7 6.6-7 4.8 0 6 4.3 6 7zm22.3 8-.1 6.2h3.7l.2-4h.1a8.4 8.4 0 0 0 8 4.5c5.2 0 10.6-4.2 10.6-12.7 0-7.2-4.1-12.1-10-12.1-3.8 0-6.5 1.7-8 4.3h-.1v-14.8h-4.3v28.6zm4.4-7.6c0-.7 0-1.3.2-1.8.7-3 3.4-5.3 6.5-5.3 4.6 0 7 4 7 8.9 0 5.4-2.6 9-7.2 9-3 0-5.7-2-6.4-5l-.1-1.5zm53.5 2.7.1-2c0-4.4-2-11.2-9.7-11.2-6.9 0-11.1 5.6-11.1 12.8 0 7.1 4.4 12 11.6 12 3.8 0 6.4-.9 8-1.6l-.9-3c-2 .8-4.3 1.2-6.5 1.2-4.3 0-8-2.4-8-8.2h16.4zm-16.5-3.1c.3-3 2.2-7 6.6-7 4.8 0 6 4.3 5.9 7zm22.3 14.2h4.3v-14.3c0-.7.1-1.5.3-2 .8-2.5 3-4.5 5.8-4.5 4 0 5.4 3.3 5.4 7v13.8h4.3v-14.2c0-8.1-5-10.1-8.3-10.1-4 0-6.7 2.2-7.8 4.4h-.1l-.3-3.9h-3.8c.2 2 .2 4 .2 6.5zm59.1 0v-23.8h-4.3v23.8zm-2.2-27.8h.2c1.4 0 2.5-1.1 2.5-2.5v-.1c0-1.5-1-2.7-2.6-2.7h-.1a2.6 2.6 0 0 0 -2.6 2.6v.2c0 1.4 1.2 2.5 2.6 2.5zm9.7 27.8h4.3v-14.3c0-.7.1-1.5.3-2 .8-2.5 3-4.5 5.8-4.5 4 0 5.4 3.3 5.4 7v13.8h4.3v-14.2c0-8.1-5-10.1-8.3-10.1-4 0-6.7 2.2-7.8 4.4h-.1l-.3-3.9h-3.8c.2 2 .2 4 .2 6.5zm46.5-11.1.1-2c0-4.4-2-11.2-9.7-11.2-6.9 0-11.1 5.6-11.1 12.8 0 7.1 4.4 12 11.6 12 3.8 0 6.4-.9 7.9-1.6l-.8-3c-2 .8-4.3 1.2-6.5 1.2-4.3 0-8-2.4-8-8.2zm-16.5-3.1c.3-3 2.2-7 6.6-7 4.7 0 6 4.3 5.9 7zm41.3 3 .1-2c0-4.3-2-11.1-9.7-11.1-6.9 0-11.1 5.6-11.1 12.8 0 7.1 4.4 12 11.6 12 3.8 0 6.4-.9 8-1.6l-.9-3c-2 .8-4.3 1.2-6.5 1.2-4.3 0-8-2.4-8-8.2h16.5zm-16.5-3c.3-3 2.2-7 6.6-7 4.8 0 6 4.3 5.9 7zm22.3 14.2h4.3v-12.7c0-.7 0-1.4.2-2 .5-3.2 2.7-5.5 5.7-5.5h1.5v-4l-1.2-.1c-2.9 0-5.5 2-6.6 5.2h-.1l-.2-4.7h-3.8c.2 2.2.2 4.6.2 7.4zm20.8 0v-23.8h-4.3v23.8zm-2.2-27.8h.1c1.4 0 2.6-1.1 2.6-2.5v-.1c0-1.5-1-2.7-2.6-2.7h-.1a2.6 2.6 0 0 0 -2.6 2.6v.2c0 1.4 1.1 2.5 2.5 2.5zm9.7 27.8h4.3v-14.3c0-.7 0-1.5.3-2 .8-2.5 3-4.5 5.7-4.5 4 0 5.5 3.3 5.5 7v13.8h4.3v-14.2c0-8.1-5-10.1-8.3-10.1-4 0-6.7 2.2-7.9 4.4l-.3-3.9h-3.8l.2 6.5zm-124.3-17.3c0-2.8 0-4.8.2-6.5h-3.8l-.2 3.6c-1.1-2-3.3-4.1-7.4-4.1-5.5 0-10.7 4.5-10.7 12.5 0 6.7 4.2 11.7 10 11.7 3.7 0 6.3-1.8 7.6-4v2.6c0 6-3.2 8.3-7.6 8.3-3 0-5.3-.9-7-1.9l-1 3.3c2 1.3 5 2 7.9 2 3 0 6.3-.7 8.6-2.8s3.4-5.4 3.4-11zm-4.3 7.1a7 7 0 0 1 -.4 2.3 6.2 6.2 0 0 1 -6 4.5c-4.5 0-6.9-4-6.9-8.5 0-5.6 3-9 7-9 3.2 0 5.3 2 6 4.5.3.6.3 1.3.3 2zm176.3-7c0-3 0-4.9.2-6.6h-3.8l-.2 3.6h-.1c-1-2-3.3-4.1-7.4-4.1-5.4 0-10.7 4.5-10.7 12.5 0 6.7 4.2 11.7 10 11.7 3.8 0 6.3-1.8 7.6-4h.1v2.6c0 6-3.2 8.3-7.6 8.3-3 0-5.4-.9-7-1.9l-1 3.3c1.9 1.3 5 2 7.9 2 3 0 6.3-.7 8.6-2.8 2.2-2.1 3.4-5.4 3.4-11v-13.7zm-4.3 7c0 .8-.1 1.6-.4 2.3a6.2 6.2 0 0 1 -6 4.5c-4.5 0-7-4-7-8.5 0-5.6 3-9 7.1-9 3.2 0 5.2 2 6 4.5.2.6.3 1.3.3 2z" fill="#555"/></g></svg> \ No newline at end of file diff --git a/site/static/repl-runner.js b/site/static/repl-runner.js index 513e1d91e9..721841653d 100644 --- a/site/static/repl-runner.js +++ b/site/static/repl-runner.js @@ -19,7 +19,7 @@ let pending_imports = missing_imports.length; if (missing_imports.length) { - let promise = Promise.all( + const promise = Promise.all( missing_imports.map(id => fetch_import(id).then(() => { pending_imports -= 1; if (progress_func) progress_func(pending_imports); @@ -33,7 +33,7 @@ } function handle_message(ev) { - let { action, cmd_id } = ev.data; + const { action, cmd_id } = ev.data; const send_message = (payload) => parent.postMessage( { ...payload }, ev.origin); const send_reply = (payload) => send_message({ ...payload, cmd_id }); const send_ok = () => send_reply({ action: 'cmd_ok' }); @@ -77,7 +77,7 @@ window.open(el.href, '_blank'); }); send_ok(); - } catch(e) { + } catch (e) { send_error(e.message, e.stack); } } @@ -87,17 +87,17 @@ fetch_imports(imports, (remaining) => { send_message({action: 'fetch_progress', args: { remaining }}); }) - .then(() => { - imports.forEach(x=> { - const module = import_cache[x]; - const name = import_map.get(x); - window[name] = module; + .then(() => { + imports.forEach(x => { + const module = import_cache[x]; + const name = import_map.get(x); + window[name] = module; + }); + send_ok(); + }) + .catch(e => { + send_error(e.message, e.stack); }); - send_ok(); - }) - .catch(e => { - send_error(e.message, e.stack); - }); } } diff --git a/src/compile/nodes/MustacheTag.ts b/src/compile/nodes/MustacheTag.ts deleted file mode 100644 index e668987a9c..0000000000 --- a/src/compile/nodes/MustacheTag.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Tag from './shared/Tag'; - -export default class MustacheTag extends Tag {} \ No newline at end of file diff --git a/src/compile/nodes/RawMustacheTag.ts b/src/compile/nodes/RawMustacheTag.ts deleted file mode 100644 index ada3123410..0000000000 --- a/src/compile/nodes/RawMustacheTag.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Tag from './shared/Tag'; - -export default class RawMustacheTag extends Tag {} \ No newline at end of file diff --git a/src/compile/nodes/Text.ts b/src/compile/nodes/Text.ts deleted file mode 100644 index 1c31c9d83d..0000000000 --- a/src/compile/nodes/Text.ts +++ /dev/null @@ -1,26 +0,0 @@ -import Node from './shared/Node'; -import Component from '../Component'; -import TemplateScope from './shared/TemplateScope'; - -export default class Text extends Node { - type: 'Text'; - data: string; - use_space = false; - - constructor(component: Component, parent: Node, scope: TemplateScope, info: any) { - super(component, parent, scope, info); - this.data = info.data; - - if (!component.component_options.preserveWhitespace && !/\S/.test(info.data)) { - let node = parent; - while (node) { - if (node.type === 'Element' && node.name === 'pre') { - return; - } - node = node.parent; - } - - this.use_space = true; - } - } -} \ No newline at end of file diff --git a/src/compile/render-ssr/handlers/Comment.ts b/src/compile/render-ssr/handlers/Comment.ts deleted file mode 100644 index 4517faace5..0000000000 --- a/src/compile/render-ssr/handlers/Comment.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Renderer from '../Renderer'; -import { CompileOptions } from '../../../interfaces'; - -export default function(node, renderer: Renderer, options: CompileOptions) { - if (options.preserveComments) { - renderer.append(`<!--${node.data}-->`); - } -} \ No newline at end of file diff --git a/src/compile/render-ssr/handlers/Head.ts b/src/compile/render-ssr/handlers/Head.ts deleted file mode 100644 index 656759af3c..0000000000 --- a/src/compile/render-ssr/handlers/Head.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default function(node, renderer, options) { - renderer.append('${($$result.head += `'); - - renderer.render(node.children, options); - - renderer.append('`, "")}'); -} \ No newline at end of file diff --git a/src/compile/render-ssr/handlers/HtmlTag.ts b/src/compile/render-ssr/handlers/HtmlTag.ts deleted file mode 100644 index 7562186a4b..0000000000 --- a/src/compile/render-ssr/handlers/HtmlTag.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { snip } from '../../utils/snip'; - -export default function(node, renderer, options) { - renderer.append('${' + snip(node.expression) + '}'); -} \ No newline at end of file diff --git a/src/compile/render-ssr/handlers/Title.ts b/src/compile/render-ssr/handlers/Title.ts deleted file mode 100644 index 456d4215f1..0000000000 --- a/src/compile/render-ssr/handlers/Title.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default function(node, renderer, options) { - renderer.append(`<title>`); - - renderer.render(node.children, options); - - renderer.append(``); -} \ No newline at end of file diff --git a/src/compile/utils/add_to_set.ts b/src/compile/utils/add_to_set.ts deleted file mode 100644 index 262d7d32e7..0000000000 --- a/src/compile/utils/add_to_set.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default function add_to_set(a: Set, b: Set) { - b.forEach(item => { - a.add(item); - }); -} \ No newline at end of file diff --git a/src/Stats.ts b/src/compiler/Stats.ts similarity index 98% rename from src/Stats.ts rename to src/compiler/Stats.ts index c54f1e8ea9..200fa448e9 100644 --- a/src/Stats.ts +++ b/src/compiler/Stats.ts @@ -5,7 +5,7 @@ const now = (typeof process !== 'undefined' && process.hrtime) } : () => self.performance.now(); -type Timing = { +interface Timing { label: string; start: number; end: number; diff --git a/src/compile/Component.ts b/src/compiler/compile/Component.ts similarity index 85% rename from src/compile/Component.ts rename to src/compiler/compile/Component.ts index 7d4aa72f03..5b08b795ce 100644 --- a/src/compile/Component.ts +++ b/src/compiler/compile/Component.ts @@ -1,4 +1,5 @@ import MagicString, { Bundle } from 'magic-string'; +// @ts-ignore import { walk, childKeys } from 'estree-walker'; import { getLocator } from 'locate-character'; import Stats from '../Stats'; @@ -9,7 +10,7 @@ import { create_scopes, extract_names, Scope, extract_identifiers } from './util import Stylesheet from './css/Stylesheet'; import { test } from '../config'; import Fragment from './nodes/Fragment'; -import internal_exports from './internal-exports'; +import internal_exports from './internal_exports'; import { Node, Ast, CompileOptions, Var, Warning } from '../interfaces'; import error from '../utils/error'; import get_code_frame from '../utils/get_code_frame'; @@ -21,14 +22,15 @@ import { remove_indentation, add_indentation } from '../utils/indentation'; import get_object from './utils/get_object'; import unwrap_parens from './utils/unwrap_parens'; import Slot from './nodes/Slot'; +import { Node as ESTreeNode } from 'estree'; -type ComponentOptions = { +interface ComponentOptions { namespace?: string; tag?: string; immutable?: boolean; accessors?: boolean; preserveWhitespace?: boolean; -}; +} // We need to tell estree-walker that it should always // look for an `else` block, otherwise it might get @@ -95,21 +97,22 @@ export default class Component { node_for_declaration: Map = new Map(); partly_hoisted: string[] = []; fully_hoisted: string[] = []; - reactive_declarations: Array<{ assignees: Set, dependencies: Set, node: Node, declaration: Node }> = []; + reactive_declarations: Array<{ assignees: Set; dependencies: Set; node: Node; declaration: Node }> = []; reactive_declaration_nodes: Set = new Set(); has_reactive_assignments = false; injected_reactive_declaration_vars: Set = new Set(); - helpers: Set = new Set(); + helpers: Map = new Map(); + globals: Map = new Map(); indirect_dependencies: Map> = new Map(); file: string; - locate: (c: number) => { line: number, column: number }; + locate: (c: number) => { line: number; column: number }; // TODO this does the same as component.locate! remove one or the other locator: (search: number, startIndex?: number) => { - line: number, - column: number + line: number; + column: number; }; stylesheet: Stylesheet; @@ -138,6 +141,7 @@ export default class Component { this.compile_options = compile_options; this.file = compile_options.filename && ( + // eslint-disable-next-line no-useless-escape typeof process !== 'undefined' ? compile_options.filename.replace(process.cwd(), '').replace(/^[\/\\]/, '') : compile_options.filename ); this.locate = getLocator(this.source); @@ -152,10 +156,14 @@ export default class Component { this.namespace = namespaces[this.component_options.namespace] || this.component_options.namespace; if (compile_options.customElement) { - this.tag = this.component_options.tag || compile_options.tag; - if (!this.tag) { - throw new Error(`Cannot compile to a custom element without specifying a tag name via options.tag or `); + if (this.component_options.tag === undefined && compile_options.tag === undefined) { + const svelteOptions = ast.html.children.find(child => child.name === 'svelte:options') || { start: 0, end: 0 }; + this.warn(svelteOptions, { + code: 'custom-element-no-tag', + message: `No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use ` + }); } + this.tag = this.component_options.tag || compile_options.tag; } else { this.tag = this.name; } @@ -226,8 +234,15 @@ export default class Component { } helper(name: string) { - this.helpers.add(name); - return this.alias(name); + const alias = this.alias(name); + this.helpers.set(name, alias); + return alias; + } + + global(name: string) { + const alias = this.alias(name); + this.globals.set(name, alias); + return alias; } generate(result: string) { @@ -242,25 +257,31 @@ export default class Component { result = result .replace(/__svelte:self__/g, this.name) - .replace(compile_options.generate === 'ssr' ? /(@+|#+)(\w*(?:-\w*)?)/g : /(@+)(\w*(?:-\w*)?)/g, (match: string, sigil: string, name: string) => { + .replace(compile_options.generate === 'ssr' ? /(@+|#+)(\w*(?:-\w*)?)/g : /(@+)(\w*(?:-\w*)?)/g, (_match: string, sigil: string, name: string) => { if (sigil === '@') { - if (internal_exports.has(name)) { - if (compile_options.dev && internal_exports.has(`${name}Dev`)) name = `${name}Dev`; - this.helpers.add(name); + if (name[0] === '_') { + return this.global(name.slice(1)); + } + + if (!internal_exports.has(name)) { + throw new Error(`compiler error: this shouldn't happen! generated code is trying to use inexistent internal '${name}'`); + } + + if (compile_options.dev && internal_exports.has(`${name}Dev`)) { + name = `${name}Dev`; } - return this.alias(name); + return this.helper(name); } return sigil.slice(1) + name; }); - const imported_helpers = Array.from(this.helpers) - .sort() - .map(name => { - const alias = this.alias(name); - return { name, alias }; - }); + const referenced_globals = Array.from(this.globals, ([name, alias]) => name !== alias && ({ name, alias })).filter(Boolean); + if (referenced_globals.length) { + this.helper('globals'); + } + const imported_helpers = Array.from(this.helpers, ([name, alias]) => ({ name, alias })); const module = create_module( result, @@ -269,6 +290,7 @@ export default class Component { banner, compile_options.sveltePath, imported_helpers, + referenced_globals, this.imports, this.vars.filter(variable => variable.module && variable.export_name).map(variable => ({ name: variable.name, @@ -373,7 +395,7 @@ export default class Component { reserved.forEach(add); internal_exports.forEach(add); - this.var_lookup.forEach((value, key) => add(key)); + this.var_lookup.forEach((_value, key) => add(key)); return (name: string) => { if (test) name = `${name}$`; @@ -392,12 +414,12 @@ export default class Component { error( pos: { - start: number, - end: number + start: number; + end: number; }, - e : { - code: string, - message: string + e: { + code: string; + message: string; } ) { error(e.message, { @@ -412,12 +434,12 @@ export default class Component { warn( pos: { - start: number, - end: number + start: number; + end: number; }, warning: { - code: string, - message: string + code: string; + message: string; } ) { if (!this.locator) { @@ -521,7 +543,7 @@ export default class Component { let result = ''; - script.content.body.forEach((node, i) => { + script.content.body.forEach((node) => { if (this.hoistable_nodes.has(node) || this.reactive_declaration_nodes.has(node)) { if (a !== b) result += `[✂${a}-${b}✂]`; a = node.end; @@ -541,12 +563,24 @@ export default class Component { } walk_module_js() { + const component = this; const script = this.ast.module; if (!script) return; + walk(script.content, { + enter(node) { + if (node.type === 'LabeledStatement' && node.label.name === '$') { + component.warn(node, { + code: 'module-script-reactive-declaration', + message: '$: has no effect in a module script' + }); + } + } + }); + this.add_sourcemap_locations(script.content); - let { scope, globals } = create_scopes(script.content); + const { scope, globals } = create_scopes(script.content); this.module_scope = scope; scope.declarations.forEach((node, name) => { @@ -570,7 +604,7 @@ export default class Component { this.error(node, { code: 'illegal-subscription', message: `Cannot reference store value inside + +
Hello world
+ + diff --git a/test/css/samples/global-keyframes-with-no-elements/expected.css b/test/css/samples/global-keyframes-with-no-elements/expected.css new file mode 100644 index 0000000000..50a57ac471 --- /dev/null +++ b/test/css/samples/global-keyframes-with-no-elements/expected.css @@ -0,0 +1 @@ +@keyframes why{0%{color:red}100%{color:blue}} \ No newline at end of file diff --git a/test/css/samples/global-keyframes-with-no-elements/input.svelte b/test/css/samples/global-keyframes-with-no-elements/input.svelte new file mode 100644 index 0000000000..09499df7ee --- /dev/null +++ b/test/css/samples/global-keyframes-with-no-elements/input.svelte @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/test/css/samples/not-selector/expected.css b/test/css/samples/not-selector/expected.css new file mode 100644 index 0000000000..83a819a9e0 --- /dev/null +++ b/test/css/samples/not-selector/expected.css @@ -0,0 +1 @@ +.svelte-xyz:not(.foo){color:red} \ No newline at end of file diff --git a/test/css/samples/not-selector/input.svelte b/test/css/samples/not-selector/input.svelte new file mode 100644 index 0000000000..31a880f2bb --- /dev/null +++ b/test/css/samples/not-selector/input.svelte @@ -0,0 +1,8 @@ +

foo

+

bar

+ + \ No newline at end of file diff --git a/test/css/samples/unknown-at-rule-with-following-rules/expected.css b/test/css/samples/unknown-at-rule-with-following-rules/expected.css new file mode 100644 index 0000000000..31c3bf9c6f --- /dev/null +++ b/test/css/samples/unknown-at-rule-with-following-rules/expected.css @@ -0,0 +1 @@ +div.svelte-xyz{@apply --funky-div;} \ No newline at end of file diff --git a/test/css/samples/unknown-at-rule-with-following-rules/input.svelte b/test/css/samples/unknown-at-rule-with-following-rules/input.svelte new file mode 100644 index 0000000000..b8947d3545 --- /dev/null +++ b/test/css/samples/unknown-at-rule-with-following-rules/input.svelte @@ -0,0 +1,11 @@ +
+ + \ No newline at end of file diff --git a/test/custom-elements/index.js b/test/custom-elements/index.js index 32e95266ec..9255d33c0e 100644 --- a/test/custom-elements/index.js +++ b/test/custom-elements/index.js @@ -5,6 +5,7 @@ import { rollup } from 'rollup'; import * as virtual from 'rollup-plugin-virtual'; import * as puppeteer from 'puppeteer'; import { addLineNumbers, loadConfig, loadSvelte } from "../helpers.js"; +import { deepEqual } from 'assert'; const page = ` @@ -57,18 +58,20 @@ describe('custom-elements', function() { const solo = /\.solo$/.test(dir); const skip = /\.skip$/.test(dir); - const internal = path.resolve('internal.mjs'); + const internal = path.resolve('internal/index.mjs'); const index = path.resolve('index.mjs'); + const warnings = []; (solo ? it.only : skip ? it.skip : it)(dir, async () => { const config = loadConfig(`./custom-elements/samples/${dir}/_config.js`); + const expected_warnings = config.warnings || []; const bundle = await rollup({ input: `test/custom-elements/samples/${dir}/test.js`, plugins: [ { resolveId(importee) { - if (importee === 'svelte/internal') { + if (importee === 'svelte/internal' || importee === './internal') { return internal; } @@ -84,6 +87,8 @@ describe('custom-elements', function() { dev: config.dev }); + compiled.warnings.forEach(w => warnings.push(w)); + return compiled.js; } } @@ -112,6 +117,16 @@ describe('custom-elements', function() { } catch (err) { console.log(addLineNumbers(code)); throw err; + } finally { + if (expected_warnings) { + deepEqual(warnings.map(w => ({ + code: w.code, + message: w.message, + pos: w.pos, + start: w.start, + end: w.end + })), expected_warnings); + } } }); }); diff --git a/test/custom-elements/samples/no-svelte-options/_config.js b/test/custom-elements/samples/no-svelte-options/_config.js new file mode 100644 index 0000000000..e45582a127 --- /dev/null +++ b/test/custom-elements/samples/no-svelte-options/_config.js @@ -0,0 +1,17 @@ +export default { + warnings: [{ + code: "custom-element-no-tag", + message: "No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use ", + pos: 0, + start: { + character: 0, + column: 0, + line: 1 + }, + end: { + character: 0, + column: 0, + line: 1 + } + }] +}; diff --git a/test/custom-elements/samples/no-svelte-options/main.svelte b/test/custom-elements/samples/no-svelte-options/main.svelte new file mode 100644 index 0000000000..538dc970e9 --- /dev/null +++ b/test/custom-elements/samples/no-svelte-options/main.svelte @@ -0,0 +1,5 @@ + + +

Hello {name}!

diff --git a/test/custom-elements/samples/no-svelte-options/test.js b/test/custom-elements/samples/no-svelte-options/test.js new file mode 100644 index 0000000000..c77f035088 --- /dev/null +++ b/test/custom-elements/samples/no-svelte-options/test.js @@ -0,0 +1,12 @@ +import * as assert from 'assert'; +import CustomElement from './main.svelte'; + +export default function (target) { + customElements.define('no-tag', CustomElement); + target.innerHTML = ``; + + const el = target.querySelector('no-tag'); + const h1 = el.shadowRoot.querySelector('h1'); + + assert.equal(h1.textContent, 'Hello world!'); +} diff --git a/test/custom-elements/samples/no-tag-warning/_config.js b/test/custom-elements/samples/no-tag-warning/_config.js new file mode 100644 index 0000000000..7cdfdbaec6 --- /dev/null +++ b/test/custom-elements/samples/no-tag-warning/_config.js @@ -0,0 +1,17 @@ +export default { + warnings: [{ + code: "custom-element-no-tag", + message: "No custom element 'tag' option was specified. To automatically register a custom element, specify a name with a hyphen in it, e.g. . To hide this warning, use ", + pos: 0, + start: { + character: 0, + column: 0, + line: 1 + }, + end: { + character: 18, + column: 18, + line: 1 + } + }] +}; diff --git a/test/custom-elements/samples/no-tag-warning/main.svelte b/test/custom-elements/samples/no-tag-warning/main.svelte new file mode 100644 index 0000000000..4f7cdc52ca --- /dev/null +++ b/test/custom-elements/samples/no-tag-warning/main.svelte @@ -0,0 +1,7 @@ + + + + +

Hello {name}!

diff --git a/test/custom-elements/samples/no-tag-warning/test.js b/test/custom-elements/samples/no-tag-warning/test.js new file mode 100644 index 0000000000..c77f035088 --- /dev/null +++ b/test/custom-elements/samples/no-tag-warning/test.js @@ -0,0 +1,12 @@ +import * as assert from 'assert'; +import CustomElement from './main.svelte'; + +export default function (target) { + customElements.define('no-tag', CustomElement); + target.innerHTML = ``; + + const el = target.querySelector('no-tag'); + const h1 = el.shadowRoot.querySelector('h1'); + + assert.equal(h1.textContent, 'Hello world!'); +} diff --git a/test/custom-elements/samples/no-tag/_config.js b/test/custom-elements/samples/no-tag/_config.js new file mode 100644 index 0000000000..c81f1a9f82 --- /dev/null +++ b/test/custom-elements/samples/no-tag/_config.js @@ -0,0 +1,3 @@ +export default { + warnings: [] +}; diff --git a/test/custom-elements/samples/no-tag/main.svelte b/test/custom-elements/samples/no-tag/main.svelte new file mode 100644 index 0000000000..031bd93694 --- /dev/null +++ b/test/custom-elements/samples/no-tag/main.svelte @@ -0,0 +1,7 @@ + + + + +

Hello {name}!

diff --git a/test/custom-elements/samples/no-tag/test.js b/test/custom-elements/samples/no-tag/test.js new file mode 100644 index 0000000000..c77f035088 --- /dev/null +++ b/test/custom-elements/samples/no-tag/test.js @@ -0,0 +1,12 @@ +import * as assert from 'assert'; +import CustomElement from './main.svelte'; + +export default function (target) { + customElements.define('no-tag', CustomElement); + target.innerHTML = ``; + + const el = target.querySelector('no-tag'); + const h1 = el.shadowRoot.querySelector('h1'); + + assert.equal(h1.textContent, 'Hello world!'); +} diff --git a/test/helpers.js b/test/helpers.js index e07d7c9b06..514d084698 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -28,7 +28,7 @@ export function exists(path) { export function tryToLoadJson(file) { try { - return JSON.parse(fs.readFileSync(file)); + return JSON.parse(fs.readFileSync(file, 'utf-8')); } catch (err) { if (err.code !== 'ENOENT') throw err; return null; @@ -44,14 +44,21 @@ export function tryToReadFile(file) { } } -export const virtualConsole = new jsdom.VirtualConsole(); -const { window } = new jsdom.JSDOM('
', {virtualConsole}); +const virtualConsole = new jsdom.VirtualConsole(); +virtualConsole.sendTo(console); + +global.window = new jsdom.JSDOM('
', {virtualConsole}).window; global.document = window.document; -global.getComputedStyle = window.getComputedStyle; -global.navigator = {userAgent: 'fake'}; +global.requestAnimationFrame = null; // placeholder, filled in using set_raf + +// add missing ecmascript globals to window +for (const key of Object.getOwnPropertyNames(global)) { + window[key] = window[key] || global[key]; +} export function env() { window._svelteTransitionManager = null; + window.document.title = ''; window.document.body.innerHTML = '
'; return window; @@ -120,7 +127,7 @@ export function normalizeHtml(window, html) { .replace(//g, '') .replace(/>[\s\r\n]+<') .trim(); - cleanChildren(node, ''); + cleanChildren(node); return node.innerHTML.replace(/<\/?noscript\/?>/g, ''); } catch (err) { throw new Error(`Failed to normalize HTML:\n${html}`); diff --git a/test/js/samples/action-custom-event-handler/expected.js b/test/js/samples/action-custom-event-handler/expected.js index 4b758da030..ea55f1629b 100644 --- a/test/js/samples/action-custom-event-handler/expected.js +++ b/test/js/samples/action-custom-event-handler/expected.js @@ -23,7 +23,12 @@ function create_fragment(ctx) { foo_action = foo.call(null, button, ctx.foo_function) || {}; }, - p: noop, + p(changed, ctx) { + if (typeof foo_action.update === 'function' && changed.bar) { + foo_action.update.call(null, ctx.foo_function); + } + }, + i: noop, o: noop, diff --git a/test/js/samples/action/expected.js b/test/js/samples/action/expected.js index cbbcb0d317..ed0a0a7430 100644 --- a/test/js/samples/action/expected.js +++ b/test/js/samples/action/expected.js @@ -1,6 +1,7 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + attr, detach, element, init, @@ -16,7 +17,7 @@ function create_fragment(ctx) { c() { a = element("a"); a.textContent = "Test"; - a.href = "#"; + attr(a, "href", "#"); }, m(target, anchor) { diff --git a/test/js/samples/bind-open/expected.js b/test/js/samples/bind-open/expected.js new file mode 100644 index 0000000000..7c73c8ddac --- /dev/null +++ b/test/js/samples/bind-open/expected.js @@ -0,0 +1,69 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + detach, + element, + init, + insert, + listen, + noop, + safe_not_equal +} from "svelte/internal"; + +function create_fragment(ctx) { + var details, dispose; + + return { + c() { + details = element("details"); + details.innerHTML = `summarycontent + `; + dispose = listen(details, "toggle", ctx.details_toggle_handler); + }, + + m(target, anchor) { + insert(target, details, anchor); + + details.open = ctx.open; + }, + + p(changed, ctx) { + if (changed.open) details.open = ctx.open; + }, + + i: noop, + o: noop, + + d(detaching) { + if (detaching) { + detach(details); + } + + dispose(); + } + }; +} + +function instance($$self, $$props, $$invalidate) { + let { open } = $$props; + + function details_toggle_handler() { + open = this.open; + $$invalidate('open', open); + } + + $$self.$set = $$props => { + if ('open' in $$props) $$invalidate('open', open = $$props.open); + }; + + return { open, details_toggle_handler }; +} + +class Component extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, ["open"]); + } +} + +export default Component; diff --git a/test/js/samples/bind-open/input.svelte b/test/js/samples/bind-open/input.svelte new file mode 100644 index 0000000000..3dd2b03a73 --- /dev/null +++ b/test/js/samples/bind-open/input.svelte @@ -0,0 +1,7 @@ + + +
+ summarycontent +
diff --git a/test/js/samples/collapses-text-around-comments/expected.js b/test/js/samples/collapses-text-around-comments/expected.js index 12164d0579..09b40a1e98 100644 --- a/test/js/samples/collapses-text-around-comments/expected.js +++ b/test/js/samples/collapses-text-around-comments/expected.js @@ -2,6 +2,7 @@ import { SvelteComponent, append, + attr, detach, element, init, @@ -26,7 +27,7 @@ function create_fragment(ctx) { c() { p = element("p"); t = text(ctx.foo); - p.className = "svelte-1a7i8ec"; + attr(p, "class", "svelte-1a7i8ec"); }, m(target, anchor) { diff --git a/test/js/samples/component-static-array/expected.js b/test/js/samples/component-static-array/expected.js index 875c741076..6997f431dd 100644 --- a/test/js/samples/component-static-array/expected.js +++ b/test/js/samples/component-static-array/expected.js @@ -1,10 +1,13 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, init, mount_component, noop, - safe_not_equal + safe_not_equal, + transition_in, + transition_out } from "svelte/internal"; function create_fragment(ctx) { @@ -26,18 +29,18 @@ function create_fragment(ctx) { i(local) { if (current) return; - nested.$$.fragment.i(local); + transition_in(nested.$$.fragment, local); current = true; }, o(local) { - nested.$$.fragment.o(local); + transition_out(nested.$$.fragment, local); current = false; }, d(detaching) { - nested.$destroy(detaching); + destroy_component(nested, detaching); } }; } diff --git a/test/js/samples/component-static-immutable/expected.js b/test/js/samples/component-static-immutable/expected.js index 6612a7f1b6..4b33d537ca 100644 --- a/test/js/samples/component-static-immutable/expected.js +++ b/test/js/samples/component-static-immutable/expected.js @@ -1,10 +1,13 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, init, mount_component, noop, - not_equal + not_equal, + transition_in, + transition_out } from "svelte/internal"; function create_fragment(ctx) { @@ -26,18 +29,18 @@ function create_fragment(ctx) { i(local) { if (current) return; - nested.$$.fragment.i(local); + transition_in(nested.$$.fragment, local); current = true; }, o(local) { - nested.$$.fragment.o(local); + transition_out(nested.$$.fragment, local); current = false; }, d(detaching) { - nested.$destroy(detaching); + destroy_component(nested, detaching); } }; } diff --git a/test/js/samples/component-static-immutable2/expected.js b/test/js/samples/component-static-immutable2/expected.js index 6612a7f1b6..4b33d537ca 100644 --- a/test/js/samples/component-static-immutable2/expected.js +++ b/test/js/samples/component-static-immutable2/expected.js @@ -1,10 +1,13 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, init, mount_component, noop, - not_equal + not_equal, + transition_in, + transition_out } from "svelte/internal"; function create_fragment(ctx) { @@ -26,18 +29,18 @@ function create_fragment(ctx) { i(local) { if (current) return; - nested.$$.fragment.i(local); + transition_in(nested.$$.fragment, local); current = true; }, o(local) { - nested.$$.fragment.o(local); + transition_out(nested.$$.fragment, local); current = false; }, d(detaching) { - nested.$destroy(detaching); + destroy_component(nested, detaching); } }; } diff --git a/test/js/samples/component-static/expected.js b/test/js/samples/component-static/expected.js index 12ebeb28b7..5a031a32a4 100644 --- a/test/js/samples/component-static/expected.js +++ b/test/js/samples/component-static/expected.js @@ -1,10 +1,13 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, init, mount_component, noop, - safe_not_equal + safe_not_equal, + transition_in, + transition_out } from "svelte/internal"; function create_fragment(ctx) { @@ -26,18 +29,18 @@ function create_fragment(ctx) { i(local) { if (current) return; - nested.$$.fragment.i(local); + transition_in(nested.$$.fragment, local); current = true; }, o(local) { - nested.$$.fragment.o(local); + transition_out(nested.$$.fragment, local); current = false; }, d(detaching) { - nested.$destroy(detaching); + destroy_component(nested, detaching); } }; } diff --git a/test/js/samples/css-media-query/expected.js b/test/js/samples/css-media-query/expected.js index d4be134376..82b7c5dfc8 100644 --- a/test/js/samples/css-media-query/expected.js +++ b/test/js/samples/css-media-query/expected.js @@ -2,6 +2,7 @@ import { SvelteComponent, append, + attr, detach, element, init, @@ -23,7 +24,7 @@ function create_fragment(ctx) { return { c() { div = element("div"); - div.className = "svelte-1slhpfn"; + attr(div, "class", "svelte-1slhpfn"); }, m(target, anchor) { diff --git a/test/js/samples/debug-empty/expected.js b/test/js/samples/debug-empty/expected.js index 98c2837ab7..6f07993590 100644 --- a/test/js/samples/debug-empty/expected.js +++ b/test/js/samples/debug-empty/expected.js @@ -65,6 +65,11 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { name } = $$props; + const writable_props = ['name']; + Object.keys($$props).forEach(key => { + if (!writable_props.includes(key) && !key.startsWith('$$')) console.warn(` was created with unknown prop '${key}'`); + }); + $$self.$set = $$props => { if ('name' in $$props) $$invalidate('name', name = $$props.name); }; diff --git a/test/js/samples/debug-foo-bar-baz-things/expected.js b/test/js/samples/debug-foo-bar-baz-things/expected.js index c1391475b2..eea35d5ba7 100644 --- a/test/js/samples/debug-foo-bar-baz-things/expected.js +++ b/test/js/samples/debug-foo-bar-baz-things/expected.js @@ -151,6 +151,11 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { things, foo, bar, baz } = $$props; + const writable_props = ['things', 'foo', 'bar', 'baz']; + Object.keys($$props).forEach(key => { + if (!writable_props.includes(key) && !key.startsWith('$$')) console.warn(` was created with unknown prop '${key}'`); + }); + $$self.$set = $$props => { if ('things' in $$props) $$invalidate('things', things = $$props.things); if ('foo' in $$props) $$invalidate('foo', foo = $$props.foo); diff --git a/test/js/samples/debug-foo/expected.js b/test/js/samples/debug-foo/expected.js index f5daa7dad7..5b931d9464 100644 --- a/test/js/samples/debug-foo/expected.js +++ b/test/js/samples/debug-foo/expected.js @@ -151,6 +151,11 @@ function create_fragment(ctx) { function instance($$self, $$props, $$invalidate) { let { things, foo } = $$props; + const writable_props = ['things', 'foo']; + Object.keys($$props).forEach(key => { + if (!writable_props.includes(key) && !key.startsWith('$$')) console.warn(` was created with unknown prop '${key}'`); + }); + $$self.$set = $$props => { if ('things' in $$props) $$invalidate('things', things = $$props.things); if ('foo' in $$props) $$invalidate('foo', foo = $$props.foo); diff --git a/test/js/samples/debug-hoisted/_config.js b/test/js/samples/debug-hoisted/_config.js new file mode 100644 index 0000000000..414b026a97 --- /dev/null +++ b/test/js/samples/debug-hoisted/_config.js @@ -0,0 +1,5 @@ +export default { + options: { + dev: true + } +}; diff --git a/test/js/samples/debug-hoisted/expected.js b/test/js/samples/debug-hoisted/expected.js new file mode 100644 index 0000000000..51d8bf63a3 --- /dev/null +++ b/test/js/samples/debug-hoisted/expected.js @@ -0,0 +1,56 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponentDev, + init, + noop, + safe_not_equal +} from "svelte/internal"; + +const file = undefined; + +function create_fragment(ctx) { + return { + c: function create() { + { + const { obj } = ctx; + console.log({ obj, kobzol }); + debugger; + } + }, + + l: function claim(nodes) { + throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option"); + }, + + m: noop, + + p: function update(changed, ctx) { + if (changed.obj || changed.kobzol) { + const { obj } = ctx; + console.log({ obj, kobzol }); + debugger; + } + }, + + i: noop, + o: noop, + d: noop + }; +} + +let kobzol = 5; + +function instance($$self) { + let obj = { x: 5 }; + + return { obj }; +} + +class Component extends SvelteComponentDev { + constructor(options) { + super(options); + init(this, options, instance, create_fragment, safe_not_equal, []); + } +} + +export default Component; \ No newline at end of file diff --git a/test/js/samples/debug-hoisted/input.svelte b/test/js/samples/debug-hoisted/input.svelte new file mode 100644 index 0000000000..94d584ccac --- /dev/null +++ b/test/js/samples/debug-hoisted/input.svelte @@ -0,0 +1,6 @@ + + +{@debug obj, kobzol} diff --git a/test/js/samples/dev-warning-missing-data-computed/expected.js b/test/js/samples/dev-warning-missing-data-computed/expected.js index 12e8a983d0..5c4b2ece1b 100644 --- a/test/js/samples/dev-warning-missing-data-computed/expected.js +++ b/test/js/samples/dev-warning-missing-data-computed/expected.js @@ -65,6 +65,11 @@ function instance($$self, $$props, $$invalidate) { let bar; + const writable_props = ['foo']; + Object.keys($$props).forEach(key => { + if (!writable_props.includes(key) && !key.startsWith('$$')) console.warn(` was created with unknown prop '${key}'`); + }); + $$self.$set = $$props => { if ('foo' in $$props) $$invalidate('foo', foo = $$props.foo); }; diff --git a/test/js/samples/dynamic-import/expected.js b/test/js/samples/dynamic-import/expected.js index 2d51bcf60d..9a6a67bcd9 100644 --- a/test/js/samples/dynamic-import/expected.js +++ b/test/js/samples/dynamic-import/expected.js @@ -1,10 +1,13 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, init, mount_component, noop, - safe_not_equal + safe_not_equal, + transition_in, + transition_out } from "svelte/internal"; import LazyLoad from "./LazyLoad.svelte"; @@ -27,18 +30,18 @@ function create_fragment(ctx) { i(local) { if (current) return; - lazyload.$$.fragment.i(local); + transition_in(lazyload.$$.fragment, local); current = true; }, o(local) { - lazyload.$$.fragment.o(local); + transition_out(lazyload.$$.fragment, local); current = false; }, d(detaching) { - lazyload.$destroy(detaching); + destroy_component(lazyload, detaching); } }; } diff --git a/test/js/samples/each-block-changed-check/expected.js b/test/js/samples/each-block-changed-check/expected.js index 951565bae4..b4d4577df3 100644 --- a/test/js/samples/each-block-changed-check/expected.js +++ b/test/js/samples/each-block-changed-check/expected.js @@ -2,6 +2,7 @@ import { SvelteComponent, append, + attr, destroy_each, detach, detach_after, @@ -39,8 +40,8 @@ function create_each_block(ctx) { t5 = text(" ago:"); t6 = space(); raw_before = element('noscript'); - span.className = "meta"; - div.className = "comment"; + attr(span, "class", "meta"); + attr(div, "class", "comment"); }, m(target, anchor) { diff --git a/test/js/samples/each-block-keyed-animated/expected.js b/test/js/samples/each-block-keyed-animated/expected.js index d18c569fa1..ec28e60d5f 100644 --- a/test/js/samples/each-block-keyed-animated/expected.js +++ b/test/js/samples/each-block-keyed-animated/expected.js @@ -6,7 +6,7 @@ import { detach, element, empty, - fix_and_outro_and_destroy_block, + fix_and_destroy_block, fix_position, init, insert, @@ -100,7 +100,7 @@ function create_fragment(ctx) { p(changed, ctx) { const each_value = ctx.things; for (let i = 0; i < each_blocks.length; i += 1) each_blocks[i].r(); - each_blocks = update_keyed_each(each_blocks, changed, get_key, 1, ctx, each_value, each_1_lookup, each_1_anchor.parentNode, fix_and_outro_and_destroy_block, create_each_block, each_1_anchor, get_each_context); + each_blocks = update_keyed_each(each_blocks, changed, get_key, 1, ctx, each_value, each_1_lookup, each_1_anchor.parentNode, fix_and_destroy_block, create_each_block, each_1_anchor, get_each_context); for (let i = 0; i < each_blocks.length; i += 1) each_blocks[i].a(); }, diff --git a/test/js/samples/event-handler-no-passive/expected.js b/test/js/samples/event-handler-no-passive/expected.js index 41fcbeeb2a..e8ca72c556 100644 --- a/test/js/samples/event-handler-no-passive/expected.js +++ b/test/js/samples/event-handler-no-passive/expected.js @@ -1,6 +1,7 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + attr, detach, element, init, @@ -17,7 +18,7 @@ function create_fragment(ctx) { c() { a = element("a"); a.textContent = "this should not navigate to example.com"; - a.href = "https://example.com"; + attr(a, "href", "https://example.com"); dispose = listen(a, "touchstart", touchstart_handler); }, diff --git a/test/js/samples/head-no-whitespace/expected.js b/test/js/samples/head-no-whitespace/expected.js index b95177bba7..457df77dc8 100644 --- a/test/js/samples/head-no-whitespace/expected.js +++ b/test/js/samples/head-no-whitespace/expected.js @@ -2,6 +2,7 @@ import { SvelteComponent, append, + attr, detach, element, init, @@ -16,10 +17,10 @@ function create_fragment(ctx) { c() { meta0 = element("meta"); meta1 = element("meta"); - meta0.name = "twitter:creator"; - meta0.content = "@sveltejs"; - meta1.name = "twitter:title"; - meta1.content = "Svelte"; + attr(meta0, "name", "twitter:creator"); + attr(meta0, "content", "@sveltejs"); + attr(meta1, "name", "twitter:title"); + attr(meta1, "content", "Svelte"); }, m(target, anchor) { diff --git a/test/js/samples/inline-style-unoptimized/expected.js b/test/js/samples/inline-style-unoptimized/expected.js index 8f3b668827..9349ade12c 100644 --- a/test/js/samples/inline-style-unoptimized/expected.js +++ b/test/js/samples/inline-style-unoptimized/expected.js @@ -1,6 +1,7 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + attr, detach, element, init, @@ -18,8 +19,8 @@ function create_fragment(ctx) { div0 = element("div"); t = space(); div1 = element("div"); - div0.style.cssText = ctx.style; - div1.style.cssText = div1_style_value = "" + ctx.key + ": " + ctx.value; + attr(div0, "style", ctx.style); + attr(div1, "style", div1_style_value = "" + ctx.key + ": " + ctx.value); }, m(target, anchor) { @@ -30,11 +31,11 @@ function create_fragment(ctx) { p(changed, ctx) { if (changed.style) { - div0.style.cssText = ctx.style; + attr(div0, "style", ctx.style); } if ((changed.key || changed.value) && div1_style_value !== (div1_style_value = "" + ctx.key + ": " + ctx.value)) { - div1.style.cssText = div1_style_value; + attr(div1, "style", div1_style_value); } }, diff --git a/test/js/samples/media-bindings/expected.js b/test/js/samples/media-bindings/expected.js index 8a193f698b..f45f9ce8db 100644 --- a/test/js/samples/media-bindings/expected.js +++ b/test/js/samples/media-bindings/expected.js @@ -8,6 +8,7 @@ import { insert, listen, noop, + raf, run_all, safe_not_equal, time_ranges_to_array @@ -18,7 +19,7 @@ function create_fragment(ctx) { function audio_timeupdate_handler() { cancelAnimationFrame(audio_animationframe); - if (!audio.paused) audio_animationframe = requestAnimationFrame(audio_timeupdate_handler); + if (!audio.paused) audio_animationframe = raf(audio_timeupdate_handler); audio_updating = true; ctx.audio_timeupdate_handler.call(audio); } diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js index 20ac461c76..42a21aa496 100644 --- a/test/js/samples/non-imported-component/expected.js +++ b/test/js/samples/non-imported-component/expected.js @@ -1,13 +1,16 @@ /* generated by Svelte vX.Y.Z */ import { SvelteComponent, + destroy_component, detach, init, insert, mount_component, noop, safe_not_equal, - space + space, + transition_in, + transition_out } from "svelte/internal"; import Imported from "Imported.svelte"; @@ -36,27 +39,27 @@ function create_fragment(ctx) { i(local) { if (current) return; - imported.$$.fragment.i(local); + transition_in(imported.$$.fragment, local); - nonimported.$$.fragment.i(local); + transition_in(nonimported.$$.fragment, local); current = true; }, o(local) { - imported.$$.fragment.o(local); - nonimported.$$.fragment.o(local); + transition_out(imported.$$.fragment, local); + transition_out(nonimported.$$.fragment, local); current = false; }, d(detaching) { - imported.$destroy(detaching); + destroy_component(imported, detaching); if (detaching) { detach(t); } - nonimported.$destroy(detaching); + destroy_component(nonimported, detaching); } }; } diff --git a/test/js/samples/reactive-values-non-topologically-ordered/expected.js b/test/js/samples/reactive-values-non-topologically-ordered/expected.js index 2f729362b0..b5e2b04f75 100644 --- a/test/js/samples/reactive-values-non-topologically-ordered/expected.js +++ b/test/js/samples/reactive-values-non-topologically-ordered/expected.js @@ -29,7 +29,7 @@ function instance($$self, $$props, $$invalidate) { $$self.$$.update = ($$dirty = { x: 1, b: 1 }) => { if ($$dirty.x) { $$invalidate('b', b = x); } - if ($$dirty.b) { $$invalidate('a', a = b); } + if ($$dirty.b) { a = b; } }; return { x }; diff --git a/test/js/samples/reactive-values-non-writable-dependencies/expected.js b/test/js/samples/reactive-values-non-writable-dependencies/expected.js index 62057cc6f0..8958f1ffbc 100644 --- a/test/js/samples/reactive-values-non-writable-dependencies/expected.js +++ b/test/js/samples/reactive-values-non-writable-dependencies/expected.js @@ -17,26 +17,25 @@ function create_fragment(ctx) { }; } -let a = 1; - -let b = 2; - function instance($$self, $$props, $$invalidate) { - + let { a = 1, b = 2 } = $$props; - let max; + $$self.$set = $$props => { + if ('a' in $$props) $$invalidate('a', a = $$props.a); + if ('b' in $$props) $$invalidate('b', b = $$props.b); + }; $$self.$$.update = ($$dirty = { a: 1, b: 1 }) => { - if ($$dirty.a || $$dirty.b) { $$invalidate('max', max = Math.max(a, b)); } + if ($$dirty.a || $$dirty.b) { console.log('max', Math.max(a, b)); } }; - return {}; + return { a, b }; } class Component extends SvelteComponent { constructor(options) { super(); - init(this, options, instance, create_fragment, safe_not_equal, []); + init(this, options, instance, create_fragment, safe_not_equal, ["a", "b"]); } } diff --git a/test/js/samples/reactive-values-non-writable-dependencies/input.svelte b/test/js/samples/reactive-values-non-writable-dependencies/input.svelte index 8e3397e40d..3fb70d5e8f 100644 --- a/test/js/samples/reactive-values-non-writable-dependencies/input.svelte +++ b/test/js/samples/reactive-values-non-writable-dependencies/input.svelte @@ -1,7 +1,6 @@ \ No newline at end of file diff --git a/test/js/samples/transition-local/expected.js b/test/js/samples/transition-local/expected.js index 2df99a4c87..53bce5f5d0 100644 --- a/test/js/samples/transition-local/expected.js +++ b/test/js/samples/transition-local/expected.js @@ -9,7 +9,8 @@ import { init, insert, noop, - safe_not_equal + safe_not_equal, + transition_in } from "svelte/internal"; // (8:0) {#if x} @@ -34,10 +35,10 @@ function create_if_block(ctx) { if (!if_block) { if_block = create_if_block_1(ctx); if_block.c(); - if_block.i(1); + transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } else { - if_block.i(1); + transition_in(if_block, 1); } } else if (if_block) { if_block.d(1); diff --git a/test/js/samples/transition-repeated-outro/expected.js b/test/js/samples/transition-repeated-outro/expected.js new file mode 100644 index 0000000000..8543d0029b --- /dev/null +++ b/test/js/samples/transition-repeated-outro/expected.js @@ -0,0 +1,129 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + check_outros, + create_out_transition, + detach, + element, + empty, + group_outros, + init, + insert, + safe_not_equal, + transition_in, + transition_out +} from "svelte/internal"; +import { fade } from "svelte/transition"; + +// (7:0) {#if num < 5} +function create_if_block(ctx) { + var div, div_outro, current; + + return { + c() { + div = element("div"); + div.innerHTML = `

wheeee

`; + }, + + m(target, anchor) { + insert(target, div, anchor); + current = true; + }, + + i(local) { + if (current) return; + if (div_outro) div_outro.end(1); + + current = true; + }, + + o(local) { + div_outro = create_out_transition(div, fade, {}); + + current = false; + }, + + d(detaching) { + if (detaching) { + detach(div); + if (div_outro) div_outro.end(); + } + } + }; +} + +function create_fragment(ctx) { + var if_block_anchor, current; + + var if_block = (ctx.num < 5) && create_if_block(ctx); + + return { + c() { + if (if_block) if_block.c(); + if_block_anchor = empty(); + }, + + m(target, anchor) { + if (if_block) if_block.m(target, anchor); + insert(target, if_block_anchor, anchor); + current = true; + }, + + p(changed, ctx) { + if (ctx.num < 5) { + if (!if_block) { + if_block = create_if_block(ctx); + if_block.c(); + transition_in(if_block, 1); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } else { + transition_in(if_block, 1); + } + } else if (if_block) { + group_outros(); + transition_out(if_block, 1, 1, () => { + if_block = null; + }); + check_outros(); + } + }, + + i(local) { + if (current) return; + transition_in(if_block); + current = true; + }, + + o(local) { + transition_out(if_block); + current = false; + }, + + d(detaching) { + if (if_block) if_block.d(detaching); + + if (detaching) { + detach(if_block_anchor); + } + } + }; +} + +function instance($$self, $$props, $$invalidate) { + let { num = 1 } = $$props; + + $$self.$set = $$props => { + if ('num' in $$props) $$invalidate('num', num = $$props.num); + }; + + return { num }; +} + +class Component extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, ["num"]); + } +} + +export default Component; \ No newline at end of file diff --git a/test/js/samples/transition-repeated-outro/input.svelte b/test/js/samples/transition-repeated-outro/input.svelte new file mode 100644 index 0000000000..d5114846b8 --- /dev/null +++ b/test/js/samples/transition-repeated-outro/input.svelte @@ -0,0 +1,11 @@ + + +{#if num < 5} +
+

wheeee

+
+{/if} \ No newline at end of file diff --git a/test/js/samples/unreferenced-state-not-invalidated/expected.js b/test/js/samples/unreferenced-state-not-invalidated/expected.js new file mode 100644 index 0000000000..17b5638a84 --- /dev/null +++ b/test/js/samples/unreferenced-state-not-invalidated/expected.js @@ -0,0 +1,78 @@ +/* generated by Svelte vX.Y.Z */ +import { + SvelteComponent, + append, + detach, + element, + init, + insert, + noop, + safe_not_equal, + set_data, + text +} from "svelte/internal"; +import { onMount } from "svelte"; + +function create_fragment(ctx) { + var p, t; + + return { + c() { + p = element("p"); + t = text(ctx.y); + }, + + m(target, anchor) { + insert(target, p, anchor); + append(p, t); + }, + + p(changed, ctx) { + if (changed.y) { + set_data(t, ctx.y); + } + }, + + i: noop, + o: noop, + + d(detaching) { + if (detaching) { + detach(p); + } + } + }; +} + +function instance($$self, $$props, $$invalidate) { + let a, b, c; + + onMount(() => { + const interval = setInterval(() => { + $$invalidate('b', b += 1); + c += 1; + + console.log(b, c); + }, 1000); + + return () => clearInterval(interval); + }); + + let x, y; + + $$self.$$.update = ($$dirty = { a: 1, b: 1 }) => { + if ($$dirty.a) { x = a * 2; } + if ($$dirty.b) { $$invalidate('y', y = b * 2); } + }; + + return { y }; +} + +class Component extends SvelteComponent { + constructor(options) { + super(); + init(this, options, instance, create_fragment, safe_not_equal, []); + } +} + +export default Component; \ No newline at end of file diff --git a/test/js/samples/unreferenced-state-not-invalidated/input.svelte b/test/js/samples/unreferenced-state-not-invalidated/input.svelte new file mode 100644 index 0000000000..fff60f181d --- /dev/null +++ b/test/js/samples/unreferenced-state-not-invalidated/input.svelte @@ -0,0 +1,21 @@ + + +

{y}

\ No newline at end of file diff --git a/test/js/samples/window-binding-scroll/expected.js b/test/js/samples/window-binding-scroll/expected.js index 18f5210bea..fbe4596e2b 100644 --- a/test/js/samples/window-binding-scroll/expected.js +++ b/test/js/samples/window-binding-scroll/expected.js @@ -42,7 +42,7 @@ function create_fragment(ctx) { if (changed.y && !scrolling) { scrolling = true; clearTimeout(scrolling_timeout); - window.scrollTo(window.pageXOffset, ctx.y); + scrollTo(window.pageXOffset, ctx.y); scrolling_timeout = setTimeout(clear_scrolling, 100); } diff --git a/test/parser/samples/action-with-call/output.json b/test/parser/samples/action-with-call/output.json index d6aaa72892..e910f0b49f 100644 --- a/test/parser/samples/action-with-call/output.json +++ b/test/parser/samples/action-with-call/output.json @@ -41,8 +41,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/action-with-identifier/output.json b/test/parser/samples/action-with-identifier/output.json index d58b9097b7..435aee4444 100644 --- a/test/parser/samples/action-with-identifier/output.json +++ b/test/parser/samples/action-with-identifier/output.json @@ -27,8 +27,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/action-with-literal/output.json b/test/parser/samples/action-with-literal/output.json index 4a6f596d10..01a6b67549 100644 --- a/test/parser/samples/action-with-literal/output.json +++ b/test/parser/samples/action-with-literal/output.json @@ -28,8 +28,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/action/output.json b/test/parser/samples/action/output.json index 2f553b5efa..9828e200dd 100644 --- a/test/parser/samples/action/output.json +++ b/test/parser/samples/action/output.json @@ -22,8 +22,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/animation/output.json b/test/parser/samples/animation/output.json index 8332b3ad04..f4d183eb5c 100644 --- a/test/parser/samples/animation/output.json +++ b/test/parser/samples/animation/output.json @@ -35,6 +35,7 @@ "start": 51, "end": 56, "type": "Text", + "raw": "flips", "data": "flips" } ] @@ -54,8 +55,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-containing-solidus/output.json b/test/parser/samples/attribute-containing-solidus/output.json index 95372bd77d..f1158b4f50 100644 --- a/test/parser/samples/attribute-containing-solidus/output.json +++ b/test/parser/samples/attribute-containing-solidus/output.json @@ -20,6 +20,7 @@ "start": 8, "end": 30, "type": "Text", + "raw": "https://www.google.com", "data": "https://www.google.com" } ] @@ -30,13 +31,11 @@ "start": 31, "end": 37, "type": "Text", + "raw": "Google", "data": "Google" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-dynamic-boolean/output.json b/test/parser/samples/attribute-dynamic-boolean/output.json index 81a19f49b9..478144152a 100644 --- a/test/parser/samples/attribute-dynamic-boolean/output.json +++ b/test/parser/samples/attribute-dynamic-boolean/output.json @@ -33,8 +33,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-dynamic-reserved/output.json b/test/parser/samples/attribute-dynamic-reserved/output.json index 3a830d448f..22be3c9087 100644 --- a/test/parser/samples/attribute-dynamic-reserved/output.json +++ b/test/parser/samples/attribute-dynamic-reserved/output.json @@ -33,8 +33,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-dynamic/output.json b/test/parser/samples/attribute-dynamic/output.json index 50d8ec60a5..a48f376876 100644 --- a/test/parser/samples/attribute-dynamic/output.json +++ b/test/parser/samples/attribute-dynamic/output.json @@ -18,8 +18,9 @@ "value": [ { "start": 12, - "end": 19, + "end": 20, "type": "Text", + "raw": "color: ", "data": "color: " }, { @@ -37,6 +38,7 @@ "start": 26, "end": 27, "type": "Text", + "raw": ";", "data": ";" } ] @@ -57,8 +59,5 @@ ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-escaped/input.svelte b/test/parser/samples/attribute-escaped/input.svelte index 82186dcee4..4c9cd5ff68 100644 --- a/test/parser/samples/attribute-escaped/input.svelte +++ b/test/parser/samples/attribute-escaped/input.svelte @@ -1 +1 @@ -
+
diff --git a/test/parser/samples/attribute-escaped/output.json b/test/parser/samples/attribute-escaped/output.json index 6a4143e674..a8498bd574 100644 --- a/test/parser/samples/attribute-escaped/output.json +++ b/test/parser/samples/attribute-escaped/output.json @@ -1,26 +1,27 @@ { "html": { "start": 0, - "end": 41, + "end": 83, "type": "Fragment", "children": [ { "start": 0, - "end": 41, + "end": 83, "type": "Element", "name": "div", "attributes": [ { "start": 5, - "end": 34, + "end": 76, "type": "Attribute", "name": "data-foo", "value": [ { "start": 15, - "end": 33, + "end": 75, "type": "Text", - "data": "\"quoted\"" + "raw": "semi:"space:" letter:"e number:"1 end:"", + "data": "semi:\"space:\" letter:"e number:"1 end:\"" } ] } @@ -28,8 +29,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-multiple/output.json b/test/parser/samples/attribute-multiple/output.json index 668409c0ef..c4be13e6ee 100644 --- a/test/parser/samples/attribute-multiple/output.json +++ b/test/parser/samples/attribute-multiple/output.json @@ -20,6 +20,7 @@ "start": 9, "end": 10, "type": "Text", + "raw": "x", "data": "x" } ] @@ -34,6 +35,7 @@ "start": 19, "end": 20, "type": "Text", + "raw": "y", "data": "y" } ] @@ -42,8 +44,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-shorthand/output.json b/test/parser/samples/attribute-shorthand/output.json index 08ddf5eda9..f23e62b04e 100644 --- a/test/parser/samples/attribute-shorthand/output.json +++ b/test/parser/samples/attribute-shorthand/output.json @@ -33,8 +33,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-static-boolean/output.json b/test/parser/samples/attribute-static-boolean/output.json index f63b5734e0..7d635004c1 100644 --- a/test/parser/samples/attribute-static-boolean/output.json +++ b/test/parser/samples/attribute-static-boolean/output.json @@ -21,8 +21,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-static/output.json b/test/parser/samples/attribute-static/output.json index 3185e48736..37b41d9a89 100644 --- a/test/parser/samples/attribute-static/output.json +++ b/test/parser/samples/attribute-static/output.json @@ -20,6 +20,7 @@ "start": 12, "end": 15, "type": "Text", + "raw": "foo", "data": "foo" } ] @@ -28,8 +29,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-unquoted/output.json b/test/parser/samples/attribute-unquoted/output.json index c7556f2eba..11fa397819 100644 --- a/test/parser/samples/attribute-unquoted/output.json +++ b/test/parser/samples/attribute-unquoted/output.json @@ -20,6 +20,7 @@ "start": 11, "end": 14, "type": "Text", + "raw": "foo", "data": "foo" } ] @@ -28,8 +29,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/attribute-with-whitespace/input.svelte b/test/parser/samples/attribute-with-whitespace/input.svelte new file mode 100644 index 0000000000..2743a89ed0 --- /dev/null +++ b/test/parser/samples/attribute-with-whitespace/input.svelte @@ -0,0 +1 @@ + diff --git a/test/parser/samples/attribute-with-whitespace/output.json b/test/parser/samples/attribute-with-whitespace/output.json new file mode 100644 index 0000000000..eab6054f2a --- /dev/null +++ b/test/parser/samples/attribute-with-whitespace/output.json @@ -0,0 +1,39 @@ +{ + "html": { + "start": 0, + "end": 38, + "type": "Fragment", + "children": [ + { + "start": 0, + "end": 38, + "type": "Element", + "name": "button", + "attributes": [ + { + "start": 8, + "end": 23, + "type": "EventHandler", + "name": "click", + "modifiers": [], + "expression": { + "type": "Identifier", + "start": 19, + "end": 22, + "name": "foo" + } + } + ], + "children": [ + { + "start": 24, + "end": 29, + "type": "Text", + "raw": "Click", + "data": "Click" + } + ] + } + ] + } +} diff --git a/test/parser/samples/await-then-catch/output.json b/test/parser/samples/await-then-catch/output.json index f62ad16574..ac598a403a 100644 --- a/test/parser/samples/await-then-catch/output.json +++ b/test/parser/samples/await-then-catch/output.json @@ -19,13 +19,13 @@ "pending": { "start": 19, "end": 39, - "skip": false, "type": "PendingBlock", "children": [ { "start": 19, "end": 21, "type": "Text", + "raw": "\n\t", "data": "\n\t" }, { @@ -39,6 +39,7 @@ "start": 24, "end": 34, "type": "Text", + "raw": "loading...", "data": "loading..." } ] @@ -47,20 +48,22 @@ "start": 38, "end": 39, "type": "Text", + "raw": "\n", "data": "\n" } - ] + ], + "skip": false }, "then": { "start": 39, "end": 88, - "skip": false, "type": "ThenBlock", "children": [ { "start": 55, "end": 57, "type": "Text", + "raw": "\n\t", "data": "\n\t" }, { @@ -74,6 +77,7 @@ "start": 60, "end": 73, "type": "Text", + "raw": "the value is ", "data": "the value is " }, { @@ -93,20 +97,22 @@ "start": 87, "end": 88, "type": "Text", + "raw": "\n", "data": "\n" } - ] + ], + "skip": false }, "catch": { "start": 88, "end": 140, - "skip": false, "type": "CatchBlock", "children": [ { "start": 105, "end": 107, "type": "Text", + "raw": "\n\t", "data": "\n\t" }, { @@ -120,6 +126,7 @@ "start": 110, "end": 117, "type": "Text", + "raw": "oh no! ", "data": "oh no! " }, { @@ -151,14 +158,13 @@ "start": 139, "end": 140, "type": "Text", + "raw": "\n", "data": "\n" } - ] + ], + "skip": false } } ] - }, - "css": null, - "instance": null, - "module": null -} + } +} \ No newline at end of file diff --git a/test/parser/samples/binding-shorthand/output.json b/test/parser/samples/binding-shorthand/output.json index 8f92101042..7fe7acb5b3 100644 --- a/test/parser/samples/binding-shorthand/output.json +++ b/test/parser/samples/binding-shorthand/output.json @@ -8,6 +8,7 @@ "start": 28, "end": 30, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { diff --git a/test/parser/samples/binding/output.json b/test/parser/samples/binding/output.json index d084050617..72ad60202c 100644 --- a/test/parser/samples/binding/output.json +++ b/test/parser/samples/binding/output.json @@ -8,6 +8,7 @@ "start": 29, "end": 31, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { diff --git a/test/parser/samples/comment/output.json b/test/parser/samples/comment/output.json index 89295c188a..2a57c4fa5d 100644 --- a/test/parser/samples/comment/output.json +++ b/test/parser/samples/comment/output.json @@ -11,8 +11,5 @@ "data": " a comment " } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/component-dynamic/output.json b/test/parser/samples/component-dynamic/output.json index c2e4e3ee79..77837d1ca9 100644 --- a/test/parser/samples/component-dynamic/output.json +++ b/test/parser/samples/component-dynamic/output.json @@ -36,8 +36,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/convert-entities-in-element/output.json b/test/parser/samples/convert-entities-in-element/output.json index fb0f5b288e..c830c276de 100644 --- a/test/parser/samples/convert-entities-in-element/output.json +++ b/test/parser/samples/convert-entities-in-element/output.json @@ -15,13 +15,11 @@ "start": 3, "end": 20, "type": "Text", + "raw": "Hello & World", "data": "Hello & World" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/convert-entities/output.json b/test/parser/samples/convert-entities/output.json index ca1c1356f8..f4cc1a6662 100644 --- a/test/parser/samples/convert-entities/output.json +++ b/test/parser/samples/convert-entities/output.json @@ -8,11 +8,9 @@ "start": 0, "end": 17, "type": "Text", + "raw": "Hello & World", "data": "Hello & World" } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/css/output.json b/test/parser/samples/css/output.json index 3127e01c71..12d74ae7f8 100644 --- a/test/parser/samples/css/output.json +++ b/test/parser/samples/css/output.json @@ -15,6 +15,7 @@ "start": 5, "end": 8, "type": "Text", + "raw": "foo", "data": "foo" } ] @@ -23,6 +24,7 @@ "start": 14, "end": 16, "type": "Text", + "raw": "\n\n", "data": "\n\n" } ] @@ -90,7 +92,5 @@ "end": 48, "styles": "\n\tdiv {\n\t\tcolor: red;\n\t}\n" } - }, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/dynamic-import/output.json b/test/parser/samples/dynamic-import/output.json index c0d4a45e0d..fa1acf7d9b 100644 --- a/test/parser/samples/dynamic-import/output.json +++ b/test/parser/samples/dynamic-import/output.json @@ -5,7 +5,6 @@ "type": "Fragment", "children": [] }, - "css": null, "instance": { "start": 0, "end": 146, @@ -66,8 +65,8 @@ "start": 54, "end": 134, "id": null, - "generator": false, "expression": false, + "generator": false, "async": false, "params": [], "body": { @@ -120,8 +119,8 @@ "start": 88, "end": 129, "id": null, - "generator": false, "expression": false, + "generator": false, "async": false, "params": [ { diff --git a/test/parser/samples/each-block-destructured/output.json b/test/parser/samples/each-block-destructured/output.json index 0c4b1a5c54..6368b445d6 100644 --- a/test/parser/samples/each-block-destructured/output.json +++ b/test/parser/samples/each-block-destructured/output.json @@ -37,6 +37,7 @@ "start": 50, "end": 52, "type": "Text", + "raw": ": ", "data": ": " }, { @@ -80,8 +81,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null -} + } +} \ No newline at end of file diff --git a/test/parser/samples/each-block-else/output.json b/test/parser/samples/each-block-else/output.json index aefc8c2f39..1e8ac455e6 100644 --- a/test/parser/samples/each-block-else/output.json +++ b/test/parser/samples/each-block-else/output.json @@ -58,6 +58,7 @@ "start": 55, "end": 65, "type": "Text", + "raw": "no animals", "data": "no animals" } ] @@ -66,8 +67,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/each-block-indexed/output.json b/test/parser/samples/each-block-indexed/output.json index 7518652468..77417ba67a 100644 --- a/test/parser/samples/each-block-indexed/output.json +++ b/test/parser/samples/each-block-indexed/output.json @@ -37,6 +37,7 @@ "start": 36, "end": 38, "type": "Text", + "raw": ": ", "data": ": " }, { @@ -62,8 +63,5 @@ "index": "i" } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/each-block-keyed/output.json b/test/parser/samples/each-block-keyed/output.json index fe893bcdb9..11cdd45ff1 100644 --- a/test/parser/samples/each-block-keyed/output.json +++ b/test/parser/samples/each-block-keyed/output.json @@ -62,8 +62,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/each-block/output.json b/test/parser/samples/each-block/output.json index c16a71ad5d..6a60823952 100644 --- a/test/parser/samples/each-block/output.json +++ b/test/parser/samples/each-block/output.json @@ -44,8 +44,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/element-with-mustache/output.json b/test/parser/samples/element-with-mustache/output.json index c8a386d681..f7c2e9936b 100644 --- a/test/parser/samples/element-with-mustache/output.json +++ b/test/parser/samples/element-with-mustache/output.json @@ -15,6 +15,7 @@ "start": 4, "end": 10, "type": "Text", + "raw": "hello ", "data": "hello " }, { @@ -32,13 +33,11 @@ "start": 16, "end": 17, "type": "Text", + "raw": "!", "data": "!" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/element-with-text/output.json b/test/parser/samples/element-with-text/output.json index 70f6163c93..b0e0f5c6cc 100644 --- a/test/parser/samples/element-with-text/output.json +++ b/test/parser/samples/element-with-text/output.json @@ -15,13 +15,11 @@ "start": 6, "end": 10, "type": "Text", + "raw": "test", "data": "test" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/elements/output.json b/test/parser/samples/elements/output.json index d216f7f5d8..75548c20f0 100644 --- a/test/parser/samples/elements/output.json +++ b/test/parser/samples/elements/output.json @@ -21,8 +21,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/event-handler/output.json b/test/parser/samples/event-handler/output.json index b1fe89fc2a..f792ffadcc 100644 --- a/test/parser/samples/event-handler/output.json +++ b/test/parser/samples/event-handler/output.json @@ -21,8 +21,8 @@ "start": 19, "end": 43, "id": null, - "generator": false, "expression": true, + "generator": false, "async": false, "params": [], "body": { @@ -58,6 +58,7 @@ "start": 46, "end": 52, "type": "Text", + "raw": "toggle", "data": "toggle" } ] @@ -66,6 +67,7 @@ "start": 61, "end": 63, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { @@ -90,6 +92,7 @@ "start": 81, "end": 87, "type": "Text", + "raw": "hello!", "data": "hello!" } ] @@ -97,8 +100,5 @@ ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/if-block-else/output.json b/test/parser/samples/if-block-else/output.json index dedf2797c4..8b22cfa26b 100644 --- a/test/parser/samples/if-block-else/output.json +++ b/test/parser/samples/if-block-else/output.json @@ -26,6 +26,7 @@ "start": 14, "end": 17, "type": "Text", + "raw": "foo", "data": "foo" } ] @@ -47,6 +48,7 @@ "start": 34, "end": 41, "type": "Text", + "raw": "not foo", "data": "not foo" } ] @@ -55,8 +57,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/if-block-elseif/output.json b/test/parser/samples/if-block-elseif/output.json index 188b57aaad..54fb53dacb 100644 --- a/test/parser/samples/if-block-elseif/output.json +++ b/test/parser/samples/if-block-elseif/output.json @@ -39,6 +39,7 @@ "start": 17, "end": 37, "type": "Text", + "raw": "x is greater than 10", "data": "x is greater than 10" } ] @@ -85,6 +86,7 @@ "start": 63, "end": 79, "type": "Text", + "raw": "x is less than 5", "data": "x is less than 5" } ] diff --git a/test/parser/samples/if-block/output.json b/test/parser/samples/if-block/output.json index d560824766..1714bb7141 100644 --- a/test/parser/samples/if-block/output.json +++ b/test/parser/samples/if-block/output.json @@ -19,13 +19,11 @@ "start": 9, "end": 12, "type": "Text", + "raw": "bar", "data": "bar" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/implicitly-closed-li/output.json b/test/parser/samples/implicitly-closed-li/output.json index caf69d7109..f46a2b1a26 100644 --- a/test/parser/samples/implicitly-closed-li/output.json +++ b/test/parser/samples/implicitly-closed-li/output.json @@ -15,6 +15,7 @@ "start": 4, "end": 6, "type": "Text", + "raw": "\n\t", "data": "\n\t" }, { @@ -28,6 +29,7 @@ "start": 10, "end": 13, "type": "Text", + "raw": "a\n\t", "data": "a\n\t" } ] @@ -43,6 +45,7 @@ "start": 17, "end": 20, "type": "Text", + "raw": "b\n\t", "data": "b\n\t" } ] @@ -58,6 +61,7 @@ "start": 24, "end": 26, "type": "Text", + "raw": "c\n", "data": "c\n" } ] @@ -65,8 +69,5 @@ ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/nbsp/output.json b/test/parser/samples/nbsp/output.json index 4fa318ce48..044de64cba 100644 --- a/test/parser/samples/nbsp/output.json +++ b/test/parser/samples/nbsp/output.json @@ -15,13 +15,11 @@ "start": 6, "end": 12, "type": "Text", + "raw": " ", "data": " " } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/raw-mustaches/output.json b/test/parser/samples/raw-mustaches/output.json index 1d92b21c85..1b3d9b7a9c 100644 --- a/test/parser/samples/raw-mustaches/output.json +++ b/test/parser/samples/raw-mustaches/output.json @@ -15,6 +15,7 @@ "start": 3, "end": 4, "type": "Text", + "raw": " ", "data": " " }, { @@ -32,6 +33,7 @@ "start": 16, "end": 17, "type": "Text", + "raw": " ", "data": " " }, { @@ -49,13 +51,11 @@ "start": 29, "end": 30, "type": "Text", + "raw": " ", "data": " " } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/refs/output.json b/test/parser/samples/refs/output.json index d15753b0a2..e09383f9b6 100644 --- a/test/parser/samples/refs/output.json +++ b/test/parser/samples/refs/output.json @@ -8,6 +8,7 @@ "start": 28, "end": 30, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { diff --git a/test/parser/samples/script-comment-only/output.json b/test/parser/samples/script-comment-only/output.json index 95ca769b20..ba28434318 100644 --- a/test/parser/samples/script-comment-only/output.json +++ b/test/parser/samples/script-comment-only/output.json @@ -8,6 +8,7 @@ "start": 43, "end": 45, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { diff --git a/test/parser/samples/script-comment-trailing-multiline/output.json b/test/parser/samples/script-comment-trailing-multiline/output.json index d4a45911a1..7d01599efa 100644 --- a/test/parser/samples/script-comment-trailing-multiline/output.json +++ b/test/parser/samples/script-comment-trailing-multiline/output.json @@ -8,6 +8,7 @@ "start": 77, "end": 79, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { @@ -21,6 +22,7 @@ "start": 83, "end": 89, "type": "Text", + "raw": "Hello ", "data": "Hello " }, { @@ -38,6 +40,7 @@ "start": 95, "end": 96, "type": "Text", + "raw": "!", "data": "!" } ] diff --git a/test/parser/samples/script-comment-trailing/output.json b/test/parser/samples/script-comment-trailing/output.json index 92d431b558..bc8f3e4e67 100644 --- a/test/parser/samples/script-comment-trailing/output.json +++ b/test/parser/samples/script-comment-trailing/output.json @@ -8,6 +8,7 @@ "start": 66, "end": 68, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { @@ -21,6 +22,7 @@ "start": 72, "end": 78, "type": "Text", + "raw": "Hello ", "data": "Hello " }, { @@ -38,6 +40,7 @@ "start": 84, "end": 85, "type": "Text", + "raw": "!", "data": "!" } ] diff --git a/test/parser/samples/script/output.json b/test/parser/samples/script/output.json index 95966f5dc6..75aa0a7d2c 100644 --- a/test/parser/samples/script/output.json +++ b/test/parser/samples/script/output.json @@ -8,6 +8,7 @@ "start": 39, "end": 41, "type": "Text", + "raw": "\n\n", "data": "\n\n" }, { @@ -21,6 +22,7 @@ "start": 45, "end": 51, "type": "Text", + "raw": "Hello ", "data": "Hello " }, { @@ -38,6 +40,7 @@ "start": 57, "end": 58, "type": "Text", + "raw": "!", "data": "!" } ] diff --git a/test/parser/samples/self-closing-element/output.json b/test/parser/samples/self-closing-element/output.json index 47eea2f333..63ff17a466 100644 --- a/test/parser/samples/self-closing-element/output.json +++ b/test/parser/samples/self-closing-element/output.json @@ -13,8 +13,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/self-reference/output.json b/test/parser/samples/self-reference/output.json index de5112a087..92dfdfe4d0 100644 --- a/test/parser/samples/self-reference/output.json +++ b/test/parser/samples/self-reference/output.json @@ -72,8 +72,5 @@ ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/space-between-mustaches/output.json b/test/parser/samples/space-between-mustaches/output.json index c89409daeb..9a367bd2c1 100644 --- a/test/parser/samples/space-between-mustaches/output.json +++ b/test/parser/samples/space-between-mustaches/output.json @@ -15,6 +15,7 @@ "start": 3, "end": 4, "type": "Text", + "raw": " ", "data": " " }, { @@ -32,6 +33,7 @@ "start": 7, "end": 8, "type": "Text", + "raw": " ", "data": " " }, { @@ -49,6 +51,7 @@ "start": 11, "end": 14, "type": "Text", + "raw": " : ", "data": " : " }, { @@ -66,13 +69,11 @@ "start": 17, "end": 20, "type": "Text", + "raw": " : ", "data": " : " } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/spread/output.json b/test/parser/samples/spread/output.json index 3986da3578..73a0dc9777 100644 --- a/test/parser/samples/spread/output.json +++ b/test/parser/samples/spread/output.json @@ -25,8 +25,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/textarea-children/output.json b/test/parser/samples/textarea-children/output.json index 3b403458fc..90f31f3caf 100644 --- a/test/parser/samples/textarea-children/output.json +++ b/test/parser/samples/textarea-children/output.json @@ -16,8 +16,9 @@ "value": [ { "start": 10, - "end": 40, + "end": 41, "type": "Text", + "raw": "\n\t

not actually an element. ", "data": "\n\t

not actually an element. " }, { @@ -35,6 +36,7 @@ "start": 45, "end": 50, "type": "Text", + "raw": "

\n", "data": "

\n" } ] @@ -43,8 +45,5 @@ "children": [] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/transition-intro-no-params/output.json b/test/parser/samples/transition-intro-no-params/output.json index edb15457e6..91b50f3ec8 100644 --- a/test/parser/samples/transition-intro-no-params/output.json +++ b/test/parser/samples/transition-intro-no-params/output.json @@ -26,13 +26,11 @@ "start": 13, "end": 21, "type": "Text", + "raw": "fades in", "data": "fades in" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/transition-intro/output.json b/test/parser/samples/transition-intro/output.json index 5583dd89bc..418bb97e16 100644 --- a/test/parser/samples/transition-intro/output.json +++ b/test/parser/samples/transition-intro/output.json @@ -54,13 +54,11 @@ "start": 31, "end": 39, "type": "Text", + "raw": "fades in", "data": "fades in" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/unusual-identifier/output.json b/test/parser/samples/unusual-identifier/output.json index c0d4ecc3ff..e4a2a18619 100644 --- a/test/parser/samples/unusual-identifier/output.json +++ b/test/parser/samples/unusual-identifier/output.json @@ -44,8 +44,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/whitespace-leading-trailing/output.json b/test/parser/samples/whitespace-leading-trailing/output.json index f164af01ba..e4f387856e 100644 --- a/test/parser/samples/whitespace-leading-trailing/output.json +++ b/test/parser/samples/whitespace-leading-trailing/output.json @@ -8,6 +8,7 @@ "start": 0, "end": 6, "type": "Text", + "raw": "\n\n\t\t\t\t", "data": "\n\n\t\t\t\t" }, { @@ -21,13 +22,11 @@ "start": 9, "end": 32, "type": "Text", + "raw": "just chillin' over here", "data": "just chillin' over here" } ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/whitespace-normal/output.json b/test/parser/samples/whitespace-normal/output.json index e4ce956331..acbae7ae17 100644 --- a/test/parser/samples/whitespace-normal/output.json +++ b/test/parser/samples/whitespace-normal/output.json @@ -15,6 +15,7 @@ "start": 4, "end": 10, "type": "Text", + "raw": "Hello ", "data": "Hello " }, { @@ -39,6 +40,7 @@ "start": 24, "end": 26, "type": "Text", + "raw": "! ", "data": "! " } ] @@ -54,6 +56,7 @@ "start": 41, "end": 53, "type": "Text", + "raw": "How are you?", "data": "How are you?" } ] @@ -61,8 +64,5 @@ ] } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/parser/samples/yield/output.json b/test/parser/samples/yield/output.json index 16ea79d8e8..b2e4b9430f 100644 --- a/test/parser/samples/yield/output.json +++ b/test/parser/samples/yield/output.json @@ -16,8 +16,5 @@ } } ] - }, - "css": null, - "instance": null, - "module": null + } } \ No newline at end of file diff --git a/test/preprocess/samples/attributes-with-equals/_config.js b/test/preprocess/samples/attributes-with-equals/_config.js new file mode 100644 index 0000000000..bee4928b1f --- /dev/null +++ b/test/preprocess/samples/attributes-with-equals/_config.js @@ -0,0 +1,5 @@ +export default { + preprocess: { + style: ({ attributes }) => attributes.foo && attributes.foo.includes('=') ? { code: '' } : null + } +}; diff --git a/test/preprocess/samples/attributes-with-equals/input.svelte b/test/preprocess/samples/attributes-with-equals/input.svelte new file mode 100644 index 0000000000..4e88284a29 --- /dev/null +++ b/test/preprocess/samples/attributes-with-equals/input.svelte @@ -0,0 +1,3 @@ + diff --git a/test/preprocess/samples/attributes-with-equals/output.svelte b/test/preprocess/samples/attributes-with-equals/output.svelte new file mode 100644 index 0000000000..c194ab682d --- /dev/null +++ b/test/preprocess/samples/attributes-with-equals/output.svelte @@ -0,0 +1 @@ + diff --git a/test/runtime/index.js b/test/runtime/index.js index 310c4cbba2..487d774527 100644 --- a/test/runtime/index.js +++ b/test/runtime/index.js @@ -3,7 +3,7 @@ import * as path from "path"; import * as fs from "fs"; import { rollup } from 'rollup'; import * as virtual from 'rollup-plugin-virtual'; -import { clear_loops } from "../../internal.js"; +import { clear_loops, flush, set_now, set_raf } from "../../internal"; import { showOutput, @@ -20,7 +20,11 @@ let compileOptions = null; let compile = null; const sveltePath = process.cwd().split('\\').join('/'); -const internal = `${sveltePath}/internal.js`; + +let unhandled_rejection = false; +process.on('unhandledRejection', err => { + unhandled_rejection = err; +}); describe("runtime", () => { before(() => { @@ -47,8 +51,6 @@ describe("runtime", () => { function runTest(dir, hydrate) { if (dir[0] === ".") return; - const { flush } = require(internal); - const config = loadConfig(`./runtime/samples/${dir}/_config.js`); if (hydrate && config.skip_if_hydrate) return; @@ -63,10 +65,11 @@ describe("runtime", () => { throw new Error('skipping test, already failed'); } + unhandled_rejection = null; + compile = (config.preserveIdentifiers ? svelte : svelte$).compile; const cwd = path.resolve(`test/runtime/samples/${dir}`); - global.document.title = ''; compileOptions = config.compileOptions || {}; compileOptions.sveltePath = sveltePath; @@ -75,7 +78,7 @@ describe("runtime", () => { compileOptions.accessors = 'accessors' in config ? config.accessors : true; Object.keys(require.cache) - .filter(x => x.endsWith(".svelte")) + .filter(x => x.endsWith('.svelte')) .forEach(file => { delete require.cache[file]; }); @@ -100,16 +103,14 @@ describe("runtime", () => { if (raf.callback) raf.callback(); } }; - window.performance.now = () => raf.time; - global.requestAnimationFrame = cb => { - let called = false; + set_now(() => raf.time); + set_raf(cb => { raf.callback = () => { - if (!called) { - called = true; - cb(); - } + raf.callback = null; + cb(); + flush(); }; - }; + }); try { mod = require(`./samples/${dir}/main.svelte`); @@ -119,8 +120,6 @@ describe("runtime", () => { throw err; } - global.window = window; - if (config.before_test) config.before_test(); // Put things we need on window for testing @@ -172,10 +171,18 @@ describe("runtime", () => { raf })).then(() => { component.$destroy(); + + if (unhandled_rejection) { + throw unhandled_rejection; + } }); } else { component.$destroy(); assert.htmlEqual(target.innerHTML, ""); + + if (unhandled_rejection) { + throw unhandled_rejection; + } } }) .catch(err => { @@ -222,9 +229,10 @@ describe("runtime", () => { 'main.js': js.code }), { + name: 'svelte-packages', resolveId: (importee, importer) => { if (importee.startsWith('svelte/')) { - return importee.replace('svelte', process.cwd()) + '.mjs'; + return importee.replace('svelte', process.cwd()) + '/index.mjs'; } } } diff --git a/test/runtime/samples/animation-css/_config.js b/test/runtime/samples/animation-css/_config.js index 544c6378ff..9410fb91e7 100644 --- a/test/runtime/samples/animation-css/_config.js +++ b/test/runtime/samples/animation-css/_config.js @@ -17,8 +17,8 @@ export default {
e
`, - test({ assert, component, target, window, raf }) { - let divs = document.querySelectorAll('div'); + test({ assert, component, target, raf }) { + let divs = target.querySelectorAll('div'); divs.forEach(div => { div.getBoundingClientRect = function() { const index = [...this.parentNode.children].indexOf(this); @@ -29,9 +29,9 @@ export default { right: 100, top, bottom: top + 20 - } + }; }; - }) + }); component.things = [ { id: 5, name: 'e' }, @@ -41,11 +41,11 @@ export default { { id: 1, name: 'a' } ]; - divs = document.querySelectorAll('div'); + divs = target.querySelectorAll('div'); assert.ok(~divs[0].style.animation.indexOf('__svelte')); - assert.equal(divs[1].style.animation, undefined); - assert.equal(divs[2].style.animation, undefined); - assert.equal(divs[3].style.animation, undefined); + assert.equal(divs[1].style.animation, ''); + assert.equal(divs[2].style.animation, ''); + assert.equal(divs[3].style.animation, ''); assert.ok(~divs[4].style.animation.indexOf('__svelte')); raf.tick(100); diff --git a/test/runtime/samples/animation-js-delay/_config.js b/test/runtime/samples/animation-js-delay/_config.js index faed25ecaa..6bd02d17e6 100644 --- a/test/runtime/samples/animation-js-delay/_config.js +++ b/test/runtime/samples/animation-js-delay/_config.js @@ -29,9 +29,9 @@ export default { right: 100, top, bottom: top + 20 - } + }; }; - }) + }); component.things = [ { id: 5, name: 'e' }, diff --git a/test/runtime/samples/animation-js-easing/_config.js b/test/runtime/samples/animation-js-easing/_config.js index a31825c3f9..415af042a9 100644 --- a/test/runtime/samples/animation-js-easing/_config.js +++ b/test/runtime/samples/animation-js-easing/_config.js @@ -29,9 +29,9 @@ export default { right: 100, top, bottom: top + 20 - } + }; }; - }) + }); component.things = [ { id: 5, name: 'e' }, diff --git a/test/runtime/samples/animation-js/_config.js b/test/runtime/samples/animation-js/_config.js index d5991a915a..521753633d 100644 --- a/test/runtime/samples/animation-js/_config.js +++ b/test/runtime/samples/animation-js/_config.js @@ -29,7 +29,7 @@ export default { right: 100, top, bottom: top + 20 - } + }; }; }); diff --git a/test/runtime/samples/attribute-dataset-without-value/_config.js b/test/runtime/samples/attribute-dataset-without-value/_config.js new file mode 100644 index 0000000000..934f44eb06 --- /dev/null +++ b/test/runtime/samples/attribute-dataset-without-value/_config.js @@ -0,0 +1,3 @@ +export default { + html: '
', +}; diff --git a/test/runtime/samples/attribute-dataset-without-value/main.svelte b/test/runtime/samples/attribute-dataset-without-value/main.svelte new file mode 100644 index 0000000000..ed7d532652 --- /dev/null +++ b/test/runtime/samples/attribute-dataset-without-value/main.svelte @@ -0,0 +1 @@ +
diff --git a/test/runtime/samples/attribute-url/_config.js b/test/runtime/samples/attribute-url/_config.js new file mode 100644 index 0000000000..28bc1bcb0c --- /dev/null +++ b/test/runtime/samples/attribute-url/_config.js @@ -0,0 +1,8 @@ +export default { + test({ assert, target }) { + const div = target.querySelector( 'div' ); + + assert.equal( div.style.backgroundImage, 'url(https://example.com/foo.jpg)'); + assert.equal( div.style.color, 'red' ); + } +}; diff --git a/test/runtime/samples/attribute-url/main.svelte b/test/runtime/samples/attribute-url/main.svelte new file mode 100644 index 0000000000..357a352aaa --- /dev/null +++ b/test/runtime/samples/attribute-url/main.svelte @@ -0,0 +1,6 @@ + + +
{color}
diff --git a/test/runtime/samples/await-containing-if/_config.js b/test/runtime/samples/await-containing-if/_config.js index 9e24e4f614..cd83585cc1 100644 --- a/test/runtime/samples/await-containing-if/_config.js +++ b/test/runtime/samples/await-containing-if/_config.js @@ -1,6 +1,6 @@ let fulfil; -let thePromise = new Promise(f => { +const thePromise = new Promise(f => { fulfil = f; }); diff --git a/test/runtime/samples/await-in-dynamic-component/Widget.svelte b/test/runtime/samples/await-in-dynamic-component/Widget.svelte new file mode 100644 index 0000000000..78118e944d --- /dev/null +++ b/test/runtime/samples/await-in-dynamic-component/Widget.svelte @@ -0,0 +1 @@ +{#await null}{/await} \ No newline at end of file diff --git a/test/runtime/samples/await-in-dynamic-component/_config.js b/test/runtime/samples/await-in-dynamic-component/_config.js new file mode 100644 index 0000000000..797298c554 --- /dev/null +++ b/test/runtime/samples/await-in-dynamic-component/_config.js @@ -0,0 +1,5 @@ +export default { + test({ component }) { + component.flag = false; + } +}; \ No newline at end of file diff --git a/test/runtime/samples/await-in-dynamic-component/main.svelte b/test/runtime/samples/await-in-dynamic-component/main.svelte new file mode 100644 index 0000000000..c395cb4499 --- /dev/null +++ b/test/runtime/samples/await-in-dynamic-component/main.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/await-in-each/_config.js b/test/runtime/samples/await-in-each/_config.js index b1a232e4bd..6c7da69ee3 100644 --- a/test/runtime/samples/await-in-each/_config.js +++ b/test/runtime/samples/await-in-each/_config.js @@ -1,6 +1,6 @@ let fulfil; -let thePromise = new Promise(f => { +const thePromise = new Promise(f => { fulfil = f; }); diff --git a/test/runtime/samples/await-in-removed-if/_config.js b/test/runtime/samples/await-in-removed-if/_config.js new file mode 100644 index 0000000000..2f96f08e24 --- /dev/null +++ b/test/runtime/samples/await-in-removed-if/_config.js @@ -0,0 +1,22 @@ +let fulfil; + +const promise = new Promise(f => { + fulfil = f; +}); + +export default { + props: { + promise + }, + + html: ``, + + async test({ assert, component, target }) { + component.condition = false; + + fulfil(); + await new Promise(f => setTimeout(f, 0)); + + assert.htmlEqual(target.innerHTML, ``); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/await-in-removed-if/main.svelte b/test/runtime/samples/await-in-removed-if/main.svelte new file mode 100644 index 0000000000..e854b6feab --- /dev/null +++ b/test/runtime/samples/await-in-removed-if/main.svelte @@ -0,0 +1,8 @@ + + +{#if condition} + {#await promise then _}hello{/await} +{/if} \ No newline at end of file diff --git a/test/runtime/samples/await-then-catch-order/_config.js b/test/runtime/samples/await-then-catch-order/_config.js index 5c4eb530e9..f972520904 100644 --- a/test/runtime/samples/await-then-catch-order/_config.js +++ b/test/runtime/samples/await-then-catch-order/_config.js @@ -1,6 +1,6 @@ let fulfil; -let thePromise = new Promise(f => { +const thePromise = new Promise(f => { fulfil = f; }); diff --git a/test/runtime/samples/await-with-components/_config.js b/test/runtime/samples/await-with-components/_config.js index ffef7441ff..a0a558782a 100644 --- a/test/runtime/samples/await-with-components/_config.js +++ b/test/runtime/samples/await-with-components/_config.js @@ -1,6 +1,7 @@ export default { async test({ assert, component, target }) { - let resolve, reject; + let resolve; + let reject; let promise = new Promise(ok => resolve = ok); component.promise = promise; diff --git a/test/runtime/samples/binding-circular/_config.js b/test/runtime/samples/binding-circular/_config.js new file mode 100644 index 0000000000..505ed22beb --- /dev/null +++ b/test/runtime/samples/binding-circular/_config.js @@ -0,0 +1,13 @@ +export default { + html: ` + + `, + + ssrHtml: ` + + ` +}; diff --git a/test/runtime/samples/binding-circular/main.svelte b/test/runtime/samples/binding-circular/main.svelte new file mode 100644 index 0000000000..372f5d3c99 --- /dev/null +++ b/test/runtime/samples/binding-circular/main.svelte @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-html-initial/_config.js b/test/runtime/samples/binding-contenteditable-html-initial/_config.js new file mode 100644 index 0000000000..9eac2c9b17 --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-html-initial/_config.js @@ -0,0 +1,40 @@ +export default { + html: ` + world +

hello world

+ `, + + ssrHtml: ` + world +

hello undefined

+ `, + + async test({ assert, component, target, window }) { + assert.equal(component.name, 'world'); + + const el = target.querySelector('editor'); + + el.innerHTML = 'everybody'; + + // No updates to data yet + assert.htmlEqual(target.innerHTML, ` + everybody +

hello world

+ `); + + // Handle user input + const event = new window.Event('input'); + await el.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ` + everybody +

hello everybody

+ `); + + component.name = 'goodbye'; + assert.equal(el.innerHTML, 'goodbye'); + assert.htmlEqual(target.innerHTML, ` + goodbye +

hello goodbye

+ `); + }, +}; diff --git a/test/runtime/samples/binding-contenteditable-html-initial/main.svelte b/test/runtime/samples/binding-contenteditable-html-initial/main.svelte new file mode 100644 index 0000000000..119b41b52d --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-html-initial/main.svelte @@ -0,0 +1,8 @@ + + + + world + +

hello {@html name}

\ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-html/_config.js b/test/runtime/samples/binding-contenteditable-html/_config.js new file mode 100644 index 0000000000..ceb6a75c70 --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-html/_config.js @@ -0,0 +1,38 @@ +export default { + props: { + name: 'world', + }, + + html: ` + world +

hello world

+ `, + + async test({ assert, component, target, window }) { + const el = target.querySelector('editor'); + assert.equal(el.innerHTML, 'world'); + + el.innerHTML = 'everybody'; + + // No updates to data yet + assert.htmlEqual(target.innerHTML, ` + everybody +

hello world

+ `); + + // Handle user input + const event = new window.Event('input'); + await el.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ` + everybody +

hello everybody

+ `); + + component.name = 'goodbye'; + assert.equal(el.innerHTML, 'goodbye'); + assert.htmlEqual(target.innerHTML, ` + goodbye +

hello goodbye

+ `); + }, +}; diff --git a/test/runtime/samples/binding-contenteditable-html/main.svelte b/test/runtime/samples/binding-contenteditable-html/main.svelte new file mode 100644 index 0000000000..f576cf1868 --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-html/main.svelte @@ -0,0 +1,6 @@ + + + +

hello {@html name}

\ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-text-initial/_config.js b/test/runtime/samples/binding-contenteditable-text-initial/_config.js new file mode 100644 index 0000000000..4899f30f12 --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-text-initial/_config.js @@ -0,0 +1,34 @@ +export default { + html: ` + world +

hello world

+ `, + + ssrHtml: ` + world +

hello undefined

+ `, + + async test({ assert, component, target, window }) { + assert.equal(component.name, 'world'); + + const el = target.querySelector('editor'); + + const event = new window.Event('input'); + + el.textContent = 'everybody'; + await el.dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + everybody +

hello everybody

+ `); + + component.name = 'goodbye'; + assert.equal(el.textContent, 'goodbye'); + assert.htmlEqual(target.innerHTML, ` + goodbye +

hello goodbye

+ `); + }, +}; diff --git a/test/runtime/samples/binding-contenteditable-text-initial/main.svelte b/test/runtime/samples/binding-contenteditable-text-initial/main.svelte new file mode 100644 index 0000000000..b0938d4d0b --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-text-initial/main.svelte @@ -0,0 +1,8 @@ + + + + world + +

hello {name}

\ No newline at end of file diff --git a/test/runtime/samples/binding-contenteditable-text/_config.js b/test/runtime/samples/binding-contenteditable-text/_config.js new file mode 100644 index 0000000000..9f8645724d --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-text/_config.js @@ -0,0 +1,32 @@ +export default { + props: { + name: 'world', + }, + + html: ` + world +

hello world

+ `, + + async test({ assert, component, target, window }) { + const el = target.querySelector('editor'); + assert.equal(el.textContent, 'world'); + + const event = new window.Event('input'); + + el.textContent = 'everybody'; + await el.dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + everybody +

hello everybody

+ `); + + component.name = 'goodbye'; + assert.equal(el.textContent, 'goodbye'); + assert.htmlEqual(target.innerHTML, ` + goodbye +

hello goodbye

+ `); + }, +}; diff --git a/test/runtime/samples/binding-contenteditable-text/main.svelte b/test/runtime/samples/binding-contenteditable-text/main.svelte new file mode 100644 index 0000000000..70f65e8824 --- /dev/null +++ b/test/runtime/samples/binding-contenteditable-text/main.svelte @@ -0,0 +1,6 @@ + + + +

hello {name}

\ No newline at end of file diff --git a/test/runtime/samples/binding-details-open/_config.js b/test/runtime/samples/binding-details-open/_config.js new file mode 100644 index 0000000000..cf2459c3f1 --- /dev/null +++ b/test/runtime/samples/binding-details-open/_config.js @@ -0,0 +1,25 @@ +export default { + html: ` +
toggle
+ `, + + async test({ assert, component, target, window }) { + const details = target.querySelector('details'); + const event = new window.Event('toggle'); + + details.open = true; + await details.dispatchEvent(event); + assert.equal(component.visible, true); + assert.htmlEqual(target.innerHTML, ` +
toggle
+

hello!

+ `); + + details.open = false; + await details.dispatchEvent(event); + assert.equal(component.visible, false); + assert.htmlEqual(target.innerHTML, ` +
toggle
+ `); + } +}; diff --git a/test/runtime/samples/binding-details-open/main.svelte b/test/runtime/samples/binding-details-open/main.svelte new file mode 100644 index 0000000000..3a7a08e121 --- /dev/null +++ b/test/runtime/samples/binding-details-open/main.svelte @@ -0,0 +1,9 @@ + + +
toggle
+ +{#if visible} +

hello!

+{/if} diff --git a/test/runtime/samples/binding-input-text-contextual-reactive/_config.js b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js new file mode 100644 index 0000000000..6fdfc4be52 --- /dev/null +++ b/test/runtime/samples/binding-input-text-contextual-reactive/_config.js @@ -0,0 +1,125 @@ +export default { + props: { + items: [ + { done: false, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'three' } + ] + }, + + html: ` +
+ +

one

+
+
+ +

two

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ `, + + ssrHtml: ` +
+ +

one

+
+
+ +

two

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ `, + + async test({ assert, component, target, window }) { + function set_text(i, text) { + const input = target.querySelectorAll('input[type="text"]')[i]; + input.value = text; + input.dispatchEvent(new window.Event('input')); + } + + function set_done(i, done) { + const input = target.querySelectorAll('input[type="checkbox"]')[i]; + input.checked = done; + input.dispatchEvent(new window.Event('change')); + } + + component.filter = 'remaining'; + + assert.htmlEqual(target.innerHTML, ` +
+ +

one

+
+
+ +

three

+
+ +

remaining:one / done:two / remaining:three

+ `); + + await set_text(1, 'four'); + + assert.htmlEqual(target.innerHTML, ` +
+ +

one

+
+
+ +

four

+
+ +

remaining:one / done:two / remaining:four

+ `); + + assert.deepEqual(component.items, [ + { done: false, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'four' } + ]); + + await set_done(0, true); + + assert.htmlEqual(target.innerHTML, ` +
+ +

four

+
+ +

done:one / done:two / remaining:four

+ `); + + assert.deepEqual(component.items, [ + { done: true, text: 'one' }, + { done: true, text: 'two' }, + { done: false, text: 'four' } + ]); + + component.filter = 'done'; + + assert.htmlEqual(target.innerHTML, ` +
+ +

one

+
+
+ +

two

+
+ +

done:one / done:two / remaining:four

+ `); + }, +}; diff --git a/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte b/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte new file mode 100644 index 0000000000..7e10199530 --- /dev/null +++ b/test/runtime/samples/binding-input-text-contextual-reactive/main.svelte @@ -0,0 +1,25 @@ + + +{#each filtered as item} +
+ + +

{item.text}

+
+{/each} + +

{summary}

\ No newline at end of file diff --git a/test/runtime/samples/binding-textarea/_config.js b/test/runtime/samples/binding-textarea/_config.js index c09256e059..ac092096e6 100644 --- a/test/runtime/samples/binding-textarea/_config.js +++ b/test/runtime/samples/binding-textarea/_config.js @@ -9,7 +9,7 @@ export default { `, ssrHtml: ` - +

some text

`, diff --git a/test/runtime/samples/binding-this-component-computed-key/Foo.svelte b/test/runtime/samples/binding-this-component-computed-key/Foo.svelte new file mode 100644 index 0000000000..066a48b65e --- /dev/null +++ b/test/runtime/samples/binding-this-component-computed-key/Foo.svelte @@ -0,0 +1 @@ +
foo
\ No newline at end of file diff --git a/test/runtime/samples/binding-this-component-computed-key/_config.js b/test/runtime/samples/binding-this-component-computed-key/_config.js new file mode 100644 index 0000000000..415d2e641c --- /dev/null +++ b/test/runtime/samples/binding-this-component-computed-key/_config.js @@ -0,0 +1,8 @@ +export default { + skip_if_ssr: true, + + html: ` +
foo
+
has foo: true
+ ` +}; diff --git a/test/runtime/samples/binding-this-component-computed-key/main.svelte b/test/runtime/samples/binding-this-component-computed-key/main.svelte new file mode 100644 index 0000000000..af450ea1fe --- /dev/null +++ b/test/runtime/samples/binding-this-component-computed-key/main.svelte @@ -0,0 +1,9 @@ + + + +
+ has foo: {!!foo.computed} +
diff --git a/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte b/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte new file mode 100644 index 0000000000..066a48b65e --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block-value/Foo.svelte @@ -0,0 +1 @@ +
foo
\ No newline at end of file diff --git a/test/runtime/samples/binding-this-component-each-block-value/_config.js b/test/runtime/samples/binding-this-component-each-block-value/_config.js new file mode 100644 index 0000000000..2b5df8c595 --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block-value/_config.js @@ -0,0 +1,12 @@ +export default { + skip_if_ssr: true, + + html: ` +
foo
+
first has foo: true
+
foo
+
second has foo: true
+
foo
+
third has foo: true
+ ` +}; diff --git a/test/runtime/samples/binding-this-component-each-block-value/main.svelte b/test/runtime/samples/binding-this-component-each-block-value/main.svelte new file mode 100644 index 0000000000..5093eecd3f --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block-value/main.svelte @@ -0,0 +1,11 @@ + + +{#each ["first", "second", "third"] as value} + +
+ {value} has foo: {!!foo[value]} +
+{/each} diff --git a/test/runtime/samples/binding-this-component-each-block/Foo.svelte b/test/runtime/samples/binding-this-component-each-block/Foo.svelte new file mode 100644 index 0000000000..066a48b65e --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block/Foo.svelte @@ -0,0 +1 @@ +
foo
\ No newline at end of file diff --git a/test/runtime/samples/binding-this-component-each-block/_config.js b/test/runtime/samples/binding-this-component-each-block/_config.js new file mode 100644 index 0000000000..358c5b5afc --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block/_config.js @@ -0,0 +1,12 @@ +export default { + skip_if_ssr: true, + + html: ` +
foo
+
0 has foo: true
+
foo
+
1 has foo: true
+
foo
+
2 has foo: true
+ ` +}; diff --git a/test/runtime/samples/binding-this-component-each-block/main.svelte b/test/runtime/samples/binding-this-component-each-block/main.svelte new file mode 100644 index 0000000000..49d1d76172 --- /dev/null +++ b/test/runtime/samples/binding-this-component-each-block/main.svelte @@ -0,0 +1,11 @@ + + +{#each Array(3) as _, i} + +
+ {i} has foo: {!!foo[i]} +
+{/each} diff --git a/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte b/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte new file mode 100644 index 0000000000..dc8b5f206c --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property-component/Foo.svelte @@ -0,0 +1,7 @@ + + +

\ No newline at end of file diff --git a/test/runtime/samples/binding-this-each-block-property-component/_config.js b/test/runtime/samples/binding-this-each-block-property-component/_config.js new file mode 100644 index 0000000000..947ec17929 --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property-component/_config.js @@ -0,0 +1,12 @@ +export default { + html: ``, + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual(target.innerHTML, ` +

a

+ `); + + assert.ok(component.items[0].ref.isFoo()); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property-component/main.svelte b/test/runtime/samples/binding-this-each-block-property-component/main.svelte new file mode 100644 index 0000000000..257aa18a91 --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property-component/main.svelte @@ -0,0 +1,13 @@ + + +{#if visible} + {#each items as item} + {item.value} + {/each} +{/if} diff --git a/test/runtime/samples/binding-this-each-block-property/_config.js b/test/runtime/samples/binding-this-each-block-property/_config.js new file mode 100644 index 0000000000..15ad4be5db --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property/_config.js @@ -0,0 +1,12 @@ +export default { + html: ``, + + async test({ assert, component, target }) { + component.visible = true; + assert.htmlEqual(target.innerHTML, ` +
a
+ `); + + assert.equal(component.items[0].ref, target.querySelector('div')); + } +}; diff --git a/test/runtime/samples/binding-this-each-block-property/main.svelte b/test/runtime/samples/binding-this-each-block-property/main.svelte new file mode 100644 index 0000000000..73ede7ab75 --- /dev/null +++ b/test/runtime/samples/binding-this-each-block-property/main.svelte @@ -0,0 +1,11 @@ + + +{#if visible} + {#each items as item} +
{item.value}
+ {/each} +{/if} diff --git a/test/runtime/samples/binding-this-element-reactive-b/_config.js b/test/runtime/samples/binding-this-element-reactive-b/_config.js new file mode 100644 index 0000000000..bcea590c17 --- /dev/null +++ b/test/runtime/samples/binding-this-element-reactive-b/_config.js @@ -0,0 +1,21 @@ +export default { + skip_if_ssr: true, + + html: ` +
The text is hello
+

hello

+ `, + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual(target.innerHTML, ` +
The text is missing
+ `); + + component.visible = true; + assert.htmlEqual(target.innerHTML, ` +
The text is hello
+

hello

+ `); + } +}; diff --git a/test/runtime/samples/binding-this-element-reactive-b/main.svelte b/test/runtime/samples/binding-this-element-reactive-b/main.svelte new file mode 100644 index 0000000000..b6acfd2236 --- /dev/null +++ b/test/runtime/samples/binding-this-element-reactive-b/main.svelte @@ -0,0 +1,9 @@ + + +
The text is {h1 ? h1.textContent : 'missing'}
+{#if visible} +

hello

+{/if} diff --git a/test/runtime/samples/binding-using-props/TextInput.svelte b/test/runtime/samples/binding-using-props/TextInput.svelte new file mode 100644 index 0000000000..da9e7e4a0e --- /dev/null +++ b/test/runtime/samples/binding-using-props/TextInput.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/binding-using-props/_config.js b/test/runtime/samples/binding-using-props/_config.js new file mode 100644 index 0000000000..dcb34c4357 --- /dev/null +++ b/test/runtime/samples/binding-using-props/_config.js @@ -0,0 +1,14 @@ +export default { + async test({ assert, target, window }) { + const input = target.querySelector('input'); + + const event = new window.Event('input'); + input.value = 'changed'; + await input.dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + +

changed

+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/binding-using-props/main.svelte b/test/runtime/samples/binding-using-props/main.svelte new file mode 100644 index 0000000000..543bd28d49 --- /dev/null +++ b/test/runtime/samples/binding-using-props/main.svelte @@ -0,0 +1,7 @@ + + + +

{actualValue}

\ No newline at end of file diff --git a/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js b/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js new file mode 100644 index 0000000000..58ccc76497 --- /dev/null +++ b/test/runtime/samples/class-with-dynamic-attribute-and-spread/_config.js @@ -0,0 +1,21 @@ +export default { + props: { + myClass: 'one two', + attributes: { + role: 'button' + } + }, + + html: `
`, + + test({ assert, component, target, window }) { + component.myClass = 'one'; + component.attributes = { + 'aria-label': 'Test' + }; + + assert.htmlEqual(target.innerHTML, ` +
+ `); + } +}; diff --git a/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte b/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte new file mode 100644 index 0000000000..95825c777b --- /dev/null +++ b/test/runtime/samples/class-with-dynamic-attribute-and-spread/main.svelte @@ -0,0 +1,6 @@ + + +
diff --git a/test/runtime/samples/class-with-spread/_config.js b/test/runtime/samples/class-with-spread/_config.js new file mode 100644 index 0000000000..d5233a5849 --- /dev/null +++ b/test/runtime/samples/class-with-spread/_config.js @@ -0,0 +1,21 @@ +export default { + props: { + myClass: 'one two', + attributes: { + role: 'button' + } + }, + + html: `
`, + + test({ assert, component, target, window }) { + component.myClass = 'one'; + component.attributes = { + 'aria-label': 'Test' + }; + + assert.htmlEqual(target.innerHTML, ` +
+ `); + } +}; diff --git a/test/runtime/samples/class-with-spread/main.svelte b/test/runtime/samples/class-with-spread/main.svelte new file mode 100644 index 0000000000..54d8088581 --- /dev/null +++ b/test/runtime/samples/class-with-spread/main.svelte @@ -0,0 +1,6 @@ + + +
diff --git a/test/runtime/samples/component-event-handler-modifier-once/Button.svelte b/test/runtime/samples/component-event-handler-modifier-once/Button.svelte new file mode 100644 index 0000000000..9b5b7a5f67 --- /dev/null +++ b/test/runtime/samples/component-event-handler-modifier-once/Button.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/runtime/samples/component-event-handler-modifier-once/_config.js b/test/runtime/samples/component-event-handler-modifier-once/_config.js new file mode 100644 index 0000000000..41daf374c8 --- /dev/null +++ b/test/runtime/samples/component-event-handler-modifier-once/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.equal(component.count, 1); + + await button.dispatchEvent(event); + assert.equal(component.count, 1); + } +}; diff --git a/test/runtime/samples/component-event-handler-modifier-once/main.svelte b/test/runtime/samples/component-event-handler-modifier-once/main.svelte new file mode 100644 index 0000000000..b9bca3b5eb --- /dev/null +++ b/test/runtime/samples/component-event-handler-modifier-once/main.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/component-namespaced/Foo.svelte b/test/runtime/samples/component-namespaced/Foo.svelte new file mode 100644 index 0000000000..67ab955233 --- /dev/null +++ b/test/runtime/samples/component-namespaced/Foo.svelte @@ -0,0 +1,5 @@ + + +

foo {foo}

\ No newline at end of file diff --git a/test/runtime/samples/component-namespaced/_config.js b/test/runtime/samples/component-namespaced/_config.js new file mode 100644 index 0000000000..b91795d6c8 --- /dev/null +++ b/test/runtime/samples/component-namespaced/_config.js @@ -0,0 +1,22 @@ +import * as path from 'path'; + +export default { + props: { + a: 1 + }, + + html: ` +

foo 1

+ `, + + before_test() { + delete require.cache[path.resolve(__dirname, 'components.js')]; + }, + + test({ assert, component, target }) { + component.a = 2; + assert.htmlEqual(target.innerHTML, ` +

foo 2

+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/component-namespaced/components.js b/test/runtime/samples/component-namespaced/components.js new file mode 100644 index 0000000000..832d2412ee --- /dev/null +++ b/test/runtime/samples/component-namespaced/components.js @@ -0,0 +1,3 @@ +import Foo from './Foo.svelte'; + +export default { Foo }; \ No newline at end of file diff --git a/test/runtime/samples/component-namespaced/main.svelte b/test/runtime/samples/component-namespaced/main.svelte new file mode 100644 index 0000000000..541b68e47e --- /dev/null +++ b/test/runtime/samples/component-namespaced/main.svelte @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-let-e/Nested.svelte b/test/runtime/samples/component-slot-let-e/Nested.svelte new file mode 100644 index 0000000000..6e7b1b1a54 --- /dev/null +++ b/test/runtime/samples/component-slot-let-e/Nested.svelte @@ -0,0 +1,7 @@ + + +
+ +
diff --git a/test/runtime/samples/component-slot-let-e/_config.js b/test/runtime/samples/component-slot-let-e/_config.js new file mode 100644 index 0000000000..1f7633da0c --- /dev/null +++ b/test/runtime/samples/component-slot-let-e/_config.js @@ -0,0 +1,20 @@ +export default { + html: ` +
+

foo

+
+ `, + + async test({ assert, target, window }) { + const div = target.querySelector('div'); + const click = new window.MouseEvent('click'); + + await div.dispatchEvent(click); + + assert.htmlEqual(target.innerHTML, ` +
+

foo

+
+ `); + } +}; diff --git a/test/runtime/samples/component-slot-let-e/main.svelte b/test/runtime/samples/component-slot-let-e/main.svelte new file mode 100644 index 0000000000..4662deef57 --- /dev/null +++ b/test/runtime/samples/component-slot-let-e/main.svelte @@ -0,0 +1,7 @@ + + + +

{someText}

+
diff --git a/test/runtime/samples/component-slot-let-in-binding/Nested.svelte b/test/runtime/samples/component-slot-let-in-binding/Nested.svelte new file mode 100644 index 0000000000..96f7adcfc6 --- /dev/null +++ b/test/runtime/samples/component-slot-let-in-binding/Nested.svelte @@ -0,0 +1,9 @@ + + +
+ {#each items as item, index} + + {/each} +
\ No newline at end of file diff --git a/test/runtime/samples/component-slot-let-in-binding/_config.js b/test/runtime/samples/component-slot-let-in-binding/_config.js new file mode 100644 index 0000000000..41e77a9574 --- /dev/null +++ b/test/runtime/samples/component-slot-let-in-binding/_config.js @@ -0,0 +1,26 @@ +export default { + html: ` +
+ + + +
+ `, + + ssrHtml: ` +
+ + + +
+ `, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + + inputs[2].value = 'd'; + await inputs[2].dispatchEvent(new window.Event('input')); + + assert.deepEqual(component.letters, ['a', 'b', 'd']); + } +}; diff --git a/test/runtime/samples/component-slot-let-in-binding/main.svelte b/test/runtime/samples/component-slot-let-in-binding/main.svelte new file mode 100644 index 0000000000..89531bf236 --- /dev/null +++ b/test/runtime/samples/component-slot-let-in-binding/main.svelte @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/test/runtime/samples/component-slot-named-inherits-default-lets/_config.js b/test/runtime/samples/component-slot-named-inherits-default-lets/_config.js index 212c57308a..a07a1482bc 100644 --- a/test/runtime/samples/component-slot-named-inherits-default-lets/_config.js +++ b/test/runtime/samples/component-slot-named-inherits-default-lets/_config.js @@ -22,4 +22,4 @@ export default { `); } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/test/runtime/samples/deconflict-globals/_config.js b/test/runtime/samples/deconflict-globals/_config.js new file mode 100644 index 0000000000..c29f022a37 --- /dev/null +++ b/test/runtime/samples/deconflict-globals/_config.js @@ -0,0 +1,14 @@ +export default { + preserveIdentifiers: true, + compileOptions: { + name: 'window' + }, + + html: ` +

I hereby declare Svelte the bestest framework.

+

nintendo sixty four

+

Woops.

+

42

+

false

+ ` +}; diff --git a/test/runtime/samples/deconflict-globals/main.svelte b/test/runtime/samples/deconflict-globals/main.svelte new file mode 100644 index 0000000000..d1928ea533 --- /dev/null +++ b/test/runtime/samples/deconflict-globals/main.svelte @@ -0,0 +1,20 @@ + + + + Cute test + + + + + +{#each everyone as someone (someone)} +

{someone}

+{/each} diff --git a/test/runtime/samples/destructuring-assignment-array/_config.js b/test/runtime/samples/destructuring-assignment-array/_config.js new file mode 100644 index 0000000000..ede4552803 --- /dev/null +++ b/test/runtime/samples/destructuring-assignment-array/_config.js @@ -0,0 +1,23 @@ +export default { + html: ` +
    +
  • Gruyere
  • +
  • Compté
  • +
  • Beaufort
  • +
  • Abondance
  • +
+ `, + + async test({ assert, component, target }) { + await component.swap(0, 1); + + assert.htmlEqual(target.innerHTML, ` +
    +
  • Compté
  • +
  • Gruyere
  • +
  • Beaufort
  • +
  • Abondance
  • +
+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/destructuring-assignment-array/main.svelte b/test/runtime/samples/destructuring-assignment-array/main.svelte new file mode 100644 index 0000000000..aebbfe204c --- /dev/null +++ b/test/runtime/samples/destructuring-assignment-array/main.svelte @@ -0,0 +1,18 @@ + + +
    + {#each cheese as cheese} +
  • {cheese}
  • + {/each} +
\ No newline at end of file diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte b/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte new file mode 100644 index 0000000000..9e5c62339d --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$props/Foo.svelte @@ -0,0 +1,7 @@ + + +
{foo}
+
{JSON.stringify($$props)}
diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js b/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js new file mode 100644 index 0000000000..62ad08624d --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$props/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [] +}; diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte b/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte new file mode 100644 index 0000000000..1566cf3e41 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$props/main.svelte @@ -0,0 +1,5 @@ + + + diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte new file mode 100644 index 0000000000..b9f7feec24 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/Foo.svelte @@ -0,0 +1,6 @@ + + +

{answer}

+
diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js new file mode 100644 index 0000000000..62ad08624d --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/_config.js @@ -0,0 +1,7 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [] +}; diff --git a/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte new file mode 100644 index 0000000000..a1656e86e0 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props-with-$$scope/main.svelte @@ -0,0 +1,7 @@ + + + + bar + diff --git a/test/runtime/samples/dev-warning-unknown-props/Foo.svelte b/test/runtime/samples/dev-warning-unknown-props/Foo.svelte new file mode 100644 index 0000000000..cebe5fd571 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props/Foo.svelte @@ -0,0 +1,5 @@ + + +
{foo}
diff --git a/test/runtime/samples/dev-warning-unknown-props/_config.js b/test/runtime/samples/dev-warning-unknown-props/_config.js new file mode 100644 index 0000000000..9bff4a2a74 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props/_config.js @@ -0,0 +1,9 @@ +export default { + compileOptions: { + dev: true + }, + + warnings: [ + ` was created with unknown prop 'fo'` + ] +}; diff --git a/test/runtime/samples/dev-warning-unknown-props/main.svelte b/test/runtime/samples/dev-warning-unknown-props/main.svelte new file mode 100644 index 0000000000..1566cf3e41 --- /dev/null +++ b/test/runtime/samples/dev-warning-unknown-props/main.svelte @@ -0,0 +1,5 @@ + + + diff --git a/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js b/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js new file mode 100644 index 0000000000..9759ada538 --- /dev/null +++ b/test/runtime/samples/dynamic-component-nulled-out-intro/_config.js @@ -0,0 +1,5 @@ +export default { + test({ component }) { + component.visible = true; + } +}; \ No newline at end of file diff --git a/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte b/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte new file mode 100644 index 0000000000..eac72cf694 --- /dev/null +++ b/test/runtime/samples/dynamic-component-nulled-out-intro/main.svelte @@ -0,0 +1,7 @@ + + +{#if visible} + +{/if} \ No newline at end of file diff --git a/test/runtime/samples/each-block-component-no-props/Child.svelte b/test/runtime/samples/each-block-component-no-props/Child.svelte new file mode 100644 index 0000000000..86ef4f3319 --- /dev/null +++ b/test/runtime/samples/each-block-component-no-props/Child.svelte @@ -0,0 +1 @@ +

hello

\ No newline at end of file diff --git a/test/runtime/samples/each-block-component-no-props/_config.js b/test/runtime/samples/each-block-component-no-props/_config.js new file mode 100644 index 0000000000..e8344496ca --- /dev/null +++ b/test/runtime/samples/each-block-component-no-props/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` +

hello

+ `, + + async test({ assert, component, target }) { + await component.remove(); + assert.htmlEqual(target.innerHTML, ``); + + await component.add(); + assert.htmlEqual(target.innerHTML, `

hello

`); + + await component.remove(); + assert.htmlEqual(target.innerHTML, ``); + } +}; diff --git a/test/runtime/samples/each-block-component-no-props/main.svelte b/test/runtime/samples/each-block-component-no-props/main.svelte new file mode 100644 index 0000000000..01299fe314 --- /dev/null +++ b/test/runtime/samples/each-block-component-no-props/main.svelte @@ -0,0 +1,17 @@ + + +{#each items as item} + +{/each} diff --git a/test/runtime/samples/each-block-else-in-if/_config.js b/test/runtime/samples/each-block-else-in-if/_config.js new file mode 100644 index 0000000000..c800ee8a30 --- /dev/null +++ b/test/runtime/samples/each-block-else-in-if/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` +

nothing

+

after

+ `, + + test({ assert, component, target }) { + component.visible = false; + assert.htmlEqual(target.innerHTML, ``); + + component.visible = true; + assert.htmlEqual(target.innerHTML, ` +

nothing

+

after

+ `); + } +}; diff --git a/test/runtime/samples/each-block-else-in-if/main.svelte b/test/runtime/samples/each-block-else-in-if/main.svelte new file mode 100644 index 0000000000..d89f645d7f --- /dev/null +++ b/test/runtime/samples/each-block-else-in-if/main.svelte @@ -0,0 +1,14 @@ + + +{#if visible} + {#each empty as item} +

{item}

+ {:else} +

nothing

+ {/each} + +

after

+{/if} \ No newline at end of file diff --git a/test/runtime/samples/each-block-keyed-nested/Child.svelte b/test/runtime/samples/each-block-keyed-nested/Child.svelte new file mode 100644 index 0000000000..e7ed726850 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-nested/Child.svelte @@ -0,0 +1,5 @@ + + +{id} \ No newline at end of file diff --git a/test/runtime/samples/each-block-keyed-nested/_config.js b/test/runtime/samples/each-block-keyed-nested/_config.js new file mode 100644 index 0000000000..3440874a8c --- /dev/null +++ b/test/runtime/samples/each-block-keyed-nested/_config.js @@ -0,0 +1,16 @@ +export default { + html: ` + 1 + `, + + test({ assert, component, target }) { + component.desks = [ + { + id: 1, + teams: [] + } + ]; + + assert.htmlEqual(target.innerHTML, ''); + } +}; diff --git a/test/runtime/samples/each-block-keyed-nested/main.svelte b/test/runtime/samples/each-block-keyed-nested/main.svelte new file mode 100644 index 0000000000..86f665a5e7 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-nested/main.svelte @@ -0,0 +1,16 @@ + + +{#each desks as desk (desk.id)} + {#each desk.teams as team (team.id)} + + {/each} +{/each} \ No newline at end of file diff --git a/test/runtime/samples/each-block-keyed-shift/Nested.svelte b/test/runtime/samples/each-block-keyed-shift/Nested.svelte new file mode 100644 index 0000000000..82df711742 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-shift/Nested.svelte @@ -0,0 +1,5 @@ + + +

{title}

\ No newline at end of file diff --git a/test/runtime/samples/each-block-keyed-shift/_config.js b/test/runtime/samples/each-block-keyed-shift/_config.js new file mode 100644 index 0000000000..44ca8447f0 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-shift/_config.js @@ -0,0 +1,27 @@ +export default { + props: { + titles: [{ name: 'a', }, { name: 'b' }, { name: 'c' }] + }, + + html: ` +

a

+

b

+

c

+ `, + + test({ assert, component, target }) { + component.titles = [{ name: 'b' }, { name: 'c' }]; + + assert.htmlEqual(target.innerHTML, ` +

b

+

c

+ `); + + component.titles = [{ name: 'c' }]; + + assert.htmlEqual(target.innerHTML, ` +

c

+ `); + + } +}; diff --git a/test/runtime/samples/each-block-keyed-shift/main.svelte b/test/runtime/samples/each-block-keyed-shift/main.svelte new file mode 100644 index 0000000000..b8954e17fd --- /dev/null +++ b/test/runtime/samples/each-block-keyed-shift/main.svelte @@ -0,0 +1,9 @@ + + +{#each titles as title (title.name)} + +{/each} \ No newline at end of file diff --git a/test/runtime/samples/element-invalid-name/_config.js b/test/runtime/samples/element-invalid-name/_config.js index af6e4933ce..d70c920a19 100644 --- a/test/runtime/samples/element-invalid-name/_config.js +++ b/test/runtime/samples/element-invalid-name/_config.js @@ -2,4 +2,4 @@ export default { html: ` Hello ` -} +}; diff --git a/test/runtime/samples/event-handler-multiple/_config.js b/test/runtime/samples/event-handler-multiple/_config.js new file mode 100644 index 0000000000..cf17c61f60 --- /dev/null +++ b/test/runtime/samples/event-handler-multiple/_config.js @@ -0,0 +1,14 @@ +export default { + html: ` + + `, + + async test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.MouseEvent('click'); + + await button.dispatchEvent(event); + assert.equal(component.clickHandlerOne, 1); + assert.equal(component.clickHandlerTwo, 1); + } +}; diff --git a/test/runtime/samples/event-handler-multiple/main.svelte b/test/runtime/samples/event-handler-multiple/main.svelte new file mode 100644 index 0000000000..f327a7fd2a --- /dev/null +++ b/test/runtime/samples/event-handler-multiple/main.svelte @@ -0,0 +1,6 @@ + + + diff --git a/test/runtime/samples/event-handler-shorthand-sanitized/_config.js b/test/runtime/samples/event-handler-shorthand-sanitized/_config.js new file mode 100644 index 0000000000..030e27ad1a --- /dev/null +++ b/test/runtime/samples/event-handler-shorthand-sanitized/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + `, + + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + const event = new window.Event('click-now'); + + let clicked; + component.$on('click-now', () => { + clicked = true; + }); + + button.dispatchEvent(event); + assert.ok(clicked); + } +}; diff --git a/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte b/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte new file mode 100644 index 0000000000..05de1316ef --- /dev/null +++ b/test/runtime/samples/event-handler-shorthand-sanitized/main.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/runtime/samples/export-function-hoisting/_config.js b/test/runtime/samples/export-function-hoisting/_config.js index c56851d065..f01c8b4841 100644 --- a/test/runtime/samples/export-function-hoisting/_config.js +++ b/test/runtime/samples/export-function-hoisting/_config.js @@ -1,3 +1,3 @@ export default { - html: 'Compile plz' -} + html: 'Compile plz' +}; diff --git a/test/runtime/samples/fragment-trailing-whitespace/_config.js b/test/runtime/samples/fragment-trailing-whitespace/_config.js new file mode 100644 index 0000000000..2251d6dae8 --- /dev/null +++ b/test/runtime/samples/fragment-trailing-whitespace/_config.js @@ -0,0 +1,16 @@ +const message = "the quick brown fox jumps over the lazy dog"; +const expected = [...message].map(c => `${c + " "}`).join(""); + +export default { + props: { + message + }, + + async test({ assert, target }) { + const firstSpanList = target.children[0]; + assert.equal(firstSpanList.innerHTML, expected); + + const secondSpanList = target.children[1]; + assert.equal(secondSpanList.innerHTML, expected); + } +}; diff --git a/test/runtime/samples/fragment-trailing-whitespace/main.svelte b/test/runtime/samples/fragment-trailing-whitespace/main.svelte new file mode 100644 index 0000000000..f36f2694a6 --- /dev/null +++ b/test/runtime/samples/fragment-trailing-whitespace/main.svelte @@ -0,0 +1,11 @@ + + +
+ {#each message as char} + {char} + {/each} +
+ +
{#each message as char}{char} {/each}
\ No newline at end of file diff --git a/test/runtime/samples/function-expression-inline/_config.js b/test/runtime/samples/function-expression-inline/_config.js new file mode 100644 index 0000000000..6916be45b1 --- /dev/null +++ b/test/runtime/samples/function-expression-inline/_config.js @@ -0,0 +1,22 @@ +export default { + html: ` + +

1

+

2

+

3

+ `, + + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + + assert.htmlEqual(target.innerHTML, ` + +

2

+

4

+

6

+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/function-expression-inline/main.svelte b/test/runtime/samples/function-expression-inline/main.svelte new file mode 100644 index 0000000000..f3f98459a7 --- /dev/null +++ b/test/runtime/samples/function-expression-inline/main.svelte @@ -0,0 +1,13 @@ + + + + +{#each list as number} +

{number}

+{/each} \ No newline at end of file diff --git a/test/runtime/samples/function-hoisting/_config.js b/test/runtime/samples/function-hoisting/_config.js index 5a22ffaf0b..91492d8c38 100644 --- a/test/runtime/samples/function-hoisting/_config.js +++ b/test/runtime/samples/function-hoisting/_config.js @@ -1,7 +1,7 @@ export default { - props: { - greeting: 'Good day' - }, + props: { + greeting: 'Good day' + }, - html: '

Good day, world

' -} + html: '

Good day, world

' +}; diff --git a/test/runtime/samples/get-after-destroy/_config.js b/test/runtime/samples/get-after-destroy/_config.js index bf4d8e90ba..5d10bbe72a 100644 --- a/test/runtime/samples/get-after-destroy/_config.js +++ b/test/runtime/samples/get-after-destroy/_config.js @@ -10,4 +10,4 @@ export default { const { foo } = component; assert.equal(foo, undefined); } -} \ No newline at end of file +}; diff --git a/test/runtime/samples/head-detached-in-dynamic-component/A.svelte b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte new file mode 100644 index 0000000000..f05488e3e4 --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte @@ -0,0 +1,5 @@ + + + + +A \ No newline at end of file diff --git a/test/runtime/samples/head-detached-in-dynamic-component/B.svelte b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte new file mode 100644 index 0000000000..943b307cc3 --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte @@ -0,0 +1,5 @@ + + + + +B \ No newline at end of file diff --git a/test/runtime/samples/head-detached-in-dynamic-component/_config.js b/test/runtime/samples/head-detached-in-dynamic-component/_config.js new file mode 100644 index 0000000000..e18589e10e --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + A + `, + + test({ assert, component, window }) { + component.x = false; + + const meta = window.document.querySelectorAll('meta'); + + assert.equal(meta.length, 1); + assert.equal(meta[0].name, 'description'); + assert.equal(meta[0].content, 'B'); + } +}; diff --git a/test/runtime/samples/head-detached-in-dynamic-component/main.svelte b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte new file mode 100644 index 0000000000..e4acd7737a --- /dev/null +++ b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte @@ -0,0 +1,8 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/head-if-block/_config.js b/test/runtime/samples/head-if-block/_config.js index 26e1457be7..439ed2cb1b 100644 --- a/test/runtime/samples/head-if-block/_config.js +++ b/test/runtime/samples/head-if-block/_config.js @@ -9,4 +9,4 @@ export default { component.condition = true; assert.equal(window.document.title, 'woo!!!'); } -}; \ No newline at end of file +}; diff --git a/test/runtime/samples/head-if-block/main.svelte b/test/runtime/samples/head-if-block/main.svelte index a6b115bf28..1656278b9e 100644 --- a/test/runtime/samples/head-if-block/main.svelte +++ b/test/runtime/samples/head-if-block/main.svelte @@ -6,4 +6,4 @@ {#if condition} woo!!! {/if} - \ No newline at end of file + diff --git a/test/runtime/samples/head-if-else-block/_config.js b/test/runtime/samples/head-if-else-block/_config.js new file mode 100644 index 0000000000..7665bfe90b --- /dev/null +++ b/test/runtime/samples/head-if-else-block/_config.js @@ -0,0 +1,14 @@ +export default { + props: { + condition: false + }, + + test({ assert, component, target, window }) { + assert.equal(window.document.title, ''); + assert.equal(Boolean(window.document.getElementById('meta')), true); + + component.condition = true; + assert.equal(window.document.title, 'woo!!!'); + assert.equal(window.document.getElementById('meta'), null); + } +}; diff --git a/test/runtime/samples/head-if-else-block/main.svelte b/test/runtime/samples/head-if-else-block/main.svelte new file mode 100644 index 0000000000..a31bdf3330 --- /dev/null +++ b/test/runtime/samples/head-if-else-block/main.svelte @@ -0,0 +1,11 @@ + + + + {#if condition} + woo!!! + {:else} + + {/if} + diff --git a/test/runtime/samples/head-if-else-raw-dynamic/_config.js b/test/runtime/samples/head-if-else-raw-dynamic/_config.js new file mode 100644 index 0000000000..b6da617cb9 --- /dev/null +++ b/test/runtime/samples/head-if-else-raw-dynamic/_config.js @@ -0,0 +1,19 @@ +const foo = ''; +const bar = ''; + +export default { + props: { + condition: false, + foo, + bar + }, + + test({ assert, component, window }) { + assert.equal(window.document.head.innerHTML.includes(foo), false); + assert.equal(window.document.head.innerHTML.includes(bar), true); + + component.condition = true; + assert.equal(window.document.head.innerHTML.includes(foo), true); + assert.equal(window.document.head.innerHTML.includes(bar), false); + } +}; diff --git a/test/runtime/samples/head-if-else-raw-dynamic/main.svelte b/test/runtime/samples/head-if-else-raw-dynamic/main.svelte new file mode 100644 index 0000000000..ca322dad83 --- /dev/null +++ b/test/runtime/samples/head-if-else-raw-dynamic/main.svelte @@ -0,0 +1,11 @@ + + + + {#if condition} + {@html foo} + {:else} + {@html bar} + {/if} + diff --git a/test/runtime/samples/head-raw-dynamic/Bar.svelte b/test/runtime/samples/head-raw-dynamic/Bar.svelte new file mode 100644 index 0000000000..11e5cb9ee8 --- /dev/null +++ b/test/runtime/samples/head-raw-dynamic/Bar.svelte @@ -0,0 +1,11 @@ + + + + + {#if true} + {@html bar} + {/if} + bar!!! + diff --git a/test/runtime/samples/head-raw-dynamic/Foo.svelte b/test/runtime/samples/head-raw-dynamic/Foo.svelte new file mode 100644 index 0000000000..f4fd5741ac --- /dev/null +++ b/test/runtime/samples/head-raw-dynamic/Foo.svelte @@ -0,0 +1,7 @@ + + + + {@html foo} + diff --git a/test/runtime/samples/head-raw-dynamic/_config.js b/test/runtime/samples/head-raw-dynamic/_config.js new file mode 100644 index 0000000000..61e86727ff --- /dev/null +++ b/test/runtime/samples/head-raw-dynamic/_config.js @@ -0,0 +1,26 @@ +const foo = ''; +const bar = ''; + +export default { + props: { + condition: 1, + foo, + bar + }, + + test({ assert, component, window }) { + assert.equal(window.document.head.innerHTML.includes(foo), true); + + component.condition = false; + assert.equal(window.document.head.innerHTML.includes(foo), false); + + component.condition = 2; + assert.equal(window.document.title, 'bar!!!'); + assert.equal(window.document.head.innerHTML.includes(bar), true); + assert.equal(Boolean(window.document.getElementById('meta')), true); + + component.condition = false; + assert.equal(window.document.head.innerHTML.includes(bar), false); + assert.equal(window.document.getElementById('meta'), null); + } +}; diff --git a/test/runtime/samples/head-raw-dynamic/main.svelte b/test/runtime/samples/head-raw-dynamic/main.svelte new file mode 100644 index 0000000000..69f341ae36 --- /dev/null +++ b/test/runtime/samples/head-raw-dynamic/main.svelte @@ -0,0 +1,12 @@ + + +{#if condition === 1} + +{:else if condition === 2} + +{/if} diff --git a/test/runtime/samples/head-title-empty/_config.js b/test/runtime/samples/head-title-empty/_config.js new file mode 100644 index 0000000000..497855156c --- /dev/null +++ b/test/runtime/samples/head-title-empty/_config.js @@ -0,0 +1,5 @@ +export default { + test({ assert, window }) { + assert.equal(window.document.title, ''); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/head-title-empty/main.svelte b/test/runtime/samples/head-title-empty/main.svelte new file mode 100644 index 0000000000..3f81715df5 --- /dev/null +++ b/test/runtime/samples/head-title-empty/main.svelte @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/html-entities/_config.js b/test/runtime/samples/html-entities/_config.js index 1591f31a53..c8c2de8403 100644 --- a/test/runtime/samples/html-entities/_config.js +++ b/test/runtime/samples/html-entities/_config.js @@ -9,6 +9,6 @@ export default { A - ¬anentity; + &notanentity; ` }; \ No newline at end of file diff --git a/test/runtime/samples/immutable-nested/Nested.svelte b/test/runtime/samples/immutable-nested/Nested.svelte index 45385e9b0b..acb0b480a4 100644 --- a/test/runtime/samples/immutable-nested/Nested.svelte +++ b/test/runtime/samples/immutable-nested/Nested.svelte @@ -1,7 +1,7 @@ -

Called {count} times.

\ No newline at end of file +

Called {count} times.

+

{foo.bar} {mounted}

\ No newline at end of file diff --git a/test/runtime/samples/immutable-nested/_config.js b/test/runtime/samples/immutable-nested/_config.js index e5c515fc78..8b1dd7e68a 100644 --- a/test/runtime/samples/immutable-nested/_config.js +++ b/test/runtime/samples/immutable-nested/_config.js @@ -1,16 +1,36 @@ export default { immutable: true, - html: `

Called 1 times.

`, + html: ` +
+

Called 1 times.

+

baz true

+
+ `, - ssrHtml: `

Called 0 times.

`, + ssrHtml: ` +
+

Called 0 times.

+

baz false

+
`, - test({ assert, component, target, window }) { - var nested = component.nested; + test({ assert, component, target }) { + const nested = component.nested; - assert.htmlEqual(target.innerHTML, `

Called 1 times.

`); + assert.htmlEqual(target.innerHTML, ` +
+

Called 1 times.

+

baz true

+
+ `); + // eslint-disable-next-line no-self-assign nested.foo = nested.foo; - assert.htmlEqual(target.innerHTML, `

Called 1 times.

`); + assert.htmlEqual(target.innerHTML, ` +
+

Called 1 times.

+

baz true

+
+ `); } }; diff --git a/test/runtime/samples/immutable-nested/main.svelte b/test/runtime/samples/immutable-nested/main.svelte index e50055be0c..4ccf7008cd 100644 --- a/test/runtime/samples/immutable-nested/main.svelte +++ b/test/runtime/samples/immutable-nested/main.svelte @@ -5,5 +5,5 @@
- +
diff --git a/test/runtime/samples/immutable-option/_config.js b/test/runtime/samples/immutable-option/_config.js index 0aaa742fbe..1224d0213a 100644 --- a/test/runtime/samples/immutable-option/_config.js +++ b/test/runtime/samples/immutable-option/_config.js @@ -4,6 +4,7 @@ export default { html: `

Called 1 times.

`, test({ assert, component, target }) { + // eslint-disable-next-line no-self-assign component.foo = component.foo; assert.htmlEqual(target.innerHTML, `

Called 1 times.

`); } diff --git a/test/runtime/samples/immutable-svelte-meta-false/_config.js b/test/runtime/samples/immutable-svelte-meta-false/_config.js index 933c151d6b..664f99f087 100644 --- a/test/runtime/samples/immutable-svelte-meta-false/_config.js +++ b/test/runtime/samples/immutable-svelte-meta-false/_config.js @@ -4,6 +4,7 @@ export default { html: `

Called 1 times.

`, test({ assert, component, target }) { + // eslint-disable-next-line no-self-assign component.foo = component.foo; assert.htmlEqual(target.innerHTML, `

Called 2 times.

`); } diff --git a/test/runtime/samples/immutable-svelte-meta/_config.js b/test/runtime/samples/immutable-svelte-meta/_config.js index 9bd32dbd11..4e39f36224 100644 --- a/test/runtime/samples/immutable-svelte-meta/_config.js +++ b/test/runtime/samples/immutable-svelte-meta/_config.js @@ -2,6 +2,7 @@ export default { html: `

Called 1 times.

`, test({ assert, component, target }) { + // eslint-disable-next-line no-self-assign component.foo = component.foo; assert.htmlEqual(target.innerHTML, `

Called 1 times.

`); } diff --git a/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js b/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js new file mode 100644 index 0000000000..f70a80fe44 --- /dev/null +++ b/test/runtime/samples/instrumentation-auto-subscription-self-assignment/_config.js @@ -0,0 +1,8 @@ +export default { + html: `[]`, + + async test({ assert, component, target }) { + await component.go(); + assert.htmlEqual(target.innerHTML, `[42]`); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte b/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte new file mode 100644 index 0000000000..8611e773f2 --- /dev/null +++ b/test/runtime/samples/instrumentation-auto-subscription-self-assignment/main.svelte @@ -0,0 +1,11 @@ + + +{JSON.stringify(bar)} diff --git a/test/runtime/samples/internal-state/_config.js b/test/runtime/samples/internal-state/_config.js index 09ea61a8eb..6b8440aaf3 100644 --- a/test/runtime/samples/internal-state/_config.js +++ b/test/runtime/samples/internal-state/_config.js @@ -1,18 +1,18 @@ export default { - html: ` -

internal: 1

- - `, + html: ` +

internal: 1

+ + `, - async test({ assert, target, window }) { - const button = target.querySelector('button'); - const click = new window.MouseEvent('click'); + async test({ assert, target, window }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); - await button.dispatchEvent(click); + await button.dispatchEvent(click); - assert.htmlEqual(target.innerHTML, ` -

internal: 1

- - `); - } -}; \ No newline at end of file + assert.htmlEqual(target.innerHTML, ` +

internal: 1

+ + `); + } +}; diff --git a/test/runtime/samples/isolated-text/_config.js b/test/runtime/samples/isolated-text/_config.js new file mode 100644 index 0000000000..ec4332be5c --- /dev/null +++ b/test/runtime/samples/isolated-text/_config.js @@ -0,0 +1,6 @@ +export default { + html: ` + before +

after

+ ` +}; \ No newline at end of file diff --git a/test/runtime/samples/isolated-text/main.svelte b/test/runtime/samples/isolated-text/main.svelte new file mode 100644 index 0000000000..fa48dea46e --- /dev/null +++ b/test/runtime/samples/isolated-text/main.svelte @@ -0,0 +1,5 @@ +before + + + +

after

\ No newline at end of file diff --git a/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte b/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte new file mode 100755 index 0000000000..91411e1e73 --- /dev/null +++ b/test/runtime/samples/lifecycle-render-order-for-children/Item.svelte @@ -0,0 +1,29 @@ + + +
  • + {logRender()} +
  • diff --git a/test/runtime/samples/lifecycle-render-order-for-children/_config.js b/test/runtime/samples/lifecycle-render-order-for-children/_config.js new file mode 100644 index 0000000000..a1d35d7aa8 --- /dev/null +++ b/test/runtime/samples/lifecycle-render-order-for-children/_config.js @@ -0,0 +1,28 @@ +import order from './order.js'; + +export default { + skip_if_ssr: true, + + test({ assert, component, target }) { + assert.deepEqual(order, [ + '0: beforeUpdate', + '0: render', + '1: beforeUpdate', + '1: render', + '2: beforeUpdate', + '2: render', + '3: beforeUpdate', + '3: render', + '1: onMount', + '1: afterUpdate', + '2: onMount', + '2: afterUpdate', + '3: onMount', + '3: afterUpdate', + '0: onMount', + '0: afterUpdate' + ]); + + order.length = 0; + } +}; diff --git a/test/runtime/samples/lifecycle-render-order-for-children/main.svelte b/test/runtime/samples/lifecycle-render-order-for-children/main.svelte new file mode 100644 index 0000000000..fbb1c937e4 --- /dev/null +++ b/test/runtime/samples/lifecycle-render-order-for-children/main.svelte @@ -0,0 +1,33 @@ + + +{logRender()} +
      + {#each [1,2,3] as index} + + {/each} +
    + + diff --git a/test/runtime/samples/lifecycle-render-order-for-children/order.js b/test/runtime/samples/lifecycle-render-order-for-children/order.js new file mode 100644 index 0000000000..109fa8b38c --- /dev/null +++ b/test/runtime/samples/lifecycle-render-order-for-children/order.js @@ -0,0 +1 @@ +export default []; \ No newline at end of file diff --git a/test/runtime/samples/lifecycle-render-order/_config.js b/test/runtime/samples/lifecycle-render-order/_config.js index 44d7f61da6..5080973cef 100644 --- a/test/runtime/samples/lifecycle-render-order/_config.js +++ b/test/runtime/samples/lifecycle-render-order/_config.js @@ -3,12 +3,12 @@ import order from './order.js'; export default { skip_if_ssr: true, - test({ assert, component, target }) { + test({ assert }) { assert.deepEqual(order, [ 'beforeUpdate', 'render', - 'afterUpdate', - 'onMount' + 'onMount', + 'afterUpdate' ]); order.length = 0; diff --git a/test/runtime/samples/mixed-let-export/_config.js b/test/runtime/samples/mixed-let-export/_config.js index 5ac8585742..f3da4215d9 100644 --- a/test/runtime/samples/mixed-let-export/_config.js +++ b/test/runtime/samples/mixed-let-export/_config.js @@ -1,9 +1,9 @@ export default { - props: { - a: 42 - }, + props: { + a: 42 + }, - html: ` - 42 - ` -} + html: ` + 42 + ` +}; diff --git a/test/runtime/samples/nbsp-div/_config.js b/test/runtime/samples/nbsp-div/_config.js new file mode 100644 index 0000000000..5ab7a7f04b --- /dev/null +++ b/test/runtime/samples/nbsp-div/_config.js @@ -0,0 +1,17 @@ +export default { + html: `
     hello
    +
     hello  
    +
     hello   hello
    `, + + test({ assert, component, target }) { + const divList = target.querySelectorAll('div'); + assert.equal( divList[0].textContent.charCodeAt( 0 ), 160 ); + assert.equal( divList[1].textContent.charCodeAt( 0 ), 160 ); + assert.equal( divList[1].textContent.charCodeAt( 6 ), 160 ); + assert.equal( divList[1].textContent.charCodeAt( 7 ), 160 ); + assert.equal( divList[2].textContent.charCodeAt( 0 ), 160 ); + assert.equal( divList[2].textContent.charCodeAt( 6 ), 160 ); + assert.equal( divList[2].textContent.charCodeAt( 7 ), 32 ); //normal space + assert.equal( divList[2].textContent.charCodeAt( 8 ), 160 ); + } +}; diff --git a/test/runtime/samples/nbsp-div/main.svelte b/test/runtime/samples/nbsp-div/main.svelte new file mode 100644 index 0000000000..64557bfeb1 --- /dev/null +++ b/test/runtime/samples/nbsp-div/main.svelte @@ -0,0 +1,7 @@ + + +
     {name}
    +
     {name}  
    +
     {name}   {name}
    \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/A.svelte b/test/runtime/samples/ondestroy-deep/A.svelte new file mode 100644 index 0000000000..a1a740bc2e --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/A.svelte @@ -0,0 +1,15 @@ + + +
    + {#if yes} + + {/if} +
    \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/B.svelte b/test/runtime/samples/ondestroy-deep/B.svelte new file mode 100644 index 0000000000..78b042f2d6 --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/B.svelte @@ -0,0 +1,15 @@ + + +
    + {#if yes} + + {/if} +
    \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/C.svelte b/test/runtime/samples/ondestroy-deep/C.svelte new file mode 100644 index 0000000000..27f33c93fc --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/C.svelte @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/_config.js b/test/runtime/samples/ondestroy-deep/_config.js new file mode 100644 index 0000000000..4431a2e163 --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/_config.js @@ -0,0 +1,10 @@ +import { destroyed, reset } from './destroyed.js'; + +export default { + test({ assert, component }) { + component.visible = false; + assert.deepEqual(destroyed, ['A', 'B', 'C']); + + reset(); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/destroyed.js b/test/runtime/samples/ondestroy-deep/destroyed.js new file mode 100644 index 0000000000..fe05c1d241 --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/destroyed.js @@ -0,0 +1,3 @@ +export const destroyed = []; + +export const reset = () => destroyed.length = 0; \ No newline at end of file diff --git a/test/runtime/samples/ondestroy-deep/main.svelte b/test/runtime/samples/ondestroy-deep/main.svelte new file mode 100644 index 0000000000..d584dc1b85 --- /dev/null +++ b/test/runtime/samples/ondestroy-deep/main.svelte @@ -0,0 +1,9 @@ + + +{#if visible} + +{/if} \ No newline at end of file diff --git a/test/runtime/samples/prop-exports/_config.js b/test/runtime/samples/prop-exports/_config.js index 631c9eb0ad..e1620c015f 100644 --- a/test/runtime/samples/prop-exports/_config.js +++ b/test/runtime/samples/prop-exports/_config.js @@ -2,29 +2,29 @@ import { writable } from '../../../../store'; export default { props: { - s1: writable(42), - s2: writable(43), - p1: 2, - p3: 3, - a1: writable(1), - a2: 4, - a6: writable(29), - for: 'loop', - continue: '...', + s1: writable(42), + s2: writable(43), + p1: 2, + p3: 3, + a1: writable(1), + a2: 4, + a6: writable(29), + for: 'loop', + continue: '...', }, html: ` - $s1=42 - $s2=43 - p1=2 - p3=3 - $v1=1 - v2=4 - vi1=4 - $vs1=1 - vl0=hello - vl1=test - $s3=29 - loop... - ` -} + $s1=42 + $s2=43 + p1=2 + p3=3 + $v1=1 + v2=4 + vi1=4 + $vs1=1 + vl0=hello + vl1=test + $s3=29 + loop... + ` +}; diff --git a/test/runtime/samples/prop-subscribable/_config.js b/test/runtime/samples/prop-subscribable/_config.js index 69f8104fab..84cde8c9af 100644 --- a/test/runtime/samples/prop-subscribable/_config.js +++ b/test/runtime/samples/prop-subscribable/_config.js @@ -1,4 +1,4 @@ -import { writable } from '../../../../store.js'; +import { writable } from '../../../../store'; export default { props: { diff --git a/test/runtime/samples/reactive-function-inline/_config.js b/test/runtime/samples/reactive-function-inline/_config.js new file mode 100644 index 0000000000..45afe8929f --- /dev/null +++ b/test/runtime/samples/reactive-function-inline/_config.js @@ -0,0 +1,8 @@ +export default { + html: '

    0

    ', + + test({ assert, component, target }) { + component.selected = 3; + assert.htmlEqual(target.innerHTML, '

    3

    '); + } +}; diff --git a/test/runtime/samples/reactive-function-inline/main.svelte b/test/runtime/samples/reactive-function-inline/main.svelte new file mode 100644 index 0000000000..2a129c4a5d --- /dev/null +++ b/test/runtime/samples/reactive-function-inline/main.svelte @@ -0,0 +1,6 @@ + + +

    {list.filter(x => x === selected)}

    \ No newline at end of file diff --git a/test/runtime/samples/reactive-function/_config.js b/test/runtime/samples/reactive-function/_config.js index a29c022b5f..b3c6a65dbb 100644 --- a/test/runtime/samples/reactive-function/_config.js +++ b/test/runtime/samples/reactive-function/_config.js @@ -2,10 +2,8 @@ export default { html: '

    50

    ', test({ assert, component, target }) { - console.group('range [50,100]'); component.range = [50, 100]; assert.htmlEqual(target.innerHTML, '

    75

    '); - console.groupEnd(); component.range = [50, 60]; assert.htmlEqual(target.innerHTML, '

    55

    '); diff --git a/test/runtime/samples/reactive-value-function-hoist-b/_config.js b/test/runtime/samples/reactive-value-function-hoist-b/_config.js new file mode 100644 index 0000000000..04c4fd3f11 --- /dev/null +++ b/test/runtime/samples/reactive-value-function-hoist-b/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ` + + `); + } +}; diff --git a/test/runtime/samples/reactive-value-function-hoist-b/main.svelte b/test/runtime/samples/reactive-value-function-hoist-b/main.svelte new file mode 100644 index 0000000000..2e9ee6eefe --- /dev/null +++ b/test/runtime/samples/reactive-value-function-hoist-b/main.svelte @@ -0,0 +1,10 @@ + + + diff --git a/test/runtime/samples/reactive-value-function-hoist/_config.js b/test/runtime/samples/reactive-value-function-hoist/_config.js new file mode 100644 index 0000000000..6198a57ef6 --- /dev/null +++ b/test/runtime/samples/reactive-value-function-hoist/_config.js @@ -0,0 +1,15 @@ +export default { + html: ` + + `, + + async test({ assert, target, window }) { + const event = new window.MouseEvent('click'); + const button = target.querySelector('button'); + + await button.dispatchEvent(event); + assert.htmlEqual(target.innerHTML, ` + + `); + } +}; diff --git a/test/runtime/samples/reactive-value-function-hoist/main.svelte b/test/runtime/samples/reactive-value-function-hoist/main.svelte new file mode 100644 index 0000000000..0f2dadb561 --- /dev/null +++ b/test/runtime/samples/reactive-value-function-hoist/main.svelte @@ -0,0 +1,10 @@ + + + diff --git a/test/runtime/samples/reactive-value-mutate-const/_config.js b/test/runtime/samples/reactive-value-mutate-const/_config.js new file mode 100644 index 0000000000..da0a19dd28 --- /dev/null +++ b/test/runtime/samples/reactive-value-mutate-const/_config.js @@ -0,0 +1,17 @@ +export default { + html: ` + +
    {}
    + `, + + async test({ assert, target }) { + const button = target.querySelector('button'); + const click = new window.MouseEvent('click'); + + await button.dispatchEvent(click); + assert.htmlEqual(target.innerHTML, ` + +
    {"foo":42}
    + `); + } +}; diff --git a/test/runtime/samples/reactive-value-mutate-const/main.svelte b/test/runtime/samples/reactive-value-mutate-const/main.svelte new file mode 100644 index 0000000000..403544e5f1 --- /dev/null +++ b/test/runtime/samples/reactive-value-mutate-const/main.svelte @@ -0,0 +1,9 @@ + + + +
    {JSON.stringify(b)}
    + diff --git a/test/runtime/samples/script-style-non-top-level/_config.js b/test/runtime/samples/script-style-non-top-level/_config.js index 1aade72239..86eddf4611 100644 --- a/test/runtime/samples/script-style-non-top-level/_config.js +++ b/test/runtime/samples/script-style-non-top-level/_config.js @@ -2,7 +2,7 @@ export default { html: `
    - +
    ` }; \ No newline at end of file diff --git a/test/runtime/samples/script-style-non-top-level/main.svelte b/test/runtime/samples/script-style-non-top-level/main.svelte index 94cf72e4bd..73b0dfcf38 100644 --- a/test/runtime/samples/script-style-non-top-level/main.svelte +++ b/test/runtime/samples/script-style-non-top-level/main.svelte @@ -1,4 +1,4 @@
    - +
    \ No newline at end of file diff --git a/test/runtime/samples/set-undefined-attr/_config.js b/test/runtime/samples/set-undefined-attr/_config.js index e28bad8257..b23f51dfc9 100644 --- a/test/runtime/samples/set-undefined-attr/_config.js +++ b/test/runtime/samples/set-undefined-attr/_config.js @@ -1,5 +1,5 @@ export default { - html: '
    ', + html: `
    `, - ssrHtml: '
    ' + ssrHtml: `
    `, }; diff --git a/test/runtime/samples/set-undefined-attr/main.svelte b/test/runtime/samples/set-undefined-attr/main.svelte index 8191acbeff..77a1885415 100644 --- a/test/runtime/samples/set-undefined-attr/main.svelte +++ b/test/runtime/samples/set-undefined-attr/main.svelte @@ -3,10 +3,11 @@ export let foo = 1; export let bar; + export let _class; onMount(() => { foo = undefined; }); -
    +
    diff --git a/test/runtime/samples/shorthand-method-in-template/Foo.svelte b/test/runtime/samples/shorthand-method-in-template/Foo.svelte new file mode 100644 index 0000000000..bbe542622d --- /dev/null +++ b/test/runtime/samples/shorthand-method-in-template/Foo.svelte @@ -0,0 +1,5 @@ + + +{bar.answer()} \ No newline at end of file diff --git a/test/runtime/samples/shorthand-method-in-template/_config.js b/test/runtime/samples/shorthand-method-in-template/_config.js new file mode 100644 index 0000000000..ddd282644d --- /dev/null +++ b/test/runtime/samples/shorthand-method-in-template/_config.js @@ -0,0 +1,3 @@ +export default { + html: '42' +}; \ No newline at end of file diff --git a/test/runtime/samples/shorthand-method-in-template/main.svelte b/test/runtime/samples/shorthand-method-in-template/main.svelte new file mode 100644 index 0000000000..9ebd11aacb --- /dev/null +++ b/test/runtime/samples/shorthand-method-in-template/main.svelte @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/spring/_config.js b/test/runtime/samples/spring/_config.js new file mode 100644 index 0000000000..49367ce08b --- /dev/null +++ b/test/runtime/samples/spring/_config.js @@ -0,0 +1,3 @@ +export default { + html: `

    0

    ` +}; diff --git a/test/runtime/samples/spring/main.svelte b/test/runtime/samples/spring/main.svelte new file mode 100644 index 0000000000..39c9afde1d --- /dev/null +++ b/test/runtime/samples/spring/main.svelte @@ -0,0 +1,8 @@ + + +

    {$x}

    \ No newline at end of file diff --git a/test/runtime/samples/store-assignment-updates-reactive/_config.js b/test/runtime/samples/store-assignment-updates-reactive/_config.js index a7439bde5c..e81b3bb180 100644 --- a/test/runtime/samples/store-assignment-updates-reactive/_config.js +++ b/test/runtime/samples/store-assignment-updates-reactive/_config.js @@ -1,4 +1,4 @@ -import { writable } from '../../../../store.js'; +import { writable } from '../../../../store'; const c = writable(0); diff --git a/test/runtime/samples/store-assignment-updates-reactive/main.svelte b/test/runtime/samples/store-assignment-updates-reactive/main.svelte index 18ec3bd7a7..9975ea87b8 100644 --- a/test/runtime/samples/store-assignment-updates-reactive/main.svelte +++ b/test/runtime/samples/store-assignment-updates-reactive/main.svelte @@ -1,5 +1,5 @@ + +

    {status}

    + +{#each things as thing} + {#if visible} +

    {thing}

    + {/if} +{/each} \ No newline at end of file diff --git a/test/runtime/samples/transition-js-if-block-outro-timeout/_config.js b/test/runtime/samples/transition-js-if-block-outro-timeout/_config.js index 5c5d33ff28..5c6e103a5a 100644 --- a/test/runtime/samples/transition-js-if-block-outro-timeout/_config.js +++ b/test/runtime/samples/transition-js-if-block-outro-timeout/_config.js @@ -8,7 +8,6 @@ export default { raf.tick(200); assert.equal(window.getComputedStyle(div).opacity, 0.5); - component.blabla = false; raf.tick(400); assert.equal(window.getComputedStyle(div).opacity, 0); diff --git a/test/server-side-rendering/index.js b/test/server-side-rendering/index.js index 6a546b0b7b..cf6e5ad964 100644 --- a/test/server-side-rendering/index.js +++ b/test/server-side-rendering/index.js @@ -1,7 +1,6 @@ import * as assert from "assert"; import * as fs from "fs"; import * as path from "path"; -import * as glob from 'tiny-glob/sync.js'; import { showOutput, @@ -96,10 +95,13 @@ describe("ssr", () => { (config.skip ? it.skip : config.solo ? it.only : it)(dir, () => { const cwd = path.resolve("test/runtime/samples", dir); - glob('**/*.svelte', { cwd: `test/runtime/samples/${dir}` }).forEach(file => { - const resolved = require.resolve(`../runtime/samples/${dir}/${file}`); - delete require.cache[resolved]; - }); + Object.keys(require.cache) + .filter(x => x.endsWith('.svelte')) + .forEach(file => { + delete require.cache[file]; + }); + + delete global.window; const compileOptions = Object.assign({ sveltePath }, config.compileOptions, { generate: 'ssr' diff --git a/test/server-side-rendering/samples/bindings-readonly/_expected.html b/test/server-side-rendering/samples/bindings-readonly/_expected.html new file mode 100644 index 0000000000..af678acde0 --- /dev/null +++ b/test/server-side-rendering/samples/bindings-readonly/_expected.html @@ -0,0 +1,4 @@ +
    + + + diff --git a/test/server-side-rendering/samples/bindings-readonly/main.svelte b/test/server-side-rendering/samples/bindings-readonly/main.svelte new file mode 100644 index 0000000000..3ff98a3ead --- /dev/null +++ b/test/server-side-rendering/samples/bindings-readonly/main.svelte @@ -0,0 +1,44 @@ + + +
    + + + + + + diff --git a/test/server-side-rendering/samples/styles-nested/_actual.css b/test/server-side-rendering/samples/styles-nested/_actual.css deleted file mode 100644 index 775ae8a91c..0000000000 --- a/test/server-side-rendering/samples/styles-nested/_actual.css +++ /dev/null @@ -1,2 +0,0 @@ -div.svelte-bzh57p{color:red} -div.svelte-4yw8vx{color:green} \ No newline at end of file diff --git a/test/server-side-rendering/samples/styles/_actual.css b/test/server-side-rendering/samples/styles/_actual.css deleted file mode 100644 index 2025c64f84..0000000000 --- a/test/server-side-rendering/samples/styles/_actual.css +++ /dev/null @@ -1 +0,0 @@ -div.svelte-bzh57p{color:red} \ No newline at end of file diff --git a/test/server-side-rendering/samples/text-area-bind/_expected.html b/test/server-side-rendering/samples/text-area-bind/_expected.html new file mode 100644 index 0000000000..c3c8441f56 --- /dev/null +++ b/test/server-side-rendering/samples/text-area-bind/_expected.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/server-side-rendering/samples/text-area-bind/main.svelte b/test/server-side-rendering/samples/text-area-bind/main.svelte new file mode 100644 index 0000000000..7126e09375 --- /dev/null +++ b/test/server-side-rendering/samples/text-area-bind/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/test/setup.js b/test/setup.js index 8bb73d81d0..7406a07dd9 100644 --- a/test/setup.js +++ b/test/setup.js @@ -7,7 +7,7 @@ process.env.TEST = true; require.extensions['.js'] = function(module, filename) { const exports = []; - var code = fs.readFileSync(filename, 'utf-8') + let code = fs.readFileSync(filename, 'utf-8') .replace(/^import \* as (\w+) from ['"]([^'"]+)['"];?/gm, 'var $1 = require("$2");') .replace(/^import (\w+) from ['"]([^'"]+)['"];?/gm, 'var {default: $1} = require("$2");') .replace(/^import {([^}]+)} from ['"](.+)['"];?/gm, 'var {$1} = require("$2");') @@ -35,4 +35,4 @@ require.extensions['.js'] = function(module, filename) { console.log(code); // eslint-disable-line no-console throw err; } -}; \ No newline at end of file +}; diff --git a/test/sourcemaps/index.js b/test/sourcemaps/index.js index 79028719b9..ee169ebe1b 100644 --- a/test/sourcemaps/index.js +++ b/test/sourcemaps/index.js @@ -1,7 +1,7 @@ import * as fs from "fs"; import * as path from "path"; import * as assert from "assert"; -import { loadConfig, svelte } from "../helpers.js"; +import { svelte } from "../helpers.js"; import { SourceMapConsumer } from "source-map"; import { getLocator } from "locate-character"; @@ -18,8 +18,6 @@ describe("sourcemaps", () => { } (solo ? it.only : skip ? it.skip : it)(dir, () => { - const config = loadConfig(`./sourcemaps/samples/${dir}/_config.js`); - const filename = path.resolve( `test/sourcemaps/samples/${dir}/input.svelte` ); diff --git a/test/store/index.js b/test/store/index.js deleted file mode 100644 index d7c1e76668..0000000000 --- a/test/store/index.js +++ /dev/null @@ -1,199 +0,0 @@ -import * as assert from 'assert'; -import { readable, writable, derived, get } from '../../store.js'; - -describe('store', () => { - describe('writable', () => { - it('creates a writable store', () => { - const count = writable(0); - const values = []; - - const unsubscribe = count.subscribe(value => { - values.push(value); - }); - - count.set(1); - count.update(n => n + 1); - - unsubscribe(); - - count.set(3); - count.update(n => n + 1); - - assert.deepEqual(values, [0, 1, 2]); - }); - - it('calls provided subscribe handler', () => { - let called = 0; - - const store = writable(0, () => { - called += 1; - return () => called -= 1; - }); - - const unsubscribe1 = store.subscribe(() => {}); - assert.equal(called, 1); - - const unsubscribe2 = store.subscribe(() => {}); - assert.equal(called, 1); - - unsubscribe1(); - assert.equal(called, 1); - - unsubscribe2(); - assert.equal(called, 0); - }); - - it('does not assume immutable data', () => { - const obj = {}; - let called = 0; - - const store = writable(obj); - - store.subscribe(value => { - called += 1; - }); - - store.set(obj); - assert.equal(called, 2); - - store.update(obj => obj); - assert.equal(called, 3); - }); - }); - - describe('readable', () => { - it('creates a readable store', () => { - let running; - let tick; - - const store = readable(undefined, set => { - tick = set; - running = true; - - set(0); - - return () => { - tick = () => {}; - running = false; - }; - }); - - assert.ok(!running); - - const values = []; - - const unsubscribe = store.subscribe(value => { - values.push(value); - }); - - assert.ok(running); - tick(1); - tick(2); - - unsubscribe(); - - assert.ok(!running); - tick(3); - tick(4); - - assert.deepEqual(values, [0, 1, 2]); - }); - }); - - describe('derived', () => { - it('maps a single store', () => { - const a = writable(1); - const b = derived(a, n => n * 2); - - const values = []; - - const unsubscribe = b.subscribe(value => { - values.push(value); - }); - - a.set(2); - assert.deepEqual(values, [2, 4]); - - unsubscribe(); - - a.set(3); - assert.deepEqual(values, [2, 4]); - }); - - it('maps multiple stores', () => { - const a = writable(2); - const b = writable(3); - const c = derived(([a, b]), ([a, b]) => a * b); - - const values = []; - - const unsubscribe = c.subscribe(value => { - values.push(value); - }); - - a.set(4); - b.set(5); - assert.deepEqual(values, [6, 12, 20]); - - unsubscribe(); - - a.set(6); - assert.deepEqual(values, [6, 12, 20]); - }); - - it('passes optional set function', () => { - const number = writable(1); - const evens = derived(number, (n, set) => { - if (n % 2 === 0) set(n); - }, 0); - - const values = []; - - const unsubscribe = evens.subscribe(value => { - values.push(value); - }); - - number.set(2); - number.set(3); - number.set(4); - number.set(5); - assert.deepEqual(values, [0, 2, 4]); - - unsubscribe(); - - number.set(6); - number.set(7); - number.set(8); - assert.deepEqual(values, [0, 2, 4]); - }); - - it('prevents glitches', () => { - const lastname = writable('Jekyll'); - const firstname = derived(lastname, n => n === 'Jekyll' ? 'Henry' : 'Edward'); - - const fullname = derived([firstname, lastname], names => names.join(' ')); - - const values = []; - - const unsubscribe = fullname.subscribe(value => { - values.push(value); - }); - - lastname.set('Hyde'); - - assert.deepEqual(values, [ - 'Henry Jekyll', - 'Edward Hyde' - ]); - - unsubscribe(); - }); - }); - - describe('get', () => { - it('gets the current value of a store', () => { - const store = readable(42, () => {}); - assert.equal(get(store), 42); - }); - }); -}); diff --git a/test/store/index.ts b/test/store/index.ts new file mode 100644 index 0000000000..a39fab86e6 --- /dev/null +++ b/test/store/index.ts @@ -0,0 +1,370 @@ +import * as assert from 'assert'; +import { readable, writable, derived, get } from '../../store'; + +describe('store', () => { + describe('writable', () => { + it('creates a writable store', () => { + const count = writable(0); + const values = []; + + const unsubscribe = count.subscribe(value => { + values.push(value); + }); + + count.set(1); + count.update(n => n + 1); + + unsubscribe(); + + count.set(3); + count.update(n => n + 1); + + assert.deepEqual(values, [0, 1, 2]); + }); + + it('calls provided subscribe handler', () => { + let called = 0; + + const store = writable(0, () => { + called += 1; + return () => called -= 1; + }); + + const unsubscribe1 = store.subscribe(() => { }); + assert.equal(called, 1); + + const unsubscribe2 = store.subscribe(() => { }); + assert.equal(called, 1); + + unsubscribe1(); + assert.equal(called, 1); + + unsubscribe2(); + assert.equal(called, 0); + }); + + it('does not assume immutable data', () => { + const obj = {}; + let called = 0; + + const store = writable(obj); + + store.subscribe(() => { + called += 1; + }); + + store.set(obj); + assert.equal(called, 2); + + store.update(obj => obj); + assert.equal(called, 3); + }); + + it('only calls subscriber once initially, including on resubscriptions', () => { + let num = 0; + const store = writable(num, set => set(num += 1)); + + let count1 = 0; + let count2 = 0; + + store.subscribe(() => count1 += 1)(); + assert.equal(count1, 1); + + const unsubscribe = store.subscribe(() => count2 += 1); + assert.equal(count2, 1); + + unsubscribe(); + }); + }); + + describe('readable', () => { + it('creates a readable store', () => { + let running; + let tick; + + const store = readable(undefined, set => { + tick = set; + running = true; + + set(0); + + return () => { + tick = () => { }; + running = false; + }; + }); + + assert.ok(!running); + + const values = []; + + const unsubscribe = store.subscribe(value => { + values.push(value); + }); + + assert.ok(running); + tick(1); + tick(2); + + unsubscribe(); + + assert.ok(!running); + tick(3); + tick(4); + + assert.deepEqual(values, [0, 1, 2]); + }); + }); + + describe('derived', () => { + it('maps a single store', () => { + const a = writable(1); + const b = derived(a, n => n * 2); + + const values = []; + + const unsubscribe = b.subscribe(value => { + values.push(value); + }); + + a.set(2); + assert.deepEqual(values, [2, 4]); + + unsubscribe(); + + a.set(3); + assert.deepEqual(values, [2, 4]); + }); + + it('maps multiple stores', () => { + const a = writable(2); + const b = writable(3); + const c = derived(([a, b]), ([a, b]) => a * b); + + const values = []; + + const unsubscribe = c.subscribe(value => { + values.push(value); + }); + + a.set(4); + b.set(5); + assert.deepEqual(values, [6, 12, 20]); + + unsubscribe(); + + a.set(6); + assert.deepEqual(values, [6, 12, 20]); + }); + + it('passes optional set function', () => { + const number = writable(1); + const evens = derived(number, (n, set) => { + if (n % 2 === 0) set(n); + }, 0); + + const values = []; + + const unsubscribe = evens.subscribe(value => { + values.push(value); + }); + + number.set(2); + number.set(3); + number.set(4); + number.set(5); + assert.deepEqual(values, [0, 2, 4]); + + unsubscribe(); + + number.set(6); + number.set(7); + number.set(8); + assert.deepEqual(values, [0, 2, 4]); + }); + + it('prevents glitches', () => { + const lastname = writable('Jekyll'); + const firstname = derived(lastname, n => n === 'Jekyll' ? 'Henry' : 'Edward'); + + const fullname = derived([firstname, lastname], names => names.join(' ')); + + const values = []; + + const unsubscribe = fullname.subscribe(value => { + values.push(value); + }); + + lastname.set('Hyde'); + + assert.deepEqual(values, [ + 'Henry Jekyll', + 'Edward Hyde' + ]); + + unsubscribe(); + }); + + it('prevents diamond dependency problem', () => { + const count = writable(0); + const values = []; + + const a = derived(count, $count => { + return 'a' + $count; + }); + + const b = derived(count, $count => { + return 'b' + $count; + }); + + const combined = derived([a, b], ([a, b]) => { + return a + b; + }); + + const unsubscribe = combined.subscribe(v => { + values.push(v); + }); + + assert.deepEqual(values, ['a0b0']); + + count.set(1); + assert.deepEqual(values, ['a0b0', 'a1b1']); + + unsubscribe(); + }); + + it('derived dependency does not update and shared ancestor updates', () => { + const root = writable({ a: 0, b:0 }); + const values = []; + + const a = derived(root, $root => { + return 'a' + $root.a; + }); + + const b = derived([a, root], ([$a, $root]) => { + return 'b' + $root.b + $a; + }); + + const unsubscribe = b.subscribe(v => { + values.push(v); + }); + + assert.deepEqual(values, ['b0a0']); + + root.set({ a: 0, b: 1 }); + assert.deepEqual(values, ['b0a0', 'b1a0']); + + unsubscribe(); + }); + + it('is updated with safe_not_equal logic', () => { + const arr = [0]; + + const number = writable(1); + const numbers = derived(number, $number => { + arr[0] = $number; + return arr; + }); + + const concatenated = []; + + const unsubscribe = numbers.subscribe(value => { + concatenated.push(...value); + }); + + number.set(2); + number.set(3); + + assert.deepEqual(concatenated, [1, 2, 3]); + + unsubscribe(); + }); + + it('calls a cleanup function', () => { + const num = writable(1); + + const values = []; + const cleaned_up = []; + + const d = derived(num, ($num, set) => { + set($num * 2); + + return function cleanup() { + cleaned_up.push($num); + }; + }); + + num.set(2); + + const unsubscribe = d.subscribe(value => { + values.push(value); + }); + + num.set(3); + num.set(4); + + assert.deepEqual(values, [4, 6, 8]); + assert.deepEqual(cleaned_up, [2, 3]); + + unsubscribe(); + + assert.deepEqual(cleaned_up, [2, 3, 4]); + }); + + it('discards non-function return values', () => { + const num = writable(1); + + const values = []; + + const d = derived(num, ($num, set) => { + set($num * 2); + return {}; + }); + + num.set(2); + + const unsubscribe = d.subscribe(value => { + values.push(value); + }); + + num.set(3); + num.set(4); + + assert.deepEqual(values, [4, 6, 8]); + + unsubscribe(); + }); + + it('allows derived with different types', () => { + const a = writable('one'); + const b = writable(1); + const c = derived([a, b], ([a, b]) => `${a} ${b}`); + + assert.deepEqual(get(c), 'one 1'); + + a.set('two'); + b.set(2); + assert.deepEqual(get(c), 'two 2'); + }); + }); + + describe('get', () => { + it('gets the current value of a store', () => { + const store = readable(42, () => { }); + assert.equal(get(store), 42); + }); + + it('works with RxJS-style observables', () => { + const observable = { + subscribe(fn) { + fn(42); + return { + unsubscribe: () => {} + }; + } + }; + + assert.equal(get(observable), 42); + }); + }); +}); diff --git a/test/test.js b/test/test.js index 993b1f637c..cb89b3e9d1 100644 --- a/test/test.js +++ b/test/test.js @@ -2,6 +2,10 @@ const glob = require("tiny-glob/sync.js"); require("./setup"); -glob("*/index.js", { cwd: "test" }).forEach(function(file) { +// bind internal to jsdom +require("./helpers"); +require("../internal"); + +glob("*/index.{js,ts}", { cwd: "test" }).forEach((file) => { require("./" + file); -}); \ No newline at end of file +}); diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000000..82eaf0245e --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.json", + "include": ["."], + + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "noEmit": true + } +} diff --git a/test/validator/index.js b/test/validator/index.js index b26b087bb3..1e54cc20db 100644 --- a/test/validator/index.js +++ b/test/validator/index.js @@ -24,7 +24,7 @@ describe("validate", () => { let error; try { - let { warnings } = svelte.compile(input, { + const { warnings } = svelte.compile(input, { dev: config.dev, legacy: config.legacy, generate: false @@ -59,7 +59,7 @@ describe("validate", () => { assert.deepEqual(error.end, expected.end); assert.equal(error.pos, expected.pos); } catch (e) { - console.error(error) + console.error(error); // eslint-disable-line no-console throw e; } } diff --git a/test/validator/samples/attribute-expected-equals/errors.json b/test/validator/samples/attribute-expected-equals/errors.json new file mode 100644 index 0000000000..a3fa9d3cac --- /dev/null +++ b/test/validator/samples/attribute-expected-equals/errors.json @@ -0,0 +1,15 @@ +[{ + "code": "unexpected-token", + "message": "Expected =", + "start": { + "line": 5, + "column": 9, + "character": 50 + }, + "end": { + "line": 5, + "column": 9, + "character": 50 + }, + "pos": 50 +}] diff --git a/test/validator/samples/attribute-expected-equals/input.svelte b/test/validator/samples/attribute-expected-equals/input.svelte new file mode 100644 index 0000000000..91f4b0ca7b --- /dev/null +++ b/test/validator/samples/attribute-expected-equals/input.svelte @@ -0,0 +1,5 @@ + + +

    Hello {name}!

    diff --git a/test/validator/samples/catch-declares-error-variable/input.svelte b/test/validator/samples/catch-declares-error-variable/input.svelte new file mode 100644 index 0000000000..b44e854cf5 --- /dev/null +++ b/test/validator/samples/catch-declares-error-variable/input.svelte @@ -0,0 +1,13 @@ + + + + +{String(value)} diff --git a/test/validator/samples/catch-declares-error-variable/warnings.json b/test/validator/samples/catch-declares-error-variable/warnings.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/validator/samples/catch-declares-error-variable/warnings.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/validator/samples/component-event-modifiers-invalid/errors.json b/test/validator/samples/component-event-modifiers-invalid/errors.json new file mode 100644 index 0000000000..da608063fe --- /dev/null +++ b/test/validator/samples/component-event-modifiers-invalid/errors.json @@ -0,0 +1,15 @@ +[{ + "message": "Event modifiers other than 'once' can only be used on DOM elements", + "code": "invalid-event-modifier", + "start": { + "line": 6, + "column": 8, + "character": 93 + }, + "end": { + "line": 6, + "column": 40, + "character": 125 + }, + "pos": 93 +}] diff --git a/test/validator/samples/component-event-modifiers-invalid/input.svelte b/test/validator/samples/component-event-modifiers-invalid/input.svelte new file mode 100644 index 0000000000..8f7ce54d7a --- /dev/null +++ b/test/validator/samples/component-event-modifiers-invalid/input.svelte @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/test/validator/samples/component-namespaced/input.svelte b/test/validator/samples/component-namespaced/input.svelte new file mode 100644 index 0000000000..996d2d8769 --- /dev/null +++ b/test/validator/samples/component-namespaced/input.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/test/validator/samples/component-namespaced/warnings.json b/test/validator/samples/component-namespaced/warnings.json new file mode 100644 index 0000000000..0637a088a0 --- /dev/null +++ b/test/validator/samples/component-namespaced/warnings.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/test/validator/samples/contenteditable-dynamic/errors.json b/test/validator/samples/contenteditable-dynamic/errors.json new file mode 100644 index 0000000000..0c4c5585a6 --- /dev/null +++ b/test/validator/samples/contenteditable-dynamic/errors.json @@ -0,0 +1,15 @@ +[{ + "code": "dynamic-contenteditable-attribute", + "message": "'contenteditable' attribute cannot be dynamic if element uses two-way binding", + "start": { + "line": 6, + "column": 8, + "character": 73 + }, + "end": { + "line": 6, + "column": 32, + "character": 97 + }, + "pos": 73 +}] \ No newline at end of file diff --git a/test/validator/samples/contenteditable-dynamic/input.svelte b/test/validator/samples/contenteditable-dynamic/input.svelte new file mode 100644 index 0000000000..8dfa91a354 --- /dev/null +++ b/test/validator/samples/contenteditable-dynamic/input.svelte @@ -0,0 +1,6 @@ + + diff --git a/test/validator/samples/contenteditable-missing/errors.json b/test/validator/samples/contenteditable-missing/errors.json new file mode 100644 index 0000000000..53d5af4928 --- /dev/null +++ b/test/validator/samples/contenteditable-missing/errors.json @@ -0,0 +1,15 @@ +[{ + "code": "missing-contenteditable-attribute", + "message": "'contenteditable' attribute is required for textContent and innerHTML two-way bindings", + "start": { + "line": 4, + "column": 8, + "character": 48 + }, + "end": { + "line": 4, + "column": 31, + "character": 71 + }, + "pos": 48 +}] \ No newline at end of file diff --git a/test/validator/samples/contenteditable-missing/input.svelte b/test/validator/samples/contenteditable-missing/input.svelte new file mode 100644 index 0000000000..dae1088994 --- /dev/null +++ b/test/validator/samples/contenteditable-missing/input.svelte @@ -0,0 +1,4 @@ + + diff --git a/test/validator/samples/module-script-reactive-declaration/input.svelte b/test/validator/samples/module-script-reactive-declaration/input.svelte new file mode 100644 index 0000000000..9df1cd54dd --- /dev/null +++ b/test/validator/samples/module-script-reactive-declaration/input.svelte @@ -0,0 +1,5 @@ + diff --git a/test/validator/samples/module-script-reactive-declaration/warnings.json b/test/validator/samples/module-script-reactive-declaration/warnings.json new file mode 100644 index 0000000000..b1aa74dbcc --- /dev/null +++ b/test/validator/samples/module-script-reactive-declaration/warnings.json @@ -0,0 +1,7 @@ +[{ + "message": "$: has no effect in a module script", + "code": "module-script-reactive-declaration", + "start": { "line": 4, "column": 1, "character": 54 }, + "end": { "line": 4, "column": 23, "character": 76 }, + "pos": 54 +}] diff --git a/test/validator/samples/reactive-declaration-non-top-level/input.svelte b/test/validator/samples/reactive-declaration-non-top-level/input.svelte new file mode 100644 index 0000000000..ddba4819e0 --- /dev/null +++ b/test/validator/samples/reactive-declaration-non-top-level/input.svelte @@ -0,0 +1,8 @@ + diff --git a/test/validator/samples/reactive-declaration-non-top-level/warnings.json b/test/validator/samples/reactive-declaration-non-top-level/warnings.json new file mode 100644 index 0000000000..87944642cd --- /dev/null +++ b/test/validator/samples/reactive-declaration-non-top-level/warnings.json @@ -0,0 +1,7 @@ +[{ + "message": "$: has no effect outside of the top-level", + "code": "non-top-level-reactive-declaration", + "start": { "line": 6, "column": 2, "character": 71 }, + "end": { "line": 6, "column": 22, "character": 91 }, + "pos": 71 +}] diff --git a/test/vars/samples/component-namespaced/_config.js b/test/vars/samples/component-namespaced/_config.js new file mode 100644 index 0000000000..ac63873967 --- /dev/null +++ b/test/vars/samples/component-namespaced/_config.js @@ -0,0 +1,16 @@ +export default { + test(assert, vars) { + assert.deepEqual(vars, [ + { + name: 'NS', + export_name: null, + injected: false, + module: false, + mutated: false, + reassigned: false, + referenced: true, + writable: false + } + ]); + } +}; \ No newline at end of file diff --git a/test/vars/samples/component-namespaced/input.svelte b/test/vars/samples/component-namespaced/input.svelte new file mode 100644 index 0000000000..996d2d8769 --- /dev/null +++ b/test/vars/samples/component-namespaced/input.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index fdb7367e05..39476f3dd1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,30 @@ { - "compilerOptions": { - "target": "ES6", - "diagnostics": true, - "noImplicitThis": true, - "noEmitOnError": true, - "allowJs": true, - "lib": ["es5", "es6", "dom"], - "importHelpers": true, - "moduleResolution": "node" - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules" - ] + "include": [], + + "compilerOptions": { + "rootDir": "src", + + // target node v8+ (https://node.green/) + // the only missing feature is Array.prototype.values + "lib": ["es2017"], + "target": "es2017", + + "declaration": true, + "declarationDir": "types", + + "noEmitOnError": true, + "noErrorTruncation": true, + + // rollup takes care of these + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + + // TODO: error all the things + //"strict": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true + } }