Skip to content

Commit

Permalink
Update dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
falsandtru committed Jul 25, 2023
1 parent 0285537 commit 50fca5e
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 106 deletions.
24 changes: 12 additions & 12 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,28 +31,28 @@
"@types/mocha": "10.0.1",
"@types/power-assert": "1.5.8",
"@types/prismjs": "1.26.0",
"@typescript-eslint/parser": "^5.59.11",
"babel-loader": "^9.1.2",
"@typescript-eslint/parser": "^6.2.0",
"babel-loader": "^9.1.3",
"babel-plugin-unassert": "^3.2.0",
"concurrently": "^8.2.0",
"eslint": "^8.42.0",
"eslint": "^8.45.0",
"eslint-plugin-redos": "^4.4.5",
"eslint-webpack-plugin": "^4.0.1",
"glob": "^10.2.7",
"glob": "^10.3.3",
"karma": "^6.4.2",
"karma-chrome-launcher": "^3.2.0",
"karma-coverage": "^2.2.0",
"karma-coverage": "^2.2.1",
"karma-firefox-launcher": "^2.1.2",
"karma-mocha": "^2.0.1",
"karma-power-assert": "^1.0.0",
"mocha": "^10.2.0",
"npm-check-updates": "^16.10.12",
"semver": "^7.5.1",
"spica": "0.0.736",
"ts-loader": "^9.4.3",
"typed-dom": "0.0.339",
"typescript": "5.1.3",
"webpack": "^5.86.0",
"npm-check-updates": "^16.10.16",
"semver": "^7.5.4",
"spica": "0.0.748",
"ts-loader": "^9.4.4",
"typed-dom": "0.0.342",
"typescript": "5.1.6",
"webpack": "^5.88.2",
"webpack-cli": "^5.1.4",
"webpack-merge": "^5.9.0"
},
Expand Down
29 changes: 14 additions & 15 deletions src/layer/domain/router/module/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,21 @@ export function update(
config.update.css && css(documents, config.update.ignore);
const seqC = await config.sequence.content(seqB, areas);
io.document.dispatchEvent(new Event('pjax:content'));
const ssm = config.update.script
? await script(documents, state.scripts, config.update, Math.max(config.fetch.timeout, 1000) * 10, process)
: await process.either<[HTMLScriptElement[], AtomicPromise<Either<Error, HTMLScriptElement[]>>]>([[], AtomicPromise.resolve(process.either([]))]);
const [p] = config.update.script
? await script(documents, state.scripts, config.update, config.fetch.timeout * 10, process)
: [AtomicPromise.resolve(process.either<[HTMLScriptElement[], AtomicPromise<Either<Error, HTMLScriptElement[]>>]>([[], AtomicPromise.resolve(process.either([]))]))] as const;
focus(event.type, documents.dst);
scroll(event.type, documents.dst, {
hash: event.location.dest.fragment,
position: io.position,
});
savePosition();
return [
ssm
.fmap(([ss, ap]) =>
[ss, ap.then(m => m.extract())] as const),
return p.then(async ssm => [
ssm.fmap(([ss, ap]) =>
[ss, ap.then(m => m.extract())] as const),
await config.sequence.ready(seqC),
io.document.dispatchEvent(new Event('pjax:ready')),
] as const;
] as const);
})
.fmap(p =>
p.then(([m, seqD]) =>
Expand All @@ -134,22 +133,22 @@ export function update(
.then(process.promise)
// ready -> load
.then(m => m
.fmap(([p1, p2]) => (
AtomicPromise.all([p1, p2])
.fmap(([p1, p2]) => {
// Asynchronously wait for load completion of elements and scripts.
void AtomicPromise.all([p1, p2])
.then<void>(([m1, m2]) =>
m1.bind(([, cp]) =>
m2.fmap(([[, sp], seqD]) =>
// Asynchronously wait for load completion of elements and scripts.
AtomicPromise.all([cp, sp])
.then(process.either)
.then(m => m
.fmap(async ([events]) => (
await config.sequence.load(seqD, events),
void window.dispatchEvent(new Event('pjax:load'))))
.extract(() => undefined))))
.extract(() => undefined)),
p2)))
.extract(() => undefined));
return p2;
}))
.then(m => Either.sequence(m).then(m => m.join()))
.then(m => m
.fmap(([sst]) => sst));
.then(m => m.fmap(([sst]) => sst));
}
44 changes: 22 additions & 22 deletions src/layer/domain/router/module/update/script.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ describe('Unit: layer/domain/router/module/update/script', () => {
fetch: async script => Right(tuple(script, script.text)),
evaluate: script => Left(AtomicPromise.resolve(Right(script))),
})
.then(m => {
return m.extract();
.then(([p]) => {
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert.deepStrictEqual(ss, []);
Expand Down Expand Up @@ -67,9 +67,9 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Left(AtomicPromise.resolve(Right(script)));
},
})
.then(m => {
.then(([p]) => {
assert(cnt === 2 && ++cnt);
return m.extract();
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert.deepStrictEqual(ss.map(s => s instanceof HTMLScriptElement), [true]);
Expand All @@ -96,8 +96,8 @@ describe('Unit: layer/domain/router/module/update/script', () => {
},
1e3,
new Cancellation<Error>())
.then(m => {
return m.extract();
.then(([p]) => {
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert.deepStrictEqual(ss, []);
Expand Down Expand Up @@ -136,9 +136,9 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Left(AtomicPromise.resolve(Right(script)));
},
})
.then(m => {
.then(async ([p]) => {
assert(cnt === 2 && ++cnt);
assert(m.extract(e => e) instanceof Error);
assert((await p).extract(e => e) instanceof Error);
done();
});
});
Expand Down Expand Up @@ -169,9 +169,9 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Left(AtomicPromise.resolve(Left(new Error())));
},
})
.then(m => {
.then(async ([p]) => {
assert(cnt === 2 && ++cnt);
assert(m.extract(e => e) instanceof Error);
assert((await p).extract(e => e) instanceof Error);
done();
});
});
Expand Down Expand Up @@ -203,9 +203,9 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Left(AtomicPromise.resolve(Right(script)));
},
})
.then(m => {
.then(async ([p]) => {
assert(cnt === 1 && ++cnt);
assert(m.extract(e => e) instanceof Error);
assert((await p).extract(e => e) instanceof Error);
done();
});
cancellation.cancel(new Error());
Expand All @@ -232,16 +232,16 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Right(tuple(script, script.text));
},
evaluate: script => {
assert(cnt === 3 && ++cnt);
assert(cnt === 2 && ++cnt);
return Right(AtomicPromise.resolve(Right(script)));
},
})
.then(m => {
.then(([p]) => {
assert(cnt === 1 && ++cnt);
return m.extract();
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert(cnt === 2 && ++cnt);
assert(cnt === 3 && ++cnt);
assert.deepStrictEqual(ss, []);
return p;
})
Expand Down Expand Up @@ -273,16 +273,16 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Right(tuple(script, ''));
},
evaluate: () => {
assert(cnt === 3 && ++cnt);
assert(cnt === 2 && ++cnt);
return Right(AtomicPromise.resolve(Left(new Error())));
},
})
.then(m => {
.then(([p]) => {
assert(cnt === 1 && ++cnt);
return m.extract();
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert(cnt === 2 && ++cnt);
assert(cnt === 3 && ++cnt);
assert.deepStrictEqual(ss, []);
return p;
})
Expand Down Expand Up @@ -319,9 +319,9 @@ describe('Unit: layer/domain/router/module/update/script', () => {
return Right(AtomicPromise.resolve(Right(script)));
},
})
.then(m => {
.then(([p]) => {
assert(cnt === 1 && ++cnt);
return m.extract();
return p.then(m => m.extract());
})
.then(([ss, p]) => {
assert(cnt === 2 && ++cnt);
Expand Down
99 changes: 42 additions & 57 deletions src/layer/domain/router/module/update/script.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,49 +28,43 @@ export function script(
fetch,
evaluate,
}
): AtomicPromise<Result> {
): AtomicPromise<readonly [AtomicPromise<Result>]> {
const scripts = [...documents.src.querySelectorAll('script')]
.filter(el => !el.type || /(?:application|text)\/(?:java|ecma)script|module/i.test(el.type))
.filter(el => !el.matches(selector.ignore.trim() || '_'))
.filter(el =>
el.hasAttribute('src')
? !skip.has(new URL(standardize(el.src)).href) || el.matches(selector.reload.trim() || '_')
: true);
const { ss, as } = scripts.reduce((o, script) => {
switch (true) {
case script.matches('[src][async], [src][defer]'):
o.as.push(script);
break;
default:
o.ss.push(script);
}
return o;
}, {
ss: [] as HTMLScriptElement[],
as: [] as HTMLScriptElement[],
});
return AtomicPromise.all([
AtomicPromise.all(request(ss)).then(run),
AtomicPromise.all(request(as)).then(run),
])
.then(async ([sm, am]) =>
sm.fmap(async p => (await p)
.fmap(([ss1, ap1]) =>
[
ss1,
ap1.then(async as1 =>
am.fmap(async p => (await p)
.fmap(([ss2, ap2]) =>
AtomicPromise.all([as1, Right<Error, HTMLScriptElement[]>(ss2), ap2])
.then(sst =>
sst.reduce((m1, m2) =>
m1.bind(s1 =>
m2.fmap(s2 =>
push(s1, s2))))))
.extract<Either<Error, HTMLScriptElement[]>>(Left))
.extract<Either<Error, HTMLScriptElement[]>>(Left)),
] as const))
.extract<Result>(Left));
const { ss, as } = scripts.reduce((o, script) =>
script.matches('[src][async], [src][defer]')
? void o.as.push(script) || o
: void o.ss.push(script) || o,
{
ss: [] as HTMLScriptElement[],
as: [] as HTMLScriptElement[],
});
const p1 = AtomicPromise.all(request(ss)).then(run);
const p2 = AtomicPromise.all(request(as)).then(run);
return p1.then(() => [
AtomicPromise.all([p1, p2])
.then(async ([sm, am]) =>
sm.fmap(async p => (await p)
.fmap(([ss1, ap1]) =>
[
ss1,
ap1.then(async as1 =>
am.fmap(async p => (await p)
.fmap(([ss2, ap2]) =>
AtomicPromise.all([as1, as1.fmap(() => ss2), ap2])
.then(sst =>
Either.sequence(sst)
.fmap(sss => sss.reduce(push))))
.extract<Either<Error, HTMLScriptElement[]>>(Left))
.extract<Either<Error, HTMLScriptElement[]>>(Left)),
] as const))
.extract<Result>(Left))
]);

function request(scripts: HTMLScriptElement[]): Promise<Either<Error, FetchData>>[] {
return scripts
Expand All @@ -79,30 +73,21 @@ export function script(
}

function run(responses: Either<Error, FetchData>[]): Either<Error, AtomicPromise<Result>> {
return responses
.reduce(
(results, m) => m.bind(() => results),
responses
.reduce((results, m) =>
results
.bind(cancellation.either)
.bind(([sp, ap]) => m
.fmap(([script, code]) =>
io.evaluate(script, code, selector.logger, skip, AtomicPromise.all(sp), cancellation))
.bind(m =>
m.extract(
p => Right(tuple(push(sp, [p]), ap)),
p => Right(tuple(sp, push(ap, [p]))))))
, Right<Error, [AtomicPromise<Either<Error, HTMLScriptElement>>[], AtomicPromise<Either<Error, HTMLScriptElement>>[]]>([[], []])))
return Either.sequence(responses)
.bind(results => results.reduce(
(results, [script, code]) =>
results
.bind(cancellation.either)
.bind(([sp, ap]) =>
io.evaluate(script, code, selector.logger, skip, AtomicPromise.all(sp), cancellation)
.extract(
p => Right(tuple(push(sp, [p]), ap)),
p => Right(tuple(sp, push(ap, [p]))))),
Right<Error, [AtomicPromise<Either<Error, HTMLScriptElement>>[], AtomicPromise<Either<Error, HTMLScriptElement>>[]]>([[], []])))
.fmap(([sp, ap]) =>
AtomicPromise.all(sp)
.then(m => Either.sequence(m))
.then(sm =>
sm.fmap(ss =>
tuple(
ss,
Promise.all(ap)
.then(m => Either.sequence(m))))));
.then(m => m.fmap(ss => tuple(ss, Promise.all(ap).then(ms => Either.sequence(ms))))));
}
}

Expand Down

0 comments on commit 50fca5e

Please sign in to comment.