From 6824fa8a4cc141e83713b9dd0f65df15b9ad455a Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Thu, 15 Feb 2018 18:31:04 -0800 Subject: [PATCH] feat(css-blocks): Broke up Block.ts, refactored foundational BlockObject constructs, added StateGroup concept. This is a BREAKING CHANGES (obvs). --- packages/css-blocks/src/Block/Block.ts | 915 ++---------------- packages/css-blocks/src/Block/BlockClass.ts | 178 ++++ packages/css-blocks/src/Block/Inheritable.ts | 178 ++++ .../css-blocks/src/Block/RulesetContainer.ts | 2 +- packages/css-blocks/src/Block/State.ts | 90 ++ packages/css-blocks/src/Block/StateGroup.ts | 138 +++ packages/css-blocks/src/Block/Style.ts | 168 ++++ packages/css-blocks/src/Block/index.ts | 7 +- .../src/BlockCompiler/ConflictResolver.ts | 6 +- .../css-blocks/src/BlockSyntax/BlockSyntax.ts | 5 + .../src/TemplateAnalysis/ElementAnalysis.ts | 31 +- packages/css-blocks/test/opticss-test.ts | 10 +- .../css-blocks/test/state-container-test.ts | 18 +- .../css-blocks/test/template-analysis-test.ts | 29 +- .../validations/class-pairs-validator-test.ts | 2 +- .../property-conflict-validator-test.ts | 10 +- .../validations/root-class-validator-test.ts | 3 +- .../state-parent-validator-test.ts | 15 + .../test/validations/validator-test.ts | 2 +- 19 files changed, 930 insertions(+), 877 deletions(-) create mode 100644 packages/css-blocks/src/Block/BlockClass.ts create mode 100644 packages/css-blocks/src/Block/Inheritable.ts create mode 100644 packages/css-blocks/src/Block/State.ts create mode 100644 packages/css-blocks/src/Block/StateGroup.ts create mode 100644 packages/css-blocks/src/Block/Style.ts diff --git a/packages/css-blocks/src/Block/Block.ts b/packages/css-blocks/src/Block/Block.ts index cedd83c52..28ddbc2a9 100644 --- a/packages/css-blocks/src/Block/Block.ts +++ b/packages/css-blocks/src/Block/Block.ts @@ -1,261 +1,49 @@ +import * as postcss from 'postcss'; +import { ObjectDictionary, MultiMap, assertNever } from "@opticss/util"; +import selectorParser = require('postcss-selector-parser'); + +import { FileIdentifier } from "../importing"; +import { LocalScopedContext } from "../util/LocalScope"; +import { CssBlockError } from "../errors"; +import { OptionsReader } from "../OptionsReader"; +import { CLASS_NAME_IDENT, ROOT_CLASS } from "../BlockSyntax"; + +import { Source } from "./BlockTree"; +import { BlockClass } from "./BlockClass"; +import { State } from "./State"; +import { BlockPath } from "../BlockSyntax"; + import { - Attr, - Attribute, - AttributeNS, - AttributeValueChoice, - ValueAbsent, - ValueConstant, -} from "@opticss/element-analysis"; -import { assertNever, MultiMap, ObjectDictionary, objectValues, whatever } from "@opticss/util"; -import { - CompoundSelector, - ParsedSelector, - parseSelector, SelectorFactory, + parseSelector, + ParsedSelector, + CompoundSelector } from "opticss"; -import * as postcss from "postcss"; -import selectorParser = require("postcss-selector-parser"); - import { - BlockType, + stateParser, isClassNode, isStateNode, NodeAndType, - stateParser, + BlockType } from "../BlockParser"; -import { StateInfo } from "../BlockParser/block-intermediates"; -import { CLASS_NAME_IDENT } from "../BlockSyntax"; -import { OptionsReader } from "../OptionsReader"; -import { OutputMode } from "../OutputMode"; -import { CssBlockError } from "../errors"; -import { FileIdentifier } from "../importing"; -import { HasLocalScope, HasScopeLookup, LocalScopedContext } from "../util/LocalScope"; -import { unionInto } from "../util/unionInto"; -import { RulesetContainer } from "./RulesetContainer"; +export type Style = BlockClass | State; export const OBJ_REF_SPLITTER = (s: string): [string, string] | undefined => { - let index = s.indexOf("."); - if (index < 0) index = s.indexOf("["); + let index = s.indexOf('.'); + if (index < 0) index = s.indexOf('['); if (index >= 0) { return [s.substr(0, index), s.substring(index)]; } return; }; -export type Style = BlockClass | State | SubState; -export type StyleContainer = Block | BlockClass | State; - -/** - * Abstract class that serves as the base for all Styles. Contains basic - * properties and abstract methods that extenders must implement. - */ -export abstract class BlockObject { - public readonly rulesets: RulesetContainer; - - protected _name: string; - protected _container: ContainerType; - - /** cache of resolveStyles() */ - private _resolvedStyles: Set