Skip to content
This repository was archived by the owner on May 19, 2023. It is now read-only.

Commit 617c2af

Browse files
committedMay 4, 2021
Merge branch 'master' of https://github.com/aidenybai/lucia
2 parents fd81895 + c6632cb commit 617c2af

21 files changed

+82
-84
lines changed
 

‎.github/dependabot.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ updates:
88
- package-ecosystem: 'npm' # See documentation for possible values
99
directory: '/' # Location of package manifests
1010
schedule:
11-
interval: 'daily'
12-
target-branch: 'staging'
11+
interval: 'weekly'
12+
target-branch: 'master'

‎docs/codebase/CORE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ The values of the `directives` object are `DirectiveData`, which contain propert
6161

6262
```ts
6363
interface DirectiveData {
64-
compute: (state: UnknownKV, event?: Event) => any;
64+
compute: (state: KV<unknown>, event?: Event) => any;
6565
value: string;
6666
deps: string[];
6767
}

‎src/component.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/* istanbul ignore file */
22

3-
import { COMPONENT_FLAG } from './models/generics';
4-
import compile from './core/compile';
5-
import { directives } from './core/directive';
6-
import reactive from './core/reactive';
7-
import render from './core/render';
8-
import { setElementCustomProp } from './core/utils/elementCustomProp';
9-
import { ASTNode, DirectiveProps, Directives, State, Watchers } from './models/structs';
3+
import { COMPONENT_FLAG } from '@models/generics';
4+
import compile from '@core/compile';
5+
import { directives } from '@core/directive';
6+
import reactive from '@core/reactive';
7+
import render from '@core/render';
8+
import { setElementCustomProp } from '@core/utils/elementCustomProp';
9+
import { ASTNode, DirectiveProps, Directives, State, Watchers } from '@models/structs';
1010

1111
export class Component {
1212
public state: State;

‎src/core/__test__/reactive.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { StringKV } from '../../models/generics';
1+
import { KV } from '../../models/generics';
22
import { reactive } from '../reactive';
33

44
describe('.reactive', () => {
@@ -63,7 +63,7 @@ describe('.reactive', () => {
6363
const callback = (deps: string[]) => (result = deps[0]);
6464
const proxy = reactive(state, callback);
6565

66-
(proxy.foo as StringKV).bar = '1';
66+
(proxy.foo as KV<string>).bar = '1';
6767

6868
expect(result).toEqual('bar');
6969
});

‎src/core/compile.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import {
33
DIRECTIVE_PREFIX,
44
DIRECTIVE_SHORTHANDS,
55
FOR_TEMPLATE_FLAG,
6-
} from '../models/generics';
7-
import { ASTNode, ASTNodeType, DirectiveKV, Refs, State } from '../models/structs';
8-
import compute from './utils/computeExpression';
9-
import { getElementCustomProp, setElementCustomProp } from './utils/elementCustomProp';
10-
import { eventDirectivePrefixRE, expressionPropRE, hasDirectiveRE } from './utils/patterns';
11-
import removeDupesFromArray from './utils/removeDupesFromArray';
6+
} from '@models/generics';
7+
import { ASTNode, ASTNodeType, DirectiveKV, Refs, State } from '@models/structs';
8+
import compute from '@utils/computeExpression';
9+
import { getElementCustomProp, setElementCustomProp } from '@utils/elementCustomProp';
10+
import { eventDirectivePrefixRE, expressionPropRE, hasDirectiveRE } from '@utils/patterns';
11+
import removeDupesFromArray from '@utils/removeDupesFromArray';
1212

1313
export const isListRenderScope = (el: HTMLElement): boolean => {
1414
return el.hasAttribute(`${DIRECTIVE_PREFIX}for`);

‎src/core/directive.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { DirectiveProps, Directives } from '../models/structs';
2-
import { bindDirective } from './directives/bind';
3-
import { forDirective } from './directives/for';
4-
import { htmlDirective } from './directives/html';
5-
import { modelDirective } from './directives/model';
6-
import { onDirective } from './directives/on';
7-
import { showDirective } from './directives/show';
8-
import { textDirective } from './directives/text';
1+
import { DirectiveProps, Directives } from '@models/structs';
2+
import { bindDirective } from '@directives/bind';
3+
import { forDirective } from '@directives/for';
4+
import { htmlDirective } from '@directives/html';
5+
import { modelDirective } from '@directives/model';
6+
import { onDirective } from '@directives/on';
7+
import { showDirective } from '@directives/show';
8+
import { textDirective } from '@directives/text';
99

1010
export const directives: Directives = {
1111
BIND: bindDirective,

‎src/core/directives/bind.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DirectiveProps } from '../../models/structs';
1+
import { DirectiveProps } from '@models/structs';
22

33
export const formatAcceptableWhitespace = (expression: string): string => {
44
const whitespaceRE = /\s+/gim;

‎src/core/directives/for.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
/* istanbul ignore file */
22

3-
import compile from '../../core/compile';
4-
import { directives } from '../../core/directive';
5-
import render from '../../core/render';
6-
import { COMPONENT_FLAG, DIRECTIVE_PREFIX, FOR_TEMPLATE_FLAG } from '../../models/generics';
7-
import { ASTNode, DirectiveProps } from '../../models/structs';
8-
import adjustDeps from '../utils/adjustDeps';
9-
import computeExpression from '../utils/computeExpression';
10-
import { getElementCustomProp, setElementCustomProp } from '../utils/elementCustomProp';
11-
import { expressionPropRE, parenthesisWrapReplaceRE } from '../utils/patterns';
3+
import compile from '@core/compile';
4+
import { directives } from '@core/directive';
5+
import render from '@core/render';
6+
import { COMPONENT_FLAG, DIRECTIVE_PREFIX, FOR_TEMPLATE_FLAG } from '@models/generics';
7+
import { ASTNode, DirectiveProps } from '@models/structs';
8+
import adjustDeps from '@utils/adjustDeps';
9+
import computeExpression from '@utils/computeExpression';
10+
import { getElementCustomProp, setElementCustomProp } from '@utils/elementCustomProp';
11+
import { expressionPropRE, parenthesisWrapReplaceRE } from '@utils/patterns';
1212

1313
// This directive is size-based, not content-based, since everything is compiled and rerendered
1414
export const forDirective = ({ el, data, state, node }: DirectiveProps): void => {

‎src/core/directives/html.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import compile from '../../core/compile';
2-
import { directives } from '../../core/directive';
3-
import render from '../../core/render';
4-
import { COMPONENT_FLAG } from '../../models/generics';
5-
import { ASTNode, DirectiveProps } from '../../models/structs';
6-
import adjustDeps from '../utils/adjustDeps';
7-
import { getElementCustomProp, setElementCustomProp } from '../utils/elementCustomProp';
8-
import { hasDirectiveRE } from '../utils/patterns';
1+
import compile from '@core/compile';
2+
import { directives } from '@core/directive';
3+
import render from '@core/render';
4+
import { COMPONENT_FLAG } from '@models/generics';
5+
import { ASTNode, DirectiveProps } from '@models/structs';
6+
import adjustDeps from '@utils/adjustDeps';
7+
import { getElementCustomProp, setElementCustomProp } from '@utils/elementCustomProp';
8+
import { hasDirectiveRE } from '@utils/patterns';
99

1010
export const htmlDirective = ({ el, data, state, node }: DirectiveProps): void => {
1111
node = node!;

‎src/core/directives/model.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { MODEL_REGISTERED_FLAG } from '../../models/generics';
2-
import { DirectiveData, DirectiveProps, State } from '../../models/structs';
3-
import computeExpression from '../utils/computeExpression';
4-
import { getElementCustomProp, setElementCustomProp } from '../utils/elementCustomProp';
1+
import { MODEL_REGISTERED_FLAG } from '@models/generics';
2+
import { DirectiveData, DirectiveProps, State } from '@models/structs';
3+
import computeExpression from '@utils/computeExpression';
4+
import { getElementCustomProp, setElementCustomProp } from '@utils/elementCustomProp';
55

66
export const inputCallback = (
77
el: HTMLInputElement,

‎src/core/directives/on.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { DirectiveProps } from '../../models/structs';
2-
import { getElementCustomProp, setElementCustomProp } from '../utils/elementCustomProp';
1+
import { DirectiveProps } from '@models/structs';
2+
import { getElementCustomProp, setElementCustomProp } from '@utils/elementCustomProp';
33

44
export const onDirective = ({ el, parts, data, state }: DirectiveProps): void => {
55
const options: Record<string, boolean> = {};

‎src/core/directives/show.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DirectiveProps } from '../../models/structs';
1+
import { DirectiveProps } from '@models/structs';
22

33
export const showDirective = ({ el, data, state }: DirectiveProps): void => {
44
const ret = data.compute(state);

‎src/core/directives/text.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DirectiveProps } from '../../models/structs';
1+
import { DirectiveProps } from '@models/structs';
22

33
export const textDirective = ({ el, data, state }: DirectiveProps): void => {
44
const ret = data.compute(state) ?? data.value;

‎src/core/reactive.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { UnknownKV } from '../models/generics';
2-
import { State, Watchers } from '../models/structs';
1+
import { KV } from '@models/generics';
2+
import { State, Watchers } from '@models/structs';
33

44
export const arrayEquals = (firstArray: unknown[], secondArray: unknown[]): boolean => {
55
// Deep Array equality check
@@ -17,7 +17,7 @@ export const reactive = (
1717
watchers: Watchers = {}
1818
): State => {
1919
const handler = {
20-
get(target: UnknownKV, key: string): unknown {
20+
get(target: KV<unknown>, key: string): unknown {
2121
const ret = target[key];
2222

2323
if (typeof ret === 'object' && ret !== null) {
@@ -27,7 +27,7 @@ export const reactive = (
2727
return ret;
2828
}
2929
},
30-
set(target: UnknownKV, key: string, value: unknown): boolean {
30+
set(target: KV<unknown>, key: string, value: unknown): boolean {
3131
// Currently double renderes - bad perf
3232
const hasArrayMutationKey = !isNaN(Number(key)) || key === 'length';
3333
const props = hasArrayMutationKey ? [] : [key];

‎src/core/render.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { DIRECTIVE_PREFIX, UnknownKV } from '../models/generics';
2-
import { ASTNode, ASTNodeType, Directives } from '../models/structs';
1+
import { DIRECTIVE_PREFIX, KV } from '@models/generics';
2+
import { ASTNode, ASTNodeType, Directives } from '@models/structs';
33
import { renderDirective } from './directive';
4-
import lazy from './utils/lazy';
5-
import { rawDirectiveSplitRE } from './utils/patterns';
4+
import lazy from '@utils/lazy';
5+
import { rawDirectiveSplitRE } from '@utils/patterns';
66

77
const render = (
88
ast: ASTNode[],
99
directives: Directives,
10-
state: UnknownKV = {},
10+
state: KV<unknown> = {},
1111
changedProps: string[] = []
1212
): void => {
1313
const legalDirectiveNames = Object.keys(directives);

‎src/core/utils/adjustDeps.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ASTNode } from '../../models/structs';
1+
import { ASTNode } from '@models/structs';
22
import removeDupesFromArray from './removeDupesFromArray';
33

44
export const adjustDeps = (

‎src/core/utils/computeExpression.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { UnknownKV } from '../../models/generics';
2-
import { Refs } from '../../models/structs';
1+
import { KV } from '@models/generics';
2+
import { Refs } from '@models/structs';
33
import { expressionPropRE } from './patterns';
44

55
export const resolveStateInExpression = (
@@ -22,7 +22,7 @@ export const computeExpression = (
2222
refs: Refs = {},
2323
deps?: string[]
2424
// eslint-disable-next-line @typescript-eslint/no-explicit-any
25-
): ((state: UnknownKV, event?: Event) => any) => {
25+
): ((state: KV<unknown>, event?: Event) => any) => {
2626
const formattedExpression = `${returnable ? `return ${expression}` : expression}`;
2727
const resolvedExpression = resolveStateInExpression(formattedExpression, deps);
2828
const specialPropertiesNames = ['$state', '$el', '$emit', '$event', '$refs'];
@@ -39,7 +39,7 @@ export const computeExpression = (
3939
target.dispatchEvent(event);
4040
};
4141

42-
return (state: UnknownKV, event?: Event) => {
42+
return (state: KV<unknown>, event?: Event) => {
4343
try {
4444
const value = state[expression];
4545
if (value) {

‎src/core/utils/patterns.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { DIRECTIVE_PREFIX, DIRECTIVE_SHORTHANDS } from '../../models/generics';
1+
import { DIRECTIVE_PREFIX, DIRECTIVE_SHORTHANDS } from '@models/generics';
22

33
// Split directive:modifier.property
44
export const rawDirectiveSplitRE = (): RegExp => /:|\./gim;

‎src/index.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// Exports wrapped in Lucia namespace
22
import component from './component';
3-
import compile from './core/compile';
4-
import { directives } from './core/directive';
5-
import reactive from './core/reactive';
6-
import render from './core/render';
7-
import computeExpression from './core/utils/computeExpression';
8-
import { getElementCustomProp } from './core/utils/elementCustomProp';
9-
import { COMPONENT_FLAG, DIRECTIVE_PREFIX } from './models/generics';
3+
import compile from '@core/compile';
4+
import { directives } from '@core/directive';
5+
import reactive from '@core/reactive';
6+
import render from '@core/render';
7+
import computeExpression from '@core/utils/computeExpression';
8+
import { getElementCustomProp } from '@core/utils/elementCustomProp';
9+
import { COMPONENT_FLAG, DIRECTIVE_PREFIX } from '@models/generics';
1010

1111
export { component, compile, render, reactive, directives, computeExpression };
1212

‎src/models/generics.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,4 @@ export enum DIRECTIVE_SHORTHANDS {
66
'@' = 'on',
77
':' = 'bind',
88
}
9-
10-
export type UnknownKV = Record<string, unknown>;
11-
export type StringKV = Record<string, string>;
9+
export type KV<T> = Record<string, T>;

‎src/models/structs.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import { UnknownKV } from './generics';
1+
import { KV } from './generics';
22

3-
export type Directives = Record<string, (props: DirectiveProps) => void>;
4-
export type Watchers = Record<string, () => void>;
5-
export type Refs = Record<string, HTMLElement>;
6-
export type State = UnknownKV;
3+
export type Directives = KV<(props: DirectiveProps) => void>;
4+
export type Watchers = KV<() => void>;
5+
export type Refs = KV<HTMLElement>;
6+
export type State = KV<unknown>;
77

8-
export type DirectiveKV = Record<string, DirectiveData>;
8+
export type DirectiveKV = KV<DirectiveData>;
99

1010
export interface DirectiveData {
1111
// eslint-disable-next-line @typescript-eslint/no-explicit-any
12-
compute: (state: UnknownKV, event?: Event) => any;
12+
compute: (state: KV<unknown>, event?: Event) => any;
1313
value: string;
1414
deps: string[];
1515
}

0 commit comments

Comments
 (0)
This repository has been archived.