diff --git a/src/compiler/compile/css/Stylesheet.ts b/src/compiler/compile/css/Stylesheet.ts index ed1682378c4e..685cc0dfe0d2 100644 --- a/src/compiler/compile/css/Stylesheet.ts +++ b/src/compiler/compile/css/Stylesheet.ts @@ -1,3 +1,17 @@ +// TODO move pushArray to npm module +function pushArray(thisArray: any[], ...otherList: any[]) { + let count = 0; + for (let a = 0; a < otherList.length; a++) { + const other = otherList[a]; + for (let i = 0; i < other.length; i++) { + thisArray.push(other[i]); + } + count += other.length; + } + return count; +} + + import MagicString from 'magic-string'; import { walk } from 'estree-walker'; import Selector from './Selector'; @@ -351,7 +365,7 @@ export default class Stylesheet { const at_rule_declarations = node.block.children .filter(node => node.type === 'Declaration') .map(node => new Declaration(node)); - atrule.declarations.push(...at_rule_declarations); + pushArray(atrule.declarations,at_rule_declarations); } current_atrule = atrule; diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 9ec36b12d7da..137f16531bf5 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -1,3 +1,17 @@ +// TODO move pushArray to npm module +function pushArray(thisArray: any[], ...otherList: any[]) { + let count = 0; + for (let a = 0; a < otherList.length; a++) { + const other = otherList[a]; + for (let i = 0; i < other.length; i++) { + thisArray.push(other[i]); + } + count += other.length; + } + return count; +} + + import Renderer from '../../Renderer'; import Element from '../../../nodes/Element'; import Wrapper from '../shared/Wrapper'; @@ -596,7 +610,7 @@ export default class ElementWrapper extends Wrapper { this.attributes.forEach((attribute) => { if (attribute.node.name === 'class') { const dependencies = attribute.node.get_dependencies(); - this.class_dependencies.push(...dependencies); + pushArray(this.class_dependencies,dependencies); } }); diff --git a/src/compiler/compile/render_dom/wrappers/IfBlock.ts b/src/compiler/compile/render_dom/wrappers/IfBlock.ts index 557176bace20..48665c808166 100644 --- a/src/compiler/compile/render_dom/wrappers/IfBlock.ts +++ b/src/compiler/compile/render_dom/wrappers/IfBlock.ts @@ -1,3 +1,17 @@ +// TODO move pushArray to npm module +function pushArray(thisArray: any[], ...otherList: any[]) { + let count = 0; + for (let a = 0; a < otherList.length; a++) { + const other = otherList[a]; + for (let i = 0; i < other.length; i++) { + thisArray.push(other[i]); + } + count += other.length; + } + return count; +} + + import Wrapper from './shared/Wrapper'; import Renderer from '../Renderer'; import Block from '../Block'; @@ -166,7 +180,7 @@ export default class IfBlockWrapper extends Wrapper { block.has_outro_method = has_outros; }); - renderer.blocks.push(...blocks); + pushArray(renderer.blocks,blocks); } render( diff --git a/src/compiler/preprocess/index.ts b/src/compiler/preprocess/index.ts index 10771603d76e..c3791ea3712e 100644 --- a/src/compiler/preprocess/index.ts +++ b/src/compiler/preprocess/index.ts @@ -1,3 +1,17 @@ +// TODO move pushArray to npm module +function pushArray(thisArray: any[], ...otherList: any[]) { + let count = 0; + for (let a = 0; a < otherList.length; a++) { + const other = otherList[a]; + for (let i = 0; i < other.length; i++) { + thisArray.push(other[i]); + } + count += other.length; + } + return count; +} + + import { RawSourceMap, DecodedSourceMap } from '@ampproject/remapping/dist/types/types'; import { getLocator } from 'locate-character'; import { MappedCode, SourceLocation, parse_attached_sourcemap, sourcemap_add_offset, combine_sourcemaps } from '../utils/mapped_code'; @@ -48,7 +62,7 @@ class PreprocessResult implements Source { } if (dependencies) { - this.dependencies.push(...dependencies); + pushArray(this.dependencies,dependencies); } } @@ -165,7 +179,7 @@ async function process_tag( }); if (!processed) return no_change(); - if (processed.dependencies) dependencies.push(...processed.dependencies); + if (processed.dependencies) pushArray(dependencies,processed.dependencies); if (!processed.map && processed.code === content) return no_change(); return processed_tag_to_code(processed, tag_name, attributes, slice_source(content, tag_offset, source));