UNPKG

15.3 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/index.js"],"names":["ajv","Ajv","$data","validate","compile","optionsSchema","t","types","filenameMap","setupFileForRuntimeResolution","path","filename","programPath","findParent","parentPath","isProgram","importedHelperIndentifier","scope","generateUidIdentifier","styleModuleImportMapIdentifier","unshiftContainer","importDeclaration","importDefaultSpecifier","stringLiteral","firstNonImportDeclarationNode","get","find","node","isImportDeclaration","insertBefore","variableDeclaration","variableDeclarator","styleModuleImportMap","addWebpackHotModuleAccept","test","memberExpression","identifier","consequent","blockStatement","expressionStatement","callExpression","source","value","functionExpression","hotAcceptStatement","ifStatement","pushContainer","getTargetResourcePath","stats","targetFileDirectoryPath","file","opts","startsWith","require","resolve","notForPlugin","filetypes","extension","lastIndexOf","substr","Object","keys","indexOf","exclude","match","RegExp","inherits","babelPluginJsxSyntax","visitor","ImportDeclaration","targetResourcePath","styleImportName","specifiers","length","local","name","console","warn","Error","context","generateScopedName","webpackHotModuleReloading","removeImport","remove","JSXElement","attributeNames","optionsDefaults","assign","attributes","openingElement","filter","attribute","handleMissingStyleName","destinationName","isStringLiteral","isJSXExpressionContainer","Program","error","errors"],"mappings":"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","file":"index.js","sourcesContent":["// @flow\n\nimport {\n dirname,\n resolve\n} from 'path';\nimport babelPluginJsxSyntax from 'babel-plugin-syntax-jsx';\nimport BabelTypes from 'babel-types';\nimport ajvKeywords from 'ajv-keywords';\nimport Ajv from 'ajv';\nimport optionsSchema from './schemas/optionsSchema.json';\nimport optionsDefaults from './schemas/optionsDefaults';\nimport createObjectExpression from './createObjectExpression';\nimport requireCssModule from './requireCssModule';\nimport resolveStringLiteral from './resolveStringLiteral';\nimport replaceJsxExpressionContainer from './replaceJsxExpressionContainer';\n\nconst ajv = new Ajv({\n // eslint-disable-next-line id-match\n $data: true\n});\n\najvKeywords(ajv);\n\nconst validate = ajv.compile(optionsSchema);\n\nexport default ({\n types: t\n}: {\n types: BabelTypes\n}) => {\n const filenameMap = {};\n\n const setupFileForRuntimeResolution = (path, filename) => {\n const programPath = path.findParent((parentPath) => {\n return parentPath.isProgram();\n });\n\n filenameMap[filename].importedHelperIndentifier = programPath.scope.generateUidIdentifier('getClassName');\n filenameMap[filename].styleModuleImportMapIdentifier = programPath.scope.generateUidIdentifier('styleModuleImportMap');\n\n programPath.unshiftContainer(\n 'body',\n t.importDeclaration(\n [\n t.importDefaultSpecifier(\n filenameMap[filename].importedHelperIndentifier\n )\n ],\n t.stringLiteral('babel-plugin-react-css-modules/dist/browser/getClassName')\n )\n );\n\n const firstNonImportDeclarationNode = programPath.get('body').find((node) => {\n return !t.isImportDeclaration(node);\n });\n\n firstNonImportDeclarationNode.insertBefore(\n t.variableDeclaration(\n 'const',\n [\n t.variableDeclarator(\n filenameMap[filename].styleModuleImportMapIdentifier,\n createObjectExpression(t, filenameMap[filename].styleModuleImportMap)\n )\n ]\n )\n );\n // eslint-disable-next-line no-console\n // console.log('setting up', filename, util.inspect(filenameMap,{depth: 5}))\n };\n\n const addWebpackHotModuleAccept = (path) => {\n const test = t.memberExpression(t.identifier('module'), t.identifier('hot'));\n const consequent = t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(\n t.memberExpression(t.identifier('module'), t.identifier('hot')),\n t.identifier('accept')\n ),\n [\n t.stringLiteral(path.node.source.value),\n t.functionExpression(null, [], t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.identifier('require'),\n [t.stringLiteral(path.node.source.value)]\n )\n )\n ]))\n ]\n )\n )\n ]);\n\n const programPath = path.findParent((parentPath) => {\n return parentPath.isProgram();\n });\n\n const firstNonImportDeclarationNode = programPath.get('body').find((node) => {\n return !t.isImportDeclaration(node);\n });\n\n const hotAcceptStatement = t.ifStatement(test, consequent);\n\n if (firstNonImportDeclarationNode) {\n firstNonImportDeclarationNode.insertBefore(hotAcceptStatement);\n } else {\n programPath.pushContainer('body', hotAcceptStatement);\n }\n };\n\n const getTargetResourcePath = (path: *, stats: *) => {\n const targetFileDirectoryPath = dirname(stats.file.opts.filename);\n\n if (path.node.source.value.startsWith('.')) {\n return resolve(targetFileDirectoryPath, path.node.source.value);\n }\n\n return require.resolve(path.node.source.value);\n };\n\n const notForPlugin = (path: *, stats: *) => {\n stats.opts.filetypes = stats.opts.filetypes || {};\n\n const extension = path.node.source.value.lastIndexOf('.') > -1 ? path.node.source.value.substr(path.node.source.value.lastIndexOf('.')) : null;\n\n if (extension !== '.css' && Object.keys(stats.opts.filetypes).indexOf(extension) < 0) {\n return true;\n }\n\n if (stats.opts.exclude && getTargetResourcePath(path, stats).match(new RegExp(stats.opts.exclude))) {\n return true;\n }\n\n return false;\n };\n\n return {\n inherits: babelPluginJsxSyntax,\n visitor: {\n ImportDeclaration (path: *, stats: *): void {\n if (notForPlugin(path, stats)) {\n return;\n }\n\n const filename = stats.file.opts.filename;\n const targetResourcePath = getTargetResourcePath(path, stats);\n\n let styleImportName: string;\n\n if (path.node.specifiers.length === 0) {\n // use imported file path as import name\n styleImportName = path.node.source.value;\n } else if (path.node.specifiers.length === 1) {\n styleImportName = path.node.specifiers[0].local.name;\n } else {\n // eslint-disable-next-line no-console\n console.warn('Please report your use case. https://github.com/gajus/babel-plugin-react-css-modules/issues/new?title=Unexpected+use+case.');\n\n throw new Error('Unexpected use case.');\n }\n\n filenameMap[filename].styleModuleImportMap[styleImportName] = requireCssModule(targetResourcePath, {\n context: stats.opts.context,\n filetypes: stats.opts.filetypes || {},\n generateScopedName: stats.opts.generateScopedName\n });\n\n if (stats.opts.webpackHotModuleReloading) {\n addWebpackHotModuleAccept(path);\n }\n\n if (stats.opts.removeImport) {\n path.remove();\n }\n },\n JSXElement (path: *, stats: *): void {\n const filename = stats.file.opts.filename;\n\n let attributeNames = optionsDefaults.attributeNames;\n\n if (stats.opts && stats.opts.attributeNames) {\n attributeNames = Object.assign({}, attributeNames, stats.opts.attributeNames);\n }\n\n const attributes = path.node.openingElement.attributes\n .filter((attribute) => {\n return typeof attribute.name !== 'undefined' && typeof attributeNames[attribute.name.name] === 'string';\n });\n\n if (attributes.length === 0) {\n return;\n }\n\n const handleMissingStyleName = stats.opts && stats.opts.handleMissingStyleName || optionsDefaults.handleMissingStyleName;\n\n for (const attribute of attributes) {\n const destinationName = attributeNames[attribute.name.name];\n\n if (t.isStringLiteral(attribute.value)) {\n resolveStringLiteral(\n path,\n filenameMap[filename].styleModuleImportMap,\n attribute,\n destinationName,\n {\n handleMissingStyleName\n }\n );\n } else if (t.isJSXExpressionContainer(attribute.value)) {\n if (!filenameMap[filename].importedHelperIndentifier) {\n setupFileForRuntimeResolution(path, filename);\n }\n replaceJsxExpressionContainer(\n t,\n path,\n attribute,\n destinationName,\n filenameMap[filename].importedHelperIndentifier,\n filenameMap[filename].styleModuleImportMapIdentifier,\n {\n handleMissingStyleName\n }\n );\n }\n }\n },\n Program (path: *, stats: *): void {\n if (!validate(stats.opts)) {\n // eslint-disable-next-line no-console\n console.error(validate.errors);\n\n throw new Error('Invalid configuration');\n }\n\n const filename = stats.file.opts.filename;\n\n filenameMap[filename] = {\n styleModuleImportMap: {}\n };\n }\n }\n };\n};\n"]}
\No newline at end of file