Giter Club home page Giter Club logo

typescript-plugin-css-modules's Introduction

typescript-plugin-css-modules

npm npm license

A TypeScript language service plugin for CSS Modules.

typescript-plugin-css-modules example

Table of contents

About this plugin

This plugin provides type information to IDEs and any other tools that work with TypeScript language service plugins.

At this time, TypeScript does not support plugins during compilation. This means that this plugin cannot:

  • provide errors during compilation, or
  • add CSS module support to your project.

For more information, and/or to add support for this feature, see: microsoft/TypeScript#16607.

If you need a different solution, these projects might help:

Installation

To install with Yarn:

yarn add -D typescript-plugin-css-modules

To install with npm:

npm install -D typescript-plugin-css-modules

Once installed, add this plugin to your tsconfig.json:

{
  "compilerOptions": {
    "plugins": [{ "name": "typescript-plugin-css-modules" }]
  }
}

If you're using Visual Studio Code, please also follow these instructions.

As Webpack configurations vary, you may need to provide additional options to this plugin to match your project configuration. For Create React App users, this plugin will work without additional configuration.

Importing CSS

A default export is always provided for your CSS module.

import styles from 'my.module.css';

const a = styles.myClass;
const b = styles['my_other-class'];

As of version 1.1.0, you can also use named exports for classes that don't contain hyphens or underscores. You can still access other classes via the default export.

import styles, { myClass } from 'my.module.css';

const a = myClass;
const b = styles['my_other-class'];

Options

Please note that no options are required. However, depending on your configuration, you may need to customise these options.

Option Default value Description
additionalData undefined An optional string to append to the top of source files.
allowUnknownClassnames false Disables TypeScript warnings on unknown classnames (for default imports only).
classnameTransform "asIs" See classnameTransform below.
customMatcher "\\.module\\.((c|le|sa|sc)ss|styl)$" Changes the file extensions that this plugin processes.
customRenderer false See customRenderer below.
customTemplate false See customTemplate below.
goToDefinition false Enables jump to definition. See goToDefinition below.
noUncheckedIndexedAccess false Enable for compatibility with TypeScript's noUncheckedIndexedAccess.
namedExports true Enables named exports for compatible classnames.
dotenvOptions {} Provides options for dotenv. Note that this plugin only accepts a string value for path.
postcssOptions {} See postcssOptions below.
rendererOptions {} See rendererOptions below.
{
  "compilerOptions": {
    "plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "classnameTransform": "dashes",
          "customMatcher": "\\.m\\.css$",
          "customRenderer": "./myRenderer.js",
          "dotenvOptions": {},
          "postcssOptions": {},
          "rendererOptions": {}
        }
      }
    ]
  }
}

classnameTransform

Implements the behaviour of the localsConvention css-loader option.

Options available are: 'asIs', 'camelCase', 'camelCaseOnly', 'dashes', and 'dashesOnly'.

customRenderer

The customRenderer is an advanced option, letting you provide the CSS renderer.

When a custom renderer is provided, not other renderers will be used.

The path to the customRenderer must be relative to the project root (i.e. ./myRenderer.js).

The custom renderer itself should be a JavaScript file. The function will be called with three arguments: a css string, an options object (see options.ts), and a compilerOptions object - which contains options as set in your tsconfig.json. It must be synchronous, and must return valid CSS.

module.exports = (css, { fileName, logger }) => {
  try {
    // ...process your css here.

    // `string`
    return renderedCss;
  } catch (error) {
    logger.error(error.message);
  }
};

If you want to return a a source map, you can return an object from your exported function.

module.exports = (css, { fileName, logger }) => {
  try {
    // ...process your css here.

    return {
      // `string`
      css: renderedCss,
      // `RawSourceMap`
      sourceMap: sourceMap,
    };
  } catch (error) {
    logger.error(error.message);
  }
};

You can find an example custom renderer in our test fixtures (customRenderer.js).

The internal logger is provided for debugging.

If you use Webpack, note that tilde (~) imports not supported by Less and Sass natively.

For Sass users: A custom importer has been implemented to resolve this as of v3.

For Less users: This package exports a customRenderer that enables tilde imports: less-plugin-aliases.

customTemplate

The customTemplate is an advanced option, letting you provide a template for the generated TypeScript declarations.

When a custom template is provided, its output is used as the virtual declaration (*.d.ts) file.

The path to the customTemplate must be relative to the project root (i.e. ./customTemplate.js).

The custom renderer itself should be a JavaScript file. The function will be called with two arguments: a dts string, and an options object (see options.ts). It must be synchronous, and must return a valid TypeScript declaration (as found in a .d.ts file).

module.exports = (dts, { classes, fileName, logger }) => {
  try {
    // ...generate your template here.
    return customTemplate;
  } catch (error) {
    logger.error(error.message);
  }
};

You can find an example custom template in our test fixtures (customTemplate.js).

The internal logger is provided for debugging.

The classes object represents all the classnames extracted from the CSS Module. They are available if you want to add a custom representation of the CSS classes.

goToDefinition

This allows an editor like Visual Studio Code to go to a classname's definition (file and line).

This is experimental, and may not always work as expected. It currently supports CSS/PostCSS, Less, and Sass. Please raise an issue if you find something isn't working.

postcssOptions

Option Default value Description
useConfig false Set to true to load plugins from your PostCSS config.
excludePlugins false Only sync plugins are supported. Use this to set an array of async plugins to exclude (i.e. ['postcss-mixins'])

rendererOptions

Option Default value Description
less {} Set renderer options for Less.
sass {} Set renderer options for Sass.
stylus {} Set renderer options for Stylus.

For convenience, loadPaths for Sass are extended, not replaced. The defaults are the path of the current file, and 'node_modules'.

Visual Studio Code

Recommended usage

To use this plugin with Visual Studio Code, you should set your workspace's version of TypeScript, which will load plugins from your tsconfig.json file.

For instructions, see: Using the workspace version of TypeScript.

Alternative usage

If you aren't using any plugin options, you can simple add this plugin to "typescript.tsserver.pluginPaths" in settings. You cannot provide plugin options with this approach.

{
  "typescript.tsserver.pluginPaths": ["typescript-plugin-css-modules"]
}

Custom definitions

Note: Create React App users can skip this section if you're using [email protected] or higher.

If your project doesn't already have global declarations for CSS Modules, you will need to add these to help TypeScript understand the general shape of the imported CSS during build.

Where you store global declarations is up to you. An example might look like: ./src/custom.d.ts.

The below is an example that you can copy or modify (you only declarations for exensions used in your project). If you use a customMatcher, you'll need to modify this.

declare module '*.module.css' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.scss' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.sass' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.less' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.styl' {
  const classes: { [key: string]: string };
  export default classes;
}

Troubleshooting

For troubleshooting and debugging, you can view the TypeScript Server Log in Visual Studio Code by entering Typescript: Open TS Server log in the command palette.

If you're not using Visual Studio Code or are having trouble with the above method, you can set the TSS_LOG environment variable.

You can include these logs with any issues you open for this project.

Disabling the plugin

If you need to temporarily disable this plugin, or disable it for a single user, you can do that by setting the DISABLE_TS_PLUGIN_CSS_MODULES environment variable to any value, and then restarting your IDE.

Note that this doesn't actually disable the plugin, but causes it to bail out early. See PR #244 for more information.

About this project

This project was inspired by a Create React App issue and built on prior work from css-module-types.

typescript-plugin-css-modules's People

Contributors

adam-26 avatar ayroblu avatar benjavr avatar coreymux avatar dagda1 avatar dancon avatar dennispg avatar dependabot[bot] avatar ekilah avatar falahati avatar hellocontrol-bng avatar hipstersmoothie avatar jakebailey avatar jgoz avatar joeljeske avatar judehunter avatar k-g-a avatar kmark avatar lianapache avatar mariusgundersen avatar mrmckeb avatar p7g avatar psiradish avatar qyzzzz avatar rmachado-studocu avatar smoores-dev avatar woolan avatar xiaoboost avatar xiaoxiangmoe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

typescript-plugin-css-modules's Issues

[Jest]: Import of styles yield empty object?

Describe the bug
We're using @babel/preset-typescript and jest (using babel-jest). My style imports yield empty objects, leading to snapshot tests failing.

I'm unsure how to pin down exactly what's causing this so what further info to provide
To Reproduce

// jest.config.js
module.exports = {
  // abbreviated for clarity
    transform: {
        '^.+\\.(js|jsx|mjs|ts|tsx)$': '<rootDir>/node_modules/babel-jest',
        '^.+\\.css$': '<rootDir>/config/jest/cssTransform.js',
        '^(?!.*\\.(js|jsx|mjs|css|json)$)': '<rootDir>/config/jest/optionalAssetsTransform.js',
    },
}
// component
import * as React from 'react';
import styles from './styles.m.css';

function MyComponent() {
  console.log(styles); // logs correctly in storybook & app, empty object in jest
  // return like normal
}
// test
describe('My Component', () => {
  it('matches its snapshot', () => {
    expect(mount(<MyComponent />)).toMatchSnapshot()
  });
});

Expected behavior

  • An object containing key/values for every classname should be logged

What more info can I provide to figure out what's going on here?

Add support for named exports

Is your feature request related to a problem? Please describe.
As raised by @fmal, named exports aren't available at present.

Describe the solution you'd like
In theory, with the camelCase option, set to "only" (both in this plugin and CSS Loader), named exports could be created alongside or in place of the default export. This may need another option, such as namedExports (boolean).

Describe alternatives you've considered
The plugin could always export named exports for valid strings, but this would create a confusing developer experience - which is why it may need to be opt-in.

.module.scss files are being evaluated by ESLint in VS (not VSCode)

Describe the bug
Enabling the plugin causes .module.scss files to be evaluated by eslint.

To Reproduce
Steps to reproduce the behavior:

  1. Enable the plugin in tsconfig
  2. Observe

Observed behavior
ESLint errors are displayed for the module.scss files even though they are not js or ts files

Screenshots
image

See TS errors that are happening in scss files

Desktop (please complete the following information):

  • OS: Windows 10
  • IDE: Visual Studio 2017 15.9.14

Plugin can ONLY find .env file if dotenvOptions.path is set with an absolute path

Describe the bug
If dotenvOptions.path is not set then dotenv will proceed with its default path of

path.resolve(process.cwd(), '.env')

and since process.cwd() is the VS Code installation directory, it will not find anything. Setting dotenvOptions.path to a relative path also fails, for likely the same reason.

To Reproduce
Steps to reproduce the behavior:

  1. In some React project
    Add a .env file at the project root containing
    HELLO=WORLD
    
  2. In typescript-plugin-css-modules
    Add the following after the dotenv.config call in index.ts and rebuild:
    logger.log(`process.env.HELLO after dotenv.config = ${process.env.HELLO}`);
  3. Put the above modified version of typescript-plugin-css-modules in the React project's node_modules
  4. Add typescript-plugin-css-modules to compilerOptions.plugins in the React project's tsconfig.json with no additional options
  5. Reload Window in VS Code for the React project, then view a ts/tsx file and open the TS Server log
  6. tsserver.log contains:
    [typescript-plugin-css-modules] process.env.HELLO after dotenv.config = undefined
    
    Loading from default location with dotenvOptions.path unset = FAILURE
  7. Add the following options for typescript-plugin-css-modules to tsconfig.json:
    "options": {
      "dotenvOptions": {
        "path": "./.env"
      }
    }
  8. Reload Window in VS Code, view the ts/tsx file again, and open the TS Server log
  9. tsserver.log contains:
    [typescript-plugin-css-modules] process.env.HELLO after dotenv.config = undefined
    
    Loading from relative path in dotenvOptions.path = FAILURE
  10. Set the following options for typescript-plugin-css-modules in tsconfig.json:
    "options": {
      "dotenvOptions": {
        "path": "C:/Full/Absolute/Path/to/Project/.env"
      }
    }
  11. Reload Window in VS Code, view the ts/tsx file again, and open the TS Server log
  12. tsserver.log shows:
    [typescript-plugin-css-modules] process.env.HELLO after dotenv.config = WORLD
    
    Loading from absolute path in dotenvOptions.path = ONLY SUCCESS

Expected behavior

  1. Plugin can direct dotenv to load a .env file located at the root of the project without dotenvOptions.path having to be set
  2. Plugin can direct dotenv to load a file from a relative path in dotenvOptions.path

Sometimes tsserver crashes, and typescript-plugin-css-modules stops understanding the classes

Thanks for the awesome commit 143b7ea !

I tried it and turned on verbose logging via TSS_LOG (BTW, for the future googlers, if using Remote - Container extension, the simplest way to set TSS_LOG is to add environment: - TSS_LOG="-logToFile true -file /tmp/TSS_LOG.txt -level verbose" to docker-compose.yml.)

So the problem: sometimes (not always, and it's how I understood the error messages in logs), typescript-plugin-css-modules tries to css-parse not the original css file, but a typescript code generated from it. When doing so, postcss indeed crashes with CssSyntaxError, and it probably crash tsserver or something related to the module (?), so the result is - vscode stops highlighting css classes in the code (although it highlighted them before for ~1 minute):

image

This probably happens after I Cmd+Click on one of those classes and wait for ~30 seconds after it.

Attaching the full logs below (sorry for them being huge).

root@ff5806928df7:/srv/slapdash/server# cat /tmp/TSS_LOG.txt
Info 0    [14:56:18.211] Starting TS Server
Info 1    [14:56:18.212] Version: 3.5.3
Info 2    [14:56:18.212] Arguments: /root/.vscode-server/bin/f06011ac164ae4dc8e753a3fe7f9549844d15e35/node /srv/slapdash/client/node_modules/typescript/lib/tsserver.js --useInferredProjectPerProjectRoot --enableTelemetry --cancellationPipeName /tmp/vscode-typescript0/6693fb1ba973da0264d0/tscancellation-364232ebc15d669a02a2.tmp* --locale en --noGetErrOnBackgroundUpdate --validateDefaultNpmLocation
Info 3    [14:56:18.212] Platform: linux NodeVersion: 10 CaseSensitive: true
Info 4    [14:56:18.227] Host information vscode
Info 5    [14:56:18.234] Search path: /srv/slapdash/client/src/search
Info 6    [14:56:18.235] For info: /srv/slapdash/client/src/search/SearchBar.react.tsx :: Config file name: /srv/slapdash/client/tsconfig.json
Info 7    [14:56:18.236] Opened configuration file /srv/slapdash/client/tsconfig.json
Info 8    [14:56:18.337] Enabling plugin typescript-plugin-css-modules from candidate paths: /srv/slapdash/client/node_modules/typescript/lib/tsserver.js/../../..
Info 9    [14:56:18.337] Loading typescript-plugin-css-modules from /srv/slapdash/client/node_modules/typescript/lib/tsserver.js/../../.. (resolved to /srv/slapdash/client/node_modules/node_modules)
Info 10   [14:56:18.900] [typescript-plugin-css-modules] options: {}
Info 11   [14:56:18.900] Plugin validation succeded
Info 12   [14:56:18.981] Starting updateGraphWorker: Project: /srv/slapdash/client/tsconfig.json
Info 13   [14:56:23.868] Finishing updateGraphWorker: Project: /srv/slapdash/client/tsconfig.json Version: 1 structureChanged: true Elapsed: 4887ms
Info 14   [14:56:23.868] Project '/srv/slapdash/client/tsconfig.json' (Configured)
Info 15   [14:56:23.868] 	Files (590)

Info 16   [14:56:23.868] -----------------------------------------------
Info 17   [14:56:23.896] Project '/srv/slapdash/client/tsconfigInfo 10   [14:58:5.769] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
Info 11   [14:58:5.769] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* Version: 2 structureChanged: undefined Elapsed: 0ms
Info 12   [14:58:5.770] Project '/dev/null/inferredProject1*' (Inferred) 0
Info 12   [14:58:5.770] 	Files (0)

Info 12   [14:58:5.770] -----------------------------------------------
Info 12   [14:58:5.770] Open files:
Info 12   [14:58:5.770] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 12   [14:58:5.770] Project '/dev/null/inferredProject1*' (Inferred) 0
Info 12   [14:58:5.771] 	Files (0)

Info 12   [14:58:5.771] -----------------------------------------------
Info 12   [14:58:5.771] Open files:
Info 12   [14:58:5.771] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 12   [14:58:44.940] `remove Project::
Info 13   [14:58:44.940] Project '/dev/null/inferredProject1*' (Inferred)
Info 14   [14:58:44.940] 	Files (0)

Info 15   [14:58:44.940] -----------------------------------------------
Info 16   [14:58:44.941] Open files:
Info 16   [14:58:44.941] Open files:
Info 16   [14:58:44.942] Starting updateGraphWorker: Project: /dev/null/inferredProject2*
Info 17   [14:58:44.942] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 1 structureChanged: undefined Elapsed: 0ms
Info 18   [14:58:44.942] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 18   [14:58:44.942] 	Files (0)

Info 18   [14:58:44.942] -----------------------------------------------
Info 18   [14:58:44.942] Open files:
Info 18   [14:58:44.942] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 18   [14:58:44.942] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 18   [14:58:44.942] 	Files (0)

Info 18   [14:58:44.942] -----------------------------------------------
Info 18   [14:58:44.942] Open files:
Info 18   [14:58:44.943] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 18   [14:58:45.160] Host configuration update for file /srv/slapdash/client/src/layout/Layout.react.tsx
Info 19   [14:59:43.973] Starting updateGraphWorker: Project: /dev/null/inferredProject2*
Info 20   [14:59:43.973] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 2 structureChanged: undefined Elapsed: 0ms
Info 21   [14:59:43.973] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 21   [14:59:43.974] 	Files (0)

Info 21   [14:59:43.974] -----------------------------------------------
Info 21   [14:59:43.974] Open files:
Info 21   [14:59:43.974] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:43.974] 	FileName: /srv/slapdash/client/src/layout/sidebar/Sidebar.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:43.974] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 21   [14:59:43.974] 	Files (0)

Info 21   [14:59:43.974] -----------------------------------------------
Info 21   [14:59:43.974] Open files:
Info 21   [14:59:43.974] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:43.974] 	FileName: /srv/slapdash/client/src/layout/sidebar/Sidebar.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:44.175] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 21   [14:59:44.175] 	Files (0)

Info 21   [14:59:44.175] -----------------------------------------------
Info 21   [14:59:44.175] Open files:
Info 21   [14:59:44.175] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:44.175] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 21   [14:59:44.175] 	Files (0)

Info 21   [14:59:44.175] -----------------------------------------------
Info 21   [14:59:44.175] Open files:
Info 21   [14:59:44.175] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 21   [14:59:44.661] Starting updateGraphWorker: Project: /dev/null/inferredProject2*
Info 22   [14:59:44.661] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 3 structureChanged: undefined Elapsed: 0ms
Info 23   [14:59:44.661] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 23   [14:59:44.661] 	Files (0)

Info 23   [14:59:44.661] -----------------------------------------------
Info 23   [14:59:44.661] Open files:
Info 23   [14:59:44.661] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:44.661] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:44.661] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 23   [14:59:44.661] 	Files (0)

Info 23   [14:59:44.661] -----------------------------------------------
Info 23   [14:59:44.661] Open files:
Info 23   [14:59:44.661] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:44.662] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:45.308] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 23   [14:59:45.308] 	Files (0)

Info 23   [14:59:45.308] -----------------------------------------------
Info 23   [14:59:45.308] Open files:
Info 23   [14:59:45.308] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:45.308] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 23   [14:59:45.308] 	Files (0)

Info 23   [14:59:45.308] -----------------------------------------------
Info 23   [14:59:45.308] Open files:
Info 23   [14:59:45.308] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 23   [14:59:45.612] Starting updateGraphWorker: Project: /dev/null/inferredProject2*
Info 24   [14:59:45.613] Finishing updateGraphWorker: Project: /dev/null/inferredProject2* Version: 4 structureChanged: undefined Elapsed: 0ms
Info 25   [14:59:45.613] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 25   [14:59:45.613] 	Files (0)

Info 25   [14:59:45.613] -----------------------------------------------
Info 25   [14:59:45.613] Open files:
Info 25   [14:59:45.613] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 25   [14:59:45.613] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 25   [14:59:45.613] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 25   [14:59:45.613] 	Files (0)

Info 25   [14:59:45.613] -----------------------------------------------
Info 25   [14:59:45.613] Open files:
Info 25   [14:59:45.613] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 25   [14:59:45.613] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 25   [15:2:45.512] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 25   [15:2:45.512] 	Files (0)

Info 25   [15:2:45.512] -----------------------------------------------
Info 25   [15:2:45.512] Open files:
Info 25   [15:2:45.512] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 25   [15:2:45.512] Project '/dev/null/inferredProject2*' (Inferred) 0
Info 25   [15:2:45.512] 	Files (0)

Info 25   [15:2:45.513] -----------------------------------------------
Info 25   [15:2:45.513] Open files:
Info 25   [15:2:45.513] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
ile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 37   [14:58:47.526] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:5:1: Unknown word

  3 |   'title': string;
  4 | };
> 5 | export default classes;
    | ^
  6 | export const body: string;
  7 | export const title: string;

Info 38   [14:58:47.527] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:5:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 39   [14:58:47.533] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:6:1: Unknown word

  4 |   'input': string;
  5 | };
> 6 | export default classes;
    | ^
  7 | export const inner: string;
  8 | export const active: string;

Info 40   [14:58:47.533] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:6:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 41   [14:58:47.541] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:7:1: Unknown word

  5 |   'email': string;
  6 | };
> 7 | export default classes;
    | ^
  8 | export const body: string;
  9 | export const app: string;

Info 42   [14:58:47.541] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:7:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 43   [14:58:47.627] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:7:1: Unknown word

  5 |   'buttons': string;
  6 | };
> 7 | export default classes;
    | ^
  8 | export const inner: string;
  9 | export const wrapper: string;

Info 44   [14:58:47.628] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:7:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 45   [14:58:47.633] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:5:1: Unknown word

  3 |   'unicodeBold': string;
  4 | };
> 5 | export default classes;
    | ^
  6 | export const hotkey: string;
  7 | export const unicodeBold: string;

Info 46   [14:58:47.633] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:5:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 47   [14:58:47.636] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:5:1: Unknown word

  3 |   'actionGray': string;
  4 | };
> 5 | export default classes;
    | ^
  6 | export const label: string;
  7 | export const actionGray: string;

Info 48   [14:58:47.637] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:5:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 49   [14:58:47.641] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:5:1: Unknown word

  3 |   'withIcon': string;
  4 | };
> 5 | export default classes;
    | ^
  6 | export const label: string;
  7 | export const withIcon: string;

Info 50   [14:58:47.641] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:5:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 51   [14:58:47.643] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:4:1: Unknown word

  2 |   'tagInOption': string;
  3 | };
> 4 | export default classes;
    | ^
  5 | export const tagInOption: string;
  6 |

Info 52   [14:58:47.643] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:4:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 53   [14:58:47.659] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'magicScroll': string;
  │                        ^
  ╵
  stdin 2:24  root stylesheet
Info 54   [14:58:47.660] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'magicScroll': string;
  │                        ^
  ╵
  stdin 2:24  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 55   [14:58:47.684] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'sidebar': string;
  │                    ^
  ╵
  stdin 2:20  root stylesheet
Info 56   [14:58:47.684] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'sidebar': string;
  │                    ^
  ╵
  stdin 2:20  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 57   [14:58:47.712] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
Info 58   [14:58:47.712] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 59   [14:58:47.719] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
Info 60   [14:58:47.720] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 61   [14:58:47.736] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
Info 62   [14:58:47.736] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'root': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 63   [14:58:47.753] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'assetCard': string;
  │                      ^
  ╵
  stdin 2:22  root stylesheet
Info 64   [14:58:47.754] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'assetCard': string;
  │                      ^
  ╵
  stdin 2:22  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 65   [14:58:47.781] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'section': string;
  │                    ^
  ╵
  stdin 2:20  root stylesheet
Info 66   [14:58:47.782] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'section': string;
  │                    ^
  ╵
  stdin 2:20  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 67   [14:58:47.833] [typescript-plugin-css-modules] Failed CssSyntaxError: <css input>:10:1: Unknown word

   8 |   'query': string;
   9 | };
> 10 | export default classes;
     | ^
  11 | export const header: string;
  12 | export const menu: string;

Info 68   [14:58:47.834] [typescript-plugin-css-modules] Stack trace: CssSyntaxError: <css input>:10:1: Unknown word
    at Input.error (/srv/slapdash/client/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/srv/slapdash/client/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/srv/slapdash/client/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/srv/slapdash/client/node_modules/postcss/lib/parser.js:77:16)
    at parse (/srv/slapdash/client/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/srv/slapdash/client/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/srv/slapdash/client/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/srv/slapdash/client/node_modules/postcss/lib/processor.js:117:23)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:55:42)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 69   [14:58:47.844] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'name': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
Info 70   [14:58:47.844] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'name': string;
  │                 ^
  ╵
  stdin 2:17  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 71   [14:58:47.913] [typescript-plugin-css-modules] Failed Error: expected "{".
  ╷
2 │   'header': string;
  │                   ^
  ╵
  stdin 2:19  root stylesheet
Info 72   [14:58:47.913] [typescript-plugin-css-modules] Stack trace: Error: expected "{".
  ╷
2 │   'header': string;
  │                   ^
  ╵
  stdin 2:19  root stylesheet
    at Object._newRenderError (/srv/slapdash/client/node_modules/sass/sass.dart.js:10687:19)
    at Object._wrapException (/srv/slapdash/client/node_modules/sass/sass.dart.js:10537:16)
    at StaticClosure._renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:10512:18)
    at Object.Primitives_applyFunction (/srv/slapdash/client/node_modules/sass/sass.dart.js:1055:30)
    at Object.Function_apply (/srv/slapdash/client/node_modules/sass/sass.dart.js:4882:16)
    at _callDartFunctionFast (/srv/slapdash/client/node_modules/sass/sass.dart.js:6487:16)
    at Object.renderSync (/srv/slapdash/client/node_modules/sass/sass.dart.js:6465:18)
    at DtsSnapshotCreator.getClasses (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:46:22)
    at DtsSnapshotCreator.getDtsSnapshot (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/helpers/DtsSnapshotCreator.js:83:28)
    at ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:28:53)
    at Object.ts.createLanguageServiceSourceFile (/srv/slapdash/client/node_modules/typescript-plugin-css-modules/lib/index.js:30:63)
    at acquireOrUpdateDocument (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101829:37)
    at Object.acquireDocumentWithKey (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:101802:20)
    at getOrCreateSourceFileByPath (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122052:41)
    at Object.getOrCreateSourceFile [as getSourceFile] (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122004:24)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90593:29)
    at processImportedModules (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90881:25)
    at findSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90646:17)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:85
    at getSourceFileFromReferenceWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90459:34)
    at processSourceFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90492:13)
    at processRootFile (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:90322:13)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:60
    at Object.forEach (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:292:30)
    at Object.createProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:89338:16)
    at synchronizeHostData (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:121969:26)
    at Object.getProgram (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:122061:13)
    at ConfiguredProject.Project.updateGraphWorker (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126314:53)
    at ConfiguredProject.Project.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126258:42)
    at ConfiguredProject.updateGraph (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:126753:63)
    at ProjectService.createLoadAndUpdateConfiguredProject (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:128211:25)
    at ProjectService.assignProjectToOpenedScriptInfo (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129018:44)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:76
    at Array.forEach (<anonymous>)
    at ProjectService.applyChangesInOpenFiles (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129234:37)
    at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:129980:46)
    at /srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:88
    at IOSession.Session.executeWithRequestId (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131662:28)
    at IOSession.Session.executeCommand (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131671:33)
    at IOSession.Session.onMessage (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:131693:35)
    at Interface.<anonymous> (/srv/slapdash/client/node_modules/typescript/lib/tsserver.js:132984:27)
    at Interface.emit (events.js:182:13)
    at Interface._onLine (readline.js:290:10)
    at Interface._normalWrite (readline.js:433:12)
    at Socket.ondata (readline.js:149:10)
    at Socket.emit (events.js:182:13)
    at addChunk (_stream_readable.js:283:12)
    at readableAddChunk (_stream_readable.js:264:11)
    at Socket.Readable.push (_stream_readable.js:219:10)
    at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Info 73   [14:58:48.951] Finishing updateGraphWorker: Project: /srv/slapdash/client/tsconfig.json Version: 1 structureChanged: true Elapsed: 3805ms
Info 74   [14:58:48.951] Project '/srv/slapdash/client/tsconfig.json' (Configured)
Info 75   [14:58:48.951] 	Files (590)

Info 76   [14:58:48.951] -----------------------------------------------
Info 77   [14:58:48.960] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 77   [14:58:48.960] 	Files (590)

Info 77   [14:58:48.960] -----------------------------------------------
Info 77   [14:58:48.960] Open files:
Info 77   [14:58:48.960] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 77   [14:58:48.960] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 77   [14:58:48.960] 	Files (590)

Info 77   [14:58:48.960] -----------------------------------------------
Info 77   [14:58:48.960] Open files:
Info 77   [14:58:48.960] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 77   [14:58:48.965] Host configuration update for file /srv/slapdash/client/src/layout/Layout.react.tsx
Info 78   [14:59:43.973] Search path: /srv/slapdash/client/src/layout/sidebar
Info 79   [14:59:43.973] For info: /srv/slapdash/client/src/layout/sidebar/Sidebar.react.tsx :: Config file name: /srv/slapdash/client/tsconfig.json
Info 80   [14:59:43.975] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 80   [14:59:43.975] 	Files (590)

Info 80   [14:59:43.975] -----------------------------------------------
Info 80   [14:59:43.975] Open files:
Info 80   [14:59:43.975] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:43.975] 	FileName: /srv/slapdash/client/src/layout/sidebar/Sidebar.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:43.975] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 80   [14:59:43.975] 	Files (590)

Info 80   [14:59:43.975] -----------------------------------------------
Info 80   [14:59:43.975] Open files:
Info 80   [14:59:43.975] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:43.975] 	FileName: /srv/slapdash/client/src/layout/sidebar/Sidebar.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:44.175] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 80   [14:59:44.175] 	Files (590)

Info 80   [14:59:44.175] -----------------------------------------------
Info 80   [14:59:44.175] Open files:
Info 80   [14:59:44.175] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:44.175] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 80   [14:59:44.175] 	Files (590)

Info 80   [14:59:44.175] -----------------------------------------------
Info 80   [14:59:44.176] Open files:
Info 80   [14:59:44.176] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 80   [14:59:44.661] Search path: /srv/slapdash/client/src/search
Info 81   [14:59:44.661] For info: /srv/slapdash/client/src/search/SearchBar.react.tsx :: Config file name: /srv/slapdash/client/tsconfig.json
Info 82   [14:59:44.662] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 82   [14:59:44.662] 	Files (590)

Info 82   [14:59:44.662] -----------------------------------------------
Info 82   [14:59:44.662] Open files:
Info 82   [14:59:44.662] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:44.662] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:44.662] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 82   [14:59:44.662] 	Files (590)

Info 82   [14:59:44.662] -----------------------------------------------
Info 82   [14:59:44.662] Open files:
Info 82   [14:59:44.662] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:44.662] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:45.309] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 82   [14:59:45.309] 	Files (590)

Info 82   [14:59:45.309] -----------------------------------------------
Info 82   [14:59:45.309] Open files:
Info 82   [14:59:45.309] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:45.309] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 82   [14:59:45.309] 	Files (590)

Info 82   [14:59:45.309] -----------------------------------------------
Info 82   [14:59:45.309] Open files:
Info 82   [14:59:45.309] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 82   [14:59:45.611] Search path: /srv/slapdash/client/src/search
Info 83   [14:59:45.611] For info: /srv/slapdash/client/src/search/SearchBar.react.tsx :: Config file name: /srv/slapdash/client/tsconfig.json
Info 84   [14:59:45.612] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 84   [14:59:45.612] 	Files (590)

Info 84   [14:59:45.612] -----------------------------------------------
Info 84   [14:59:45.612] Open files:
Info 84   [14:59:45.612] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 84   [14:59:45.612] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 84   [14:59:45.612] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 84   [14:59:45.612] 	Files (590)

Info 84   [14:59:45.612] -----------------------------------------------
Info 84   [14:59:45.612] Open files:
Info 84   [14:59:45.613] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 84   [14:59:45.613] 	FileName: /srv/slapdash/client/src/search/SearchBar.react.tsx ProjectRootPath: /srv/slapdash
Info 84   [15:2:45.513] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 84   [15:2:45.513] 	Files (590)

Info 84   [15:2:45.513] -----------------------------------------------
Info 84   [15:2:45.513] Open files:
Info 84   [15:2:45.513] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
Info 84   [15:2:45.513] Project '/srv/slapdash/client/tsconfig.json' (Configured) 0
Info 84   [15:2:45.513] 	Files (590)

Info 84   [15:2:45.513] -----------------------------------------------
Info 84   [15:2:45.513] Open files:
Info 84   [15:2:45.513] 	FileName: /srv/slapdash/client/src/layout/Layout.react.tsx ProjectRootPath: /srv/slapdash
root@ff5806928df7:/srv/slapdash/server#

tilde sass import from node_modules library

Describe the bug

I have a sass file that includes an @import to a file in a package in node_modules

@import '~@cutting/component-library/src/styles/_index.scss';

I get this error:

Can't find stylesheet to import.

@import '~@cutting/component-library/src/styles/_index.scss';
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is getting raised from this line in cssSnapshots.js

            transformedCss_1 = sass
                .renderSync({
                data: css,
                includePaths: [filePath],
            })
                .css.toString();

To Reproduce
Steps to reproduce the behavior:

  1. add an import to a package in node_modules

Expected behavior
The sass file should be properly parsed and the declarations created

Desktop (please complete the following information):

  • OS: OSX

Perhaps the node_modules folder should be added to includePaths in the call to sass.renderSync

Need advice. Doesn't work with ts-node

Describe the bug
Problem is when I tried to compile application for my node I want to use same CSS modules as I'll use in the browser, but on compile stage I got an error

> ts-node ./build/web/ssr.tsx
..../js/components/select-search/select-search.module.css:1
.select-search {
^

SyntaxError: Unexpected token '.'

To Reproduce
Steps to reproduce the behavior:
Try to run your ts file with import with ts-node.

Expected behavior
Got the same css classes in via tsc

Add less file extension to default matcher

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
Add less file extension(.less) to default matcher. I think less is as popular as sass/scss.

"\\.module\\.(sa|sc|le|c)ss$"

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Question: How to config it in VSCode

It seems don't work for me.


Reproduce steps:

yarn create react-app  --scripts-version=react-scripts-ts@next .
mv src/App.css src/App.module.css 

then open src/App.tsx, change code import * as styles from './App.css'; to

// tslint:disable 
import styles from './App.module.css'

then add code below in images.d.ts

/* remove 
declare module '*.css'
declare module '*.scss'
declare module '*.sass'
*/
declare module '*.module.css' {
    const classes: { [key: string]: string };
    export default classes;
  }
   
  declare module '*.module.scss' {
    const classes: { [key: string]: string };
    export default classes;
  }
   
  declare module '*.module.sass' {
    const classes: { [key: string]: string };
    export default classes;
  }

then add code below in tsconfig.json

"plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "customMatcher": "\\.module\\.(sa|sc|c)ss$"
        }
      }
    ]

image

no type hint for me.

Autocompletion doesn't work with indented sass

Describe the bug
The repo kind-of mentions the support for Sass, though from the looks of it I don't believe it does.
What it appears to support is scss-style syntax, and not sass indent / offside-rule syntax.

To Reproduce
Steps to reproduce the behavior:

  1. Add to tsconfig.json:
"plugins": [
  {
    "name": "typescript-plugin-css-modules",
    "options": {
      "classnameTransform": "camelCase"
    }
  }
]
  1. Create example.module.sass:
.test
  color: red
  1. Create example.tsx:
import React, {FunctionComponent} from 'react';
import style from '../styles/example.module.sass';

export const ExampleComponent: FunctionComponent = ({children}) => (
  <h1>
    {children}
  </h1>
);
  1. See that autocompletion doesn't work (it does with css and scss though):

image

Expected behavior
Autocompletion should work correctly and intellisense should show the test class.
Should work like with css and scss:

image

Workspace:

  • OS: W10
  • Package version: 2.1.1
  • TS version: 3.7.3

Am I missing something here? Seems like indented sass is a pretty popular choice, I don't know why it shouldn't be supported.

tsserver logging

Is your feature request related to a problem? Please describe.
There is no logging throughout the plugin and errors are just getting swallowed, for example in cssSnapshots, the catch block returns {}.

    return extractICSS(processedCss.root).icssExports;
  } catch (e) {
    return {};
  }

It took a lot of painstaking logging to find out that an exception was being swallowed.

Describe the solution you'd like

There is a logger that gets passed into the create function as part of the info object, e.g.

  function create(info) {
      var logger = info.project.projectService.logger;

There is a TSS_LOG environment variable that when set allows you to log to the console or a file, e.g.

export TSS_LOG="-level verbose -file /Users/me/.tslog"

You can then see the log messages, it took me a long time to find the actual error.

This is not a criticism, thank you for writing this library, I think it most needed.

Unsure how to configure autocomplete in VSCode

Describe the bug
These docs seem to be outdated:
https://github.com/mrmckeb/typescript-plugin-css-modules#visual-studio-code

There's no heading anymore for using the workspace version of Typescript, and in my project it's just using the types I set up:

declare module '*.module.css' {
	const classes: { [key: string]: string };
	export default classes;
}

So autocomplete doesn't do anything other than enforce an object with string keys and string values.

Searching in VSCode itself for a setting called typescript.tsserver.pluginPaths doesn't yield anything useful, and I don't know of a way to directly edit the json files anymore.

How do I get this plugin to run in VSCode?

To Reproduce
Steps to reproduce the behavior:

  1. Go here: https://github.com/mrmckeb/typescript-plugin-css-modules#visual-studio-code
  2. Click on the "Using the workspace version of TypeScript" link
  3. No instructions to configure, and searching that page for workspace doesn't yield anything useful.

Expected behavior

Expected autocomplete to work in VSCode after setup steps, but as I can't figure out how to fully configure the environment I'm expecting that that's the issue.

Handle more complex SASS/SCSS syntax

Is your feature request related to a problem? Please describe.

Yes, the css incompatible parts of sass don't seem to be supported.

It would be great if we could write with programmatic short hand like this in SASS

@for $section from 1 to 10 {
  .section-#{$section} {
    // something systematic
  }
} 

and get typings for the compiled CSS result

.section-1 { ... }
.section-2 { ... }
.section-3 { ... }

Describe the solution you'd like
SASS/SCSS files are compiled for full SASS pre-processor language support

Describe alternatives you've considered
n/a

tslint complains about not using default exported name

I use typescript-tslint-plugin and I am trying to import my modules as styles as follow:

import styles from './styles/main.module.less';

However, tslint complains with:

Expected import 'styles' to match the default export 'classes'. (match-default-export-name)

I think that's strange because my styles/index.d.ts files has the below, which doesn't seem to be taken into consideration.

declare module '*.module.less' {
  const styles: { [key: string]: string };
  export default styles;
}

I also tried the customTemplate.js plugin option with the following

module.exports = (dts, { classes, logger }) => {
  return [
    dts,
    'export const __cssModule: true;',
    `export type styles = '${Object.keys(classes).join("' | '")}';`,
  ].join('\n');
};

But that also didn't have any effect.

What's the best way to have the declarations default exporting either anonymously or named as styles?

Thanks in advance

How to use with less global variables

Describe the bug
In my project, i use less-loader option modifyVars to support global variables.
But seems like modifyVars will cause plugin not working.

To Reproduce
path/to/webpack.config.js

{
  loader: 'less-loader',
  options: {
    modifyVars: require("path/to/theme.js")
  }
}

path/to/theme.js

{
  'global-variable': '#666'
}

path/to/component.less

.component {
  color: @global-variable;
}

path/to/component.tsx

import styles from 'path/to/component.less'; // empty object 

Expected behavior
The export object includes component prop.

Desktop (please complete the following information):

  • OS: Win10
  • Browser Chrome
  • Version latest

Additional context
I know this plugin can't get less-loader global variables, so is there any solution for this issue?
Add an option to import the global variables may be a quick fix.

Plugin fails when importing using absolute tilde imports inside an imported SCSS module file

Describe the bug
Inside an SCSS file you've imported from a TS file, if you import a global SCSS file using ~src/..., the import works, but if that global imported SCSS file imports another global SCSS file, that second import will fail. I know a relative import would work, but in my use case the files are actually pretty far apart.

To Reproduce

Repo here with existing issue: https://github.com/evankennedy/ts-plugin-css-modules-absolute-import

You can see the issue go away if you comment out the line in src/theme/_other.scss

Steps:

  1. Add two global scss files.
  2. Import the first from the second.
  3. Import the second from another file.
  4. See error

Expected behavior
The imports would be successful.

Screenshots
N/A

Desktop (please complete the following information):

  • OS: Ubuntu 19.10
  • Browser: None
  • Version: N/A
  • Editor: VS Code

Additional context

Info 318  [19:29:42.494] [typescript-plugin-css-modules] Failed Error: Can't find stylesheet to import.
  ╷
2 │ @import '~src/theme/second';
  │         ^^^^^^^^^^^^^^^^^^^^
  ╵
  src/theme/_other.scss 2:9  @import
  stdin 2:9                  root stylesheet
Info 319  [19:29:42.495] [typescript-plugin-css-modules] Stack trace: Error: Can't find stylesheet to import.
  ╷
2 │ @import '~src/theme/second';
  │         ^^^^^^^^^^^^^^^^^^^^
  ╵
  src/theme/_other.scss 2:9  @import
  stdin 2:9                  root stylesheet
    at Object._newRenderError (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:13621:19)
    at Object._wrapException (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:13467:16)
    at StaticClosure._renderSync (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:13442:18)
    at Object.Primitives_applyFunction (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:1064:30)
    at Object.Function_apply (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:4898:16)
    at _callDartFunctionFast (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:6580:16)
    at Object.renderSync (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/sass/sass.dart.js:6558:18)
    at Object.exports.getClasses (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript-plugin-css-modules/lib/helpers/getClasses.js:71:18)
    at Object.exports.getDtsSnapshot (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript-plugin-css-modules/lib/helpers/getDtsSnapshot.js:15:32)
    at Object.ts.updateLanguageServiceSourceFile (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript-plugin-css-modules/lib/index.js:111:51)
    at acquireOrUpdateDocument (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:112216:43)
    at Object.updateDocumentWithKey (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:112182:20)
    at Object.getOrCreateSourceFileByPath [as getSourceFileByPath] (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:135296:49)
    at tryReuseStructureFromOldProgram (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:98176:28)
    at Object.createProgram (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:97765:30)
    at synchronizeHostData (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:135218:26)
    at Proxy.getProgram (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:135310:13)
    at ConfiguredProject.Project.updateGraphWorker (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:139786:53)
    at ConfiguredProject.Project.updateGraph (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:139729:42)
    at ConfiguredProject.updateGraph (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:140654:63)
    at Object.updateProjectIfDirty (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:141076:45)
    at checkOne (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:144834:28)
    at MultistepOperation.executeAction (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:143950:25)
    at /home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:143940:100
    at IOSession.Session.executeWithRequestId (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:145994:28)
    at Object.executeWithRequestId (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:144583:87)
    at Timeout._onTimeout (/home/evan/projects/ts-plugin-css-modules-absolute-import/node_modules/typescript/lib/tsserver.js:143940:41)
    at listOnTimeout (internal/timers.js:531:17)
    at processTimers (internal/timers.js:475:7)

Let me know if you need any more info!

Imported less files not found when using `tsc`

Just to join the choir - thank you for an amazing tool!

It works flawlessly in the editor, but I'm having trouble getting tsc to work. I set up a minimal repo reproducing the issue here: https://github.com/krawaller/ts-less-demo

It includes very minimal foo.less file:

.less {
  color: green;
  &IsMore {
    background-color: brown;
  }
}

...and an equally minimal foo.ts that consumes it:

import { lessIsMore } from "./foo.less";

export const favouriteStyle = lessIsMore;

The tsconfig.json includes the src folder containing both the above files, and includes the plugin:

{
  "compilerOptions": {
    "plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "customMatcher": "\\.(c|le|sa|sc)ss$"
        }
      }
    ]
  },
  "include": ["src"]
}

Running the classic "type health check" tsc --noEmit fails, complaining that the .less file isn't found:

image

When checking the "compiled" config by doing tsc --showConfig, I can see that it adds a files prop containing all the .ts files inside the included folder (in my case just foo.ts):

{
    "compilerOptions": {
        ...
    },
    "files": [
        "./src/foo.ts"
    ],
    "include": [
        "src"
    ]
}

If I try to cheekily add src/foo.less to files myself, the compiler will complain about unsupported file types:

image

I feel like I'm missing something blatantly obvious, and humble apologies if that is the case, but I can't for the life of me find anything related in the docs or other issues. How do you all make the ts compiler and the plugin play nice together?

`options has an unknown property 'localIdentName'` during build

Describe the bug
After following the install steps, I try to build and it fails. I get The following error:

Failed to compile.

./src/App.module.less (./node_modules/css-loader/dist/cjs.js??ref--6-oneOf-8-1!./node_modules/postcss-loader/src??postcss!./node_modules
/less-loader/dist/cjs.js??ref--6-oneOf-8-3!./src/App.module.less)
ValidationError: Invalid options object. CSS Loader has been initialized using an options object that does not match the API schema.    
 - options has an unknown property 'localIdentName'. These properties are valid:
   object { url?, import?, modules?, sourceMap?, importLoaders?, localsConvention?, onlyLocals?, esModule? }

To Reproduce

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react",
    "plugins": [{ "name": "typescript-plugin-css-modules" }]
  },
  "include": ["src"]
}

package.json

{
  "name": "XXXX",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "jest": {
    "clearMocks": true,
    "collectCoverageFrom": [
      "src/**/*.{ts}"
    ],
    "preset": "ts-jest",
    "testEnvironment": "node",
    "testPathIgnorePatterns": [
      "/node_modules/",
      "/fixtures/"
    ]
  },
  "lint-staged": {
    "./src/**/*.ts": [
      "eslint --fix",
      "prettier --write",
      "git add"
    ],
    "./**/*.{json,md,yml}": [
      "prettier --write",
      "git add"
    ]
  },
  "prettier": {
    "arrowParens": "always",
    "singleQuote": true,
    "trailingComma": "all"
  },
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "@types/jest": "^24.0.0",
    "@types/node": "^12.0.0",
    "@types/react": "^16.9.0",
    "@types/react-dom": "^16.9.0",
    "antd": "^3.26.11",
    "customize-cra": "^0.9.1",
    "less": "^3.11.1",
    "less-loader": "^5.0.0",
    "react": "^16.12.0",
    "react-app-rewired": "^2.1.5",
    "react-dom": "^16.12.0",
    "react-scripts": "3.4.0",
    "typescript": "~3.7.5"
  },
  "devDependencies": {
    "babel-plugin-import": "^1.13.0",
    "typescript-plugin-css-modules": "^2.1.2"
  }
}

config-overrides.js

const { override, fixBabelImports, addLessLoader } = require("customize-cra");

module.exports = override(
  fixBabelImports("import", {
    libraryName: "antd",
    libraryDirectory: "es",
    style: true
  }),
  addLessLoader({
    javascriptEnabled: true,
    modifyVars: {
      "@primary-color": "#f48549", // customize as needed
      "@link-color": "#e6a07c", // customize as needed
      "@font-size-base": "18px" // customize as needed
    }
  })
);

Expected behavior
I can build without error and use css-modules

Additional context
I'm setting up the start of a new project with create-react, Typescript, customize-cra, react-app-rewired, babel-plugin-import & antd

"Go to definition" does not work right

Describe the bug

Thanks for the awesome plugin!

I noticed that "Go to definition" feature doesn't jump to the CSS class though.

To Reproduce

Here is an animated GIF which shows the problem:

Aug-14-2019 23-19-57

  • OS: MacOS
  • Version: current

Extended failure of #66

Describe the bug
node module resolution fails when starting with ~ and the import steps are more than 1
Edge case of #66

To Reproduce
Steps to reproduce the behavior:
Forked version of the repo used for #66
https://github.com/nokternol/typescript-plugin-css-modules-issues-66.git
App.tsx does not render it's types correctly due to the ts failing in getClasses line 80

Expected behavior
Able to resolve the modules imported further up the hierarchy.

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: Win 10
  • Browser Chrome 79
  • Version 2.1.2
  • IDE VSCode

Additional context
As a workaround, you can go straight to the source (Fix from #66) but this may not work for all situations.
We have a top-level variables which holds our and imported framework variables that the app can then reference but in this case the plugin fails with the same error this issue was raised for.

Add logging to docs

Is your feature request related to a problem? Please describe.
Thanks to #36, logging for this plugin is now available. Usage needs to be documented.

Describe the solution you'd like
Documentation on how to use logging within VSCode (at a minimum).

Importing sass file from "node_modules" doesn't work.

Describe the bug
If the CSS module I'm importing in turn imports another SASS file using the "~" prefix, the plugin can't resolve the imported file.

To Reproduce
File: styles.module.scss:

  @import "~@blueprintjs/core/lib/scss/variables";
    ... other local style declarations

Expected behavior
Importing SASS files from the node_modules folder using the ~ syntax should work.

Actual Behavior
The following error shows up in TS server log:

1 │ @import "~@blueprintjs/core/lib/scss/variables";
  │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  stdin 1:9  root stylesheet
Info 526  [11:17:32.779] [typescript-plugin-css-modules] Stack trace: Error: Can't find stylesheet to import.
  ╷
1 │ @import "~@blueprintjs/core/lib/scss/variables";
  │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  stdin 1:9  root stylesheet
    at Object._newRenderError (\forms\node_modules\sass\sass.dart.js:10819:19)
    at Object._wrapException (\forms\node_modules\sass\sass.dart.js:10669:16)
    at StaticClosure._renderSync (\forms\node_modules\sass\sass.dart.js:10644:18)
    at Object.Primitives_applyFunction (\forms\node_modules\sass\sass.dart.js:1060:30)
    at Object.Function_apply (\forms\node_modules\sass\sass.dart.js:4885:16)
    at _callDartFunctionFast (\forms\node_modules\sass\sass.dart.js:6565:16)
    at Object.renderSync (\forms\node_modules\sass\sass.dart.js:6543:18)
    at Object.exports.getClasses (\forms\node_modules\typescript-plugin-css-modules\lib\helpers\getClasses.js:68:18)```

include mixins in scss cause whole file not working

Describe the bug

// index.module.scss
.cls { 
  @include line-clamp(3);
}

This will cause types missing.

image

To Reproduce
Steps to reproduce the behavior:

  1. create index.module.scss with mixins .cls { @include line-clamp(3); }
  2. open ts file in vscode

Expected behavior
A clear and concise description of what you expected to happen.
index.module.scss should be working

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS] macOS
  • Browser [e.g. chrome, safari] chrome
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Using plugin breaks Visual Studio TSServer functionality

Describe the bug
When I enable the plugin, all of the TypeScript functionality in the Visual Studio 2017 editor breaks.

To Reproduce
Steps to reproduce the behavior:

  1. Open a TypeScript project in VS2017
  2. Enable the plugin
  3. Observe

Expected behavior
Plugin functions and enables CSS module autocomplete.

Actual Behavior
TypeScript no longer provides any syntax highlight or navigation of any kind

Desktop (please complete the following information):

  • OS: Windows 10

Additional context
I noticed a difference in the tsserver logs between when I am using the plugin and when I am not.

When it is enabled, tsserver basically just stops after the first time it attempts to watch a .module.scss file. Here is the final line in the log:

Info 1296 [12:22:53.699] FileWatcher:: Added:: WatchInfo: D:/<project>/Client/src/UI/UIKit/Controls/Spinner.module.scss 500 Project: WatchType: Closed Script info

When it is disabled, it does not do this.

"Find all references" feature doesn't work

Thanks again for the plugin!

Looks like the feature "find all references to a particular css class" doesn't work in vscode.

Here is an animated GIF illustration:

Aug-14-2019 23-32-16

What's interesting is that if I run "Find all references" from the side of a tsx file, it ALMOST works. Here is a GIF showing how it "almost works" from that side:

Aug-14-2019 23-36-07

Looks like if it's run from the tsx side, the plugin messes up offset of css classes in the css file. (Could also be that it's the consequence of #34 bug.)

Less files importing other less files

Describe the bug
When a .less file imports another .less file with a relative path, an error occurs.
When a .less file imports another .less file with an absolute path, an error occurs.

I tried logging the error less.render was giving:
FileError: './constants.module.less' wasn't found. Tried - ./constants.module.less,c:\dev\app\constants.module.less,constants.module.less in input on line 1, column 1: 1 @import "./constants.module.less";

To Reproduce
Have a .less file @import another less file, e.g. :

@import "./constants.module.less";                              // relative
@import "../../site/style-helpers/constants.module.less";	// relative
@import "site/style-helpers/constants.module.less";		// absolute

Expected behaviour
.less imports to not break.

Desktop (please complete the following information):
OS - windows

Additional context
In both the relative and absolute path import cases, I think this issue is in DtsSnapshotCreator.ts, when the method getClasses is called. This method calls less.render to render the less file to a string.

Relative import case:

  • logging the error seems to imply that the import is happening relative to the apps root directory, and not relative to the less file.
  • as an idea for a solution, less.render allows for a paths parameter, could the less file’s directory be passed to less.render to help with relative path imports?

Absolute import case:

  • I’ve setup my webpack configuration to allow for absolute paths. The plugin understandably has no way of knowing about this webpack setup.
{
    loader: "less-loader",
    options: {
        paths: [path.resolve(__dirname, "ClientApp")],
    }
}
  • Ideas for a solution:
    o pass tsconfig’s baseurl to less.render?
    o a plugin parameter to set root paths?

Unfortunately both ideas have some flaws, I'm not sure if there is a better way to achieve absolute imports?

Plugin fails when using an webpack aliases and TS paths to @import other scss files inside scss modules

Describe the bug
The plugin does not work when the seem to work with webpack aliases and TS paths.

Relative paths work fine, namely if I convert from alias/my-styles.scss to ../../styles/my-styles.scss the plugin works fine.

I have looked at the #26 #54 which looked like they were supposed to solve my problem, but they don't, unless I am doing something wrong.

Below is my config. Note that ./client is the folder where I have all my client-side source code for this particular project.

// tsconfig.json
...
"baseUrl": ".",
"paths": {
  "@client/*": ["client/*"]
}
...
// webpack.config.js
...
alias: {
  '@client': path.resolve(__dirname, 'client'),
},
...
// FormComponent.tsx
import { Button } from '@client/components/Button';
import styles from './FormComponent.module.scss';
...
<div className={styles.form} {...otherProps}>...</div>
...
// FormComponent.module.scss
@import '@client/styles/variables.scss';
...
.form {
  font-size: $font-size;
}
...
// variables.scss
$font-size: 14px;
...

Because I used the @client alias to import inside the SCSS file, now the className={styles.form} show a squiggly line under the word form and I get this error: Property 'form' does not exist on type '{}'.ts(2339). If I use the relative import instead (@import '../../styles/variables.scss';) the plugin works fine.

Webpack bundles everything properly and no complaints from VS Code and TypeScript for using the @client alias when importing in either TS/TSX files or SCSS files. The only thing that does not work with the alias is this plugin, typescript-plugin-css-modules.


To Reproduce
I can set up a test repo if the description of the problem does not provide enough info.


Expected behavior
I expect the plugin to work with imports that use aliases just like it works when using imports with relative paths.


Desktop (please complete the following information):


Additional context

Looking at the TS server log in VS Code, the plugin fails with:

Info 84   [17:47:0.941] [typescript-plugin-css-modules] Failed Error: Can't find stylesheet to import.
  ╷
1 │ @import '@client/styles/variables.scss';
  │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  stdin 1:9  root stylesheet
Info 85   [17:47:0.954] [typescript-plugin-css-modules] Stack trace: Error: Can't find stylesheet to import.
  ╷
1 │ @import '@client/styles/variables.scss';
  │         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  ╵
  stdin 1:9  root stylesheet
    at Object._newRenderError (...\node_modules\sass\sass.dart.js:13621:19)
    at Object._wrapException (...\node_modules\sass\sass.dart.js:13467:16)
    at StaticClosure._renderSync (...\node_modules\sass\sass.dart.js:13442:18)
    at Object.Primitives_applyFunction (...\node_modules\sass\sass.dart.js:1064:30)
    at Object.Function_apply (...\node_modules\sass\sass.dart.js:4898:16)
    at _callDartFunctionFast (...\node_modules\sass\sass.dart.js:6580:16)
    at Object.renderSync (...\node_modules\sass\sass.dart.js:6558:18)
    at Object.exports.getClasses (...\node_modules\typescript-plugin-css-modules\lib\helpers\getClasses.js:75:18)
    at ...

Any help would be appreciated. Meanwhile, I will try to troubleshoot the plugin as much as I can. Is there a way to execute node --inspect on the plugin to debug it?

Does not use SASS_PATH environment variable when resolving imports

Describe the bug
I have a sass file containing variable/function/mixin stuff located at /src/theme/_module-basics.scss.
In my .env file I have

SASS_PATH=./src/theme

which allows me to import _module-basics.scss into any CSS module regardless of its location with just

@import "module-basics";

However, after importing such a CSS module into a tsx file, it is typed only as {} in VS Code, and I see this in the TS Server log:

Info 56   [10:6:34.575] [typescript-plugin-css-modules] Failed Error: Can't find stylesheet to import.
  ╷
1 │ @import "module-basics";

Only if I change the @import to use a path relative to the module file, like say...

@import '../theme/module-basics';

...do I get a proper type definition for the CSS module.

To Reproduce

  1. Add the following file/folder structure to a CRA project configured to use typescript-plugin-css-modules:
    (root)
    ├ .env
    └ /src
      ├ App.tsx
      ├ App.modules.scss
      └ /theme
        └ _module-basics.scss
    
  2. File contents:
    • .env
      SASS_PATH=./src/theme
      
    • _module-basics.scss
      $nice-color: #FF0080;
    • App.modules.scss
      @import "module-basics";     
      .nicely-colored {
          color: $nice-color;
      }
    • App.tsx
      /* React, etc. imports */
      
      import styles from './App.module.scss'; // styles assigned Type of {}
      
      function App(props: {}) {
          return (
              <span className={styles["nicely-colored"]}>This is nice.</span> // angry zigzag under styles["nicely-colored"]
          )
      }
  3. Observe styles in App.tsx is typed as {}, causing an angry zigzag in VS Code under styles["nicely-colored"]

Expected behavior
This plugin and/or its dependencies are able to use the contents of SASS_PATH to resolve @import "module-basics" in App.module.scss.
Following which, styles in App.tsx is provided a Type based on the classes/ids in App.module.scss, so there is no angry under styles["nicely-colored"].

Desktop

  • OS: Windows 10

Relative paths using typescript paths options not being resolved

Apparently, the plugin is not able to resolve the types for files that are relative to some path declaration on the typescript configuration.

My tsconfig.json:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "~": ["./src/index.tsx"],
      "~/*": ["./src/*"]
    },
    "sourceMap": true,
    "target": "esnext",
    "moduleResolution": "node",
    "noEmit": true,
    "strict": true,
    "isolatedModules": false,
    "esModuleInterop": true,
    "declaration": false,
    "resolveJsonModule": true,
    "experimentalDecorators": true,
    "lib": [
      "dom",
      "esnext"
    ],
    "plugins": [
      {
        "name": "typescript-styled-plugin",
        "tags": [
          "css"
        ]
      },
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "customMatcher": "\\.(sc|c)ss$",
          "camelCase": "only"
        }
      }
    ],
    "typeRoots": [
      "./node_modules/@types",
      "./@types"
    ]
  },
  "include": [
    "src",
    "webpack"
  ]
}

In my TS file if I import a style by an absolute path, everything works fine, but if the file path is relative to the ~ it simply doesn't work

import globalStyle from '~/styles/style.scss' // Doesn't work at all
import globalStyle2 from '../../styles/style.scss' // Works just fine
  • OS: OSX 10.14.5
  • Browser: Chrome
  • Version: 75

Question: why does the extra declarations are needed?

I'm just wondering why the

declare module '*.module.css' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.scss' {
  const classes: { [key: string]: string };
  export default classes;
}

declare module '*.module.sass' {
  const classes: { [key: string]: string };
  export default classes;
}```

Decelerations are needed, if the service populate them itself

Thanks :)

Classnames support

Describe the solution you'd like
I really like your plugin! It's awesome. I just had the issue, that I'm using classnames in combination with the classnames-loader within webpack. Thus I can do something like this in my component files:

import styles from './styles.scss'

<MyComponent className={styles('myStyle', {someOtherStyle: true})}

For more details, see: https://github.com/itsmepetrov/classnames-loader and https://github.com/JedWatson/classnames
So currently, I just get the error message: This expression is not callable. Type '{ ... }' has no call signatures.
Is there any chance that this can be supported somehow by your plugin?

The directory hierarchy is very deep and leads to Problem

Describe the bug
The directory hierarchy is very deep and leads to Problem
To Reproduce
Steps to reproduce the behavior:

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Not work with less and webpack when I choose webpack resolvers in less-loader

----------- Update 2020-03-16 -----------
I have fixed the issue by writing a less-plugin-aliases that work with typescript-plugin-css-modules customRenderer, you just modify the config as below:

"compilerOptions": {
    "plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          // ...
          "customRenderer": "node_modules/less-plugin-aliases/lib/customRender.js"
        }
      }
    ],
    // ....
   "paths": {
        // config the paths
   }
}

You can use the less-plugin-aliases now, it works well in my project.

The plugin will read the tsconfig.json default to get the compilerOptions to resolve the @import ~xx case, and I also commit a PR that inject the compilerOptions into customRenderer from ts plugin (I think this way is more elegant and power more to customRenderer ), after that the less plugin will not read tsconfig.json anymore.


Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

As less-loader says, I can choose webpack resovler by prepending my @import path with ~, then the plugin does not work as expected.

Describe the solution you'd like
A clear and concise description of what you want to happen.

In less file:

@import '~styles/variables.less';

// some code

In tsconfig.json

{
    "compilerOptions": {
         ...
         "paths":  {
              "styles/*": [path to styles folder]
         }
         ...
   }
}

In webpack.config file I also defined resolver.alias

"styles": path to styles folder

Maybe when the plugin detect a @import path start begin ~, deal it with paths defined in tsconfig.json

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Now, I just use relative path to make it work, but it's ugly and nonportable.

Additional context
Add any other context or screenshots about the feature request here.

postcss.config.js plugins causing exception

Describe the bug
When using this plugin, it throws an exception when a postcss.config.js file with plugins is present.
Error Message:
[typescript-plugin-css-modules] Stack trace: Error: Use process(css).then(cb) to work with async plugins

To Reproduce
Include a postcss.config.js file with any of these plugins:
• postcss-import
• postcss- url
• postcss-preset-env
• cssnano

Expected behavior
Exception to not be thrown.

Desktop (please complete the following information):
OS - windows

Additional context
I’ve traced the error to a line in DtsSnapshotCreator.ts:
const processedCss = processor.process(transformedCss);

Now, in my scenario, processor.process(transformedCss) is returning a Promise and a simple solution I found was to await the promise returned by processor.process(transformedCss).

But I'm not sure if the reason a Promise is being returned in my case is that:

  • there is something wrong in my setup?
  • one of the plugins I'm using is forcing processor.process(transformedCss) to behave in an async fashion?
    I noticed that there is code in the index.ts file to filter out the postcss-mixins plugin as it might be async.
    Do more plugins need to be excluded in this way?

LESS files containing nested function are failing

Describe the bug
LESS files containing function are failing to "build"

To Reproduce
Create a Less files with a function like

.my-header-to-show {
}

.header() {
    > .failed {
        .another-function('blue');
    }
}

then mouseover the styles in your import.

Absolute paths using baseUrl in CRA-based project won't get resolved correctly

Describe the bug
I am writing a CRA-based application and just turned on "baseUrl": "src" in the corresponding tsconfig.json file. Hence I am importing styles as import Styles from "components/App/App.module.scss"; instead of import Styles from "./App.module.scss"; for example. This causes the plugin to not do anything and not suggest any class names since it cannot resolve the file apparently due to the unexpected nature of the absolute paths.

To Reproduce
Steps to reproduce the behavior:

  1. Create a fresh CRA 3.0+ application.
  2. Add "baseUrl": "src" to the compilerOptions of tsconfig.json.
  3. Install node-sass.
  4. Rename the file App.css to App.module.scss.
  5. Import as import Styles from "App.module.scss";.
  6. Notice how you get no code completion since the plugin isn't able to pick up the file.

Expected behavior
No squigglies when attempting to access Styles["App"] or Styles["App-header"] and proper dynamic typing of Styles.

Nested SCSS selectors

Is your feature request related to a problem? Please describe.
Although the usage of CSS Modules in CRA apps makes scoping class names almost obsolete I was considering to use SCSS nesting in a particular case, but noticed that the plugin doesn't resolve those classes at all. A sample in BEM notation looks as follows:

.container {
    width: 100vw;
    height: 100vh;

    &--half {
        width: 50vw;
    }

    &--third {
        width: 33vw;
    }
}

The plugin unfortunately only creates types for container but completely ignores there are container--half and container--third available as well.

Describe the solution you'd like
It would be nice to have the feature added, that the plugin supports nested SCSS classes as described.

Describe alternatives you've considered
This is not a pressing issue since the use of nested classes is arguably unnecessary with CSS Modules anyways and I was basically considering them to remove the amount of classes used in various components with the very same name. The latter makes searching for those names slightly more annoying.

Not working

Describe the bug
I've created a brand new create-react-app with typescript and followed the instructions you kindly wrote, but as soon as I run yarn start I get the typing error:

Type error: Property 'app' does not exist on type 'typeof import("*.module.scss")'.  TS2339

     6 |   render() {
     7 |     return (
  >  8 |       <div className={styles.app}>
       |                              ^
     9 |         <header className={styles.appHeader}>
    10 |           <img src={logo} className={styles.appLogo} alt="logo" />
    11 |           <p>

.vscode/settings.json

{
  "typescript.tsdk": "./node_modules/typescript/lib"
}

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "camelCase": "dashes"
        }
      }
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "preserve"
  },
  "include": [
    "src",
    "custom.d.ts"
  ]
}

OS: macOS mojave
VScode: 1.30.2
react-scripts: 2.1.3
typescript: 3.2.4
typescript-plugin-css-modules: 1.0.5

Does not generate definitions for imported stylesheets

Describe the bug

Even if we could use @import statements without throwing an error about plugin's async mode (i.e. via postcss-import-sync2 plugin) - we still don't get proper typings for such files.

To Reproduce

Assuming we have:

  1. ./foo/index.css with some relative imports:
@import './A.css'
@import 'B.css'
  1. corresponding files ./foo/A.css & ./foo/B.css
  2. the following postcss.config.js:
module.exports = { plugins: [require('postcss-import-sync2')()] };
  1. and ./some.js file importing styles:
import styles from './foo/index.css'

We won't get typings for styles other than {}, because of the resolution error (from TSS_LOG):

Info NNN  [typescript-plugin-css-modules] Failed Error: Failed to find 'A.css'
in [
  C:\Git\some-project-root
]

Expected behavior

Get proper typings.

Additional context

This bug occurs because of the following reasons:

  1. postcss-import-sync2 plugin looks for sourceFile in AST statement: atRule.source.input.file (here)
  2. it's missing so the plugin falls back to options.root, which is process.cwd() (or passed option). at this point we could fix the problem by manually specifying path: [] option for postcss-import-sync2 plugin, but thats not future-proof solution involving some magical knowledge to be shared almong developers.
  3. going one step further, the atRule.source.input.file field is missing because DtsSnapshotCreator does not provide the from option to postcss.process here.

A simple one-line change (adding {from: fileName} as a second argument) fixes the problem for us, but i'm not sure if this could break some common setups.

By the way, passing the same fileName as filename option to less.render alongside with setting syncImport: true should fix #47.

I can make a PR if it's proven to be the proper fix.

How can I help this lovely project get merged upstream into CRA?

Thanks for making this project, it's cool and thanks to your efforts I was able to write my React components using TypeScript and include CSS Modules. Nice to have both!

Regarding this comment
"Closing this off until plugins work at build-time."

It sounds like I should direct my attention to Microsoft's TS team so they support plugins at build time. I'm not a super expert in what it takes to deliver this but if I understand right, this would be what it takes for the CRA project to ship official support for this feature, right?

`camelCase` option is not working

Describe the bug
As title, the generated definition is {}

To Reproduce
Steps to reproduce the behavior:

{
  "plugins": [
      {
        "name": "typescript-plugin-css-modules",
        "options": {
          "camelCase": "camelCase",
          "customMatcher": "\\.m\\.less$"
        }
      }
    ]
}

I've already have:

declare module '*.less' {
  const styles: Record<string, string>;
  export = styles;
}

and

// workspace `settings.json`
{
  "settings": {
    "typescript.tsdk": "node_modules/typescript/lib"
  }
}

Expected behavior
No error

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: macOS Catalina

`customMatcher` support

Describe the bug
I can't get the plugin to work when i specify customMatcher such as:

{
  "name": "typescript-plugin-css-modules",
  "customMatcher": "\\.css$"
}

When i leave it off then everything works fine.

To Reproduce
Add "customMatcher": "\\.css$" and use a filename without the .module part (justAFile.css)

Additional context
I quickly browsed the source and noticed that isRelativeCSS helper actually uses the default isCSS predicate: https://github.com/mrmckeb/typescript-plugin-css-modules/blob/develop/src/helpers/cssExtensions.ts#L6. I guess passing overwritten isCSS to isRelativeCSS would solve this issue.

Will look into that later in the evening and submit PR if that is the case 😃

BTW. nice plugin!

LESS mixins are not suported

Describe the bug
When using mixins, styles properties are not built.

To Reproduce

.box-sizing(@sizing) {
  box-sizing: @sizing;
  -webkit-box-sizing: @sizing;
  -moz-box-sizing: @sizing;
  -ms-box-sizing: @sizing;
}

.someClass {
  .box-sizing(content-box);
}
import styles from "./Styles.less";
...
<input className="someClass"/>

Expected behavior
Generate correct output on import

Screenshots
image

@import not working with .css files

Describe the bug
An import of desktop.module.css, which itself has the line @import './styles.module.css'; which contains a class called .selector only outputs the following definition:

(alias) const styles: {
    'desktop': string;
}

instead of

(alias) const styles: {
    'desktop': string;
    'selector': string;
}

To Reproduce

I reproduced the error here

Screenshots
screenshot

MacOSX Catalina, VS Code 1.42.0
Typescript 3.7.5
typescript-plugin-css-modules 2.1.2

Only support relative path import style files?

Describe the bug
Only support relative path import style files?
Introducing a style file using the webpack path, the style file type definition is not
To Reproduce
Steps to reproduce the behavior:
@import "~styles/var" // error
@import "../styles/var" // bingo

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

TypeScript server is silently dying when having comments and/or commented variables in SCSS files

Describe the bug
If any SCSS file happens to include comments that somehow have SCSS variables in them, your plugin will throw an exception and silently cripple the TypeScript server which seizes to work. It seems to attempt to parse the variables nonetheless.

To Reproduce
Steps to reproduce the behavior:

  1. Create a CRA2.1 app with node-sass installed

  2. Add a Foo.module.scss file.

  3. Add the following code to it:

     .foo {
         width: 100px;
     }
    
     // .locationPanel {
     //     height: calc(100vh - #{$pt-navbar-height});
     //     width: $locationPanel-width;
     // }
    
     // .locationDetails {
     //     height: calc(100vh - #{$pt-navbar-height});
     //     width: calc(100% - #{$locationPanel-width});
     // }
    
  4. Import it using import styles from "./Foo.module.scss";

  5. Notice how the TypeScript server output will show errors and no more quick infos are usable

Expected behavior
No crash of the TypeScript server.

Screenshots
This is an excerpt of the TypeScript server log which shows the initial exception.

<css input>:14:1: Unknown word

CssSyntaxError: <css input>:14:1: Unknown word
    at Input.error (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/parser.js:559:22)
    at Parser.other (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/parser.js:77:16)
    at parse (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/node_modules/postcss/lib/processor.js:117:23)
    at Object.exports.getClasses (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/lib/helpers/cssSnapshots.js:9:47)
    at Object.exports.getDtsSnapshot (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/lib/helpers/cssSnapshots.js:23:27)
    at Object.ts.createLanguageServiceSourceFile (/Users/christian/Projects/graphql-pokemon/node_modules/typescript-plugin-css-modules/lib/index.js:23:49)

Desktop (please complete the following information):

  • OS: macOS 10.4.2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.