Socket
Socket
Sign inDemoInstall

@storybook/addon-svelte-csf

Package Overview
Dependencies
Maintainers
30
Versions
279
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@storybook/addon-svelte-csf - npm Package Compare versions

Comparing version 2.0.11 to 2.0.12--canary.94.71b3707.0

dist/cjs/config-loader.js

7

.babelrc.js
module.exports = {
presets: ['@babel/preset-env', '@babel/preset-typescript'],
presets: [
['@babel/preset-env', { targets: { node: '16' }, modules: false }],
'@babel/preset-typescript',
],
plugins: ['@babel/plugin-transform-runtime'],
env: {

@@ -10,2 +14,3 @@ esm: {

modules: false,
targets: { chrome: '100' },
},

@@ -12,0 +17,0 @@ ],

module.exports = {
root: true,
extends: ['@storybook/eslint-config-storybook'],
rules: {
'@typescript-eslint/dot-notation': 'off',
'@typescript-eslint/no-implied-eval': 'off',
'@typescript-eslint/no-throw-literal': 'off',
'@typescript-eslint/return-await': 'off',
},
overrides: [],
};

12

CHANGELOG.md

@@ -1,13 +0,1 @@

# v2.0.11 (Tue Jan 17 2023)
#### 🐛 Bug Fix
- Make types compatible with TypeScript `strict` mode [#74](https://github.com/storybookjs/addon-svelte-csf/pull/74) ([@RSWilli](https://github.com/RSWilli))
#### Authors: 1
- Wilhelm Bartel ([@RSWilli](https://github.com/RSWilli))
---
# v2.0.10 (Thu Oct 27 2022)

@@ -14,0 +2,0 @@

@@ -1,34 +0,16 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createRegistrationContext = createRegistrationContext;
exports.createRenderContext = createRenderContext;
exports.useContext = useContext;
var _svelte = require("svelte");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var CONTEXT_KEY = "storybook-registration-context";
function createRenderContext() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
(0, _svelte.setContext)(CONTEXT_KEY, _objectSpread({
import { getContext, hasContext, setContext } from "svelte";
const CONTEXT_KEY = "storybook-registration-context";
export function createRenderContext(props = {}) {
setContext(CONTEXT_KEY, {
render: true,
register: function register() {},
register: () => {},
meta: {},
args: {}
}, props));
args: {},
...props
});
}
function createRegistrationContext(repositories) {
(0, _svelte.setContext)(CONTEXT_KEY, {
export function createRegistrationContext(repositories) {
setContext(CONTEXT_KEY, {
render: false,
register: function register(story) {
register: story => {
repositories.stories.push(story);

@@ -45,9 +27,8 @@ },

}
function useContext() {
if (!(0, _svelte.hasContext)(CONTEXT_KEY)) {
export function useContext() {
if (!hasContext(CONTEXT_KEY)) {
createRenderContext();
}
return (0, _svelte.getContext)(CONTEXT_KEY);
return getContext(CONTEXT_KEY);
}

@@ -1,8 +0,1 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ADDON_ID = void 0;
var ADDON_ID = 'storybook/svelte-csf';
exports.ADDON_ID = ADDON_ID;
export const ADDON_ID = 'storybook/svelte-csf';

@@ -1,34 +0,5 @@

"use strict";
export { default as Meta } from './components/Meta.svelte';
export { default as Story } from './components/Story.svelte';
export { default as Template } from './components/Template.svelte';
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "Meta", {
enumerable: true,
get: function get() {
return _Meta["default"];
}
});
Object.defineProperty(exports, "Story", {
enumerable: true,
get: function get() {
return _Story["default"];
}
});
Object.defineProperty(exports, "Template", {
enumerable: true,
get: function get() {
return _Template["default"];
}
});
exports["default"] = void 0;
var _Meta = _interopRequireDefault(require("./components/Meta.svelte"));
var _Story = _interopRequireDefault(require("./components/Story.svelte"));
var _Template = _interopRequireDefault(require("./components/Template.svelte"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
if (module && module.hot && module.hot.decline) {

@@ -39,3 +10,2 @@ module.hot.decline();

var _default = {};
exports["default"] = _default;
export default {};

@@ -1,16 +0,18 @@

"use strict";
const svelte = require('svelte/compiler');
var svelte = require('svelte/compiler');
const parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
var parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
function process(src, filename) {
var result = svelte.compile(src, {
const result = svelte.compile(src, {
format: 'cjs',
filename: filename,
filename,
dev: true
});
var code = result.js ? result.js.code : result.code;
var z = {
code: "".concat(code, "\n const { default: parser } = require('").concat(parser, "');\n const md = parser(module.exports.default, {});\n module.exports = { default: md.meta, ...md.stories };\n Object.defineProperty(exports, \"__esModule\", { value: true });"),
const code = result.js ? result.js.code : result.code;
const z = {
code: `${code}
const { default: parser } = require('${parser}');
const md = parser(module.exports.default, {});
module.exports = { default: md.meta, ...md.stories };
Object.defineProperty(exports, "__esModule", { value: true });`,
map: result.js ? result.js.map : result.map

@@ -17,0 +19,0 @@ };

@@ -1,38 +0,7 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _clientLogger = require("@storybook/client-logger");
var _clientApi = require("@storybook/client-api");
var _extractId = require("./extract-id");
var _RegisterContext = _interopRequireDefault(require("../components/RegisterContext.svelte"));
var _RenderContext = _interopRequireDefault(require("../components/RenderContext.svelte"));
var _excluded = ["id", "name", "template", "component", "source"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
/* eslint-env browser */
import { logger } from '@storybook/client-logger';
import { combineParameters } from '@storybook/client-api';
import { extractId } from './extract-id';
import RegisterContext from '../components/RegisterContext.svelte';
import RenderContext from '../components/RenderContext.svelte';
/* Called from a webpack loader and a jest transformation.

@@ -48,13 +17,9 @@ *

*/
var createFragment = document.createDocumentFragment ? function () {
return document.createDocumentFragment();
} : function () {
return document.createElement('div');
};
var _default = function _default(StoriesComponent, _ref) {
var _ref$stories = _ref.stories,
stories = _ref$stories === void 0 ? {} : _ref$stories,
allocatedIds = _ref.allocatedIds;
var repositories = {
const createFragment = document.createDocumentFragment ? () => document.createDocumentFragment() : () => document.createElement('div');
export default ((StoriesComponent, {
stories = {},
allocatedIds
}) => {
const repositories = {
meta: null,

@@ -65,7 +30,7 @@ stories: []

try {
var context = new _RegisterContext["default"]({
const context = new RegisterContext({
target: createFragment(),
props: {
Stories: StoriesComponent,
repositories: repositories
repositories
}

@@ -75,44 +40,39 @@ });

} catch (e) {
_clientLogger.logger.error("Error extracting stories ".concat(e.toString()), e);
logger.error(`Error extracting stories ${e.toString()}`, e);
}
var meta = repositories.meta;
const {
meta
} = repositories;
if (!meta) {
_clientLogger.logger.error('Missing <Meta/> tag');
logger.error('Missing <Meta/> tag');
return {};
}
var globalComponent = meta.component; // collect templates id
const {
component: globalComponent
} = meta; // collect templates id
var templatesId = repositories.stories.filter(function (story) {
return story.isTemplate;
}).map(function (story) {
return story.id;
}); // check for duplicate templates
const templatesId = repositories.stories.filter(story => story.isTemplate).map(story => story.id); // check for duplicate templates
var duplicateTemplatesId = templatesId.filter(function (item, index) {
return templatesId.indexOf(item) !== index;
});
const duplicateTemplatesId = templatesId.filter((item, index) => templatesId.indexOf(item) !== index);
if (duplicateTemplatesId.length > 0) {
_clientLogger.logger.warn("Found duplicates templates id for stories '".concat(meta.name, "': ").concat(duplicateTemplatesId));
logger.warn(`Found duplicates templates id for stories '${meta.name}': ${duplicateTemplatesId}`);
}
return {
meta: meta,
stories: repositories.stories.filter(function (story) {
return !story.isTemplate;
}).reduce(function (all, story) {
var id = story.id,
name = story.name,
template = story.template,
component = story.component,
_story$source = story.source,
source = _story$source === void 0 ? false : _story$source,
props = _objectWithoutProperties(story, _excluded);
meta,
stories: repositories.stories.filter(story => !story.isTemplate).reduce((all, story) => {
const {
id,
name,
template,
component,
source = false,
...props
} = story;
const storyId = extractId(story, allocatedIds);
var storyId = (0, _extractId.extractId)(story, allocatedIds);
if (!storyId) {

@@ -122,11 +82,11 @@ return all;

var unknownTemplate = template != null && templatesId.indexOf(template) < 0;
const unknownTemplate = template != null && templatesId.indexOf(template) < 0;
var storyFn = function storyFn(args, storyContext) {
const storyFn = (args, storyContext) => {
if (unknownTemplate) {
throw new Error("Story ".concat(name, " is referencing an unknown template ").concat(template));
throw new Error(`Story ${name} is referencing an unknown template ${template}`);
}
return {
Component: _RenderContext["default"],
Component: RenderContext,
props: {

@@ -136,4 +96,4 @@ Stories: StoriesComponent,

templateId: template,
args: args,
storyContext: storyContext,
args,
storyContext,
sourceComponent: component || globalComponent

@@ -145,17 +105,13 @@ }

storyFn.storyName = name;
Object.entries(props).forEach(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
Object.entries(props).forEach(([k, v]) => {
storyFn[k] = v;
}); // inject story sources
var storyDef = stories[template ? "tpl:".concat(template) : storyId];
var hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
const storyDef = stories[template ? `tpl:${template}` : storyId];
const hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
var rawSource = storyDef ? storyDef.source : null;
const rawSource = storyDef ? storyDef.source : null;
if (rawSource) {
storyFn.parameters = (0, _clientApi.combineParameters)(storyFn.parameters || {}, {
storyFn.parameters = combineParameters(storyFn.parameters || {}, {
storySource: {

@@ -167,3 +123,3 @@ source: rawSource

var snippet;
let snippet;

@@ -177,3 +133,3 @@ if (source === true || source === false && !hasArgs) {

if (snippet) {
storyFn.parameters = (0, _clientApi.combineParameters)(storyFn.parameters || {}, {
storyFn.parameters = combineParameters(storyFn.parameters || {}, {
docs: {

@@ -192,4 +148,2 @@ source: {

};
};
exports["default"] = _default;
});

@@ -1,12 +0,6 @@

"use strict";
var _collectStories = _interopRequireDefault(require("./collect-stories"));
var _TestStories = _interopRequireDefault(require("../components/__tests__/TestStories.svelte"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
describe('parse-stories', function () {
test('Extract Stories', function () {
var data = (0, _collectStories["default"])(_TestStories["default"], {
import collectStories from './collect-stories';
import TestStories from '../components/__tests__/TestStories.svelte';
describe('parse-stories', () => {
test('Extract Stories', () => {
const data = collectStories(TestStories, {
stories: {

@@ -16,13 +10,33 @@ 'tpl:tpl2': 'tpl2src'

});
var stories = data.stories,
meta = data.meta;
expect(meta).toMatchInlineSnapshot("\n Object {\n \"title\": \"Test\",\n }\n ");
expect(stories).toMatchInlineSnapshot("\n Object {\n \"Story1\": [Function],\n \"Story2\": [Function],\n \"Story3\": [Function],\n }\n ");
const {
stories,
meta
} = data;
expect(meta).toMatchInlineSnapshot(`
Object {
"title": "Test",
}
`);
expect(stories).toMatchInlineSnapshot(`
Object {
"Story1": [Function],
"Story2": [Function],
"Story3": [Function],
}
`);
expect(stories.Story1.storyName).toBe('Story1');
expect(stories.Story1.parameters).toMatchInlineSnapshot("undefined");
expect(stories.Story1.parameters).toMatchInlineSnapshot(`undefined`);
expect(stories.Story2.storyName).toBe('Story2');
expect(stories.Story2.parameters).toMatchInlineSnapshot("undefined");
expect(stories.Story2.parameters).toMatchInlineSnapshot(`undefined`);
expect(stories.Story3.storyName).toBe('Story3');
expect(stories.Story3.parameters).toMatchInlineSnapshot("\n Object {\n \"docs\": Object {\n \"source\": Object {\n \"code\": \"xyz\",\n },\n },\n }\n ");
expect(stories.Story3.parameters).toMatchInlineSnapshot(`
Object {
"docs": Object {
"source": Object {
"code": "xyz",
},
},
}
`);
});
});

@@ -1,15 +0,6 @@

"use strict";
import { logger } from '@storybook/client-logger';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extractId = extractId;
var _clientLogger = require("@storybook/client-logger");
function hashCode(str) {
var h = str.split('') // eslint-disable-next-line no-bitwise
.reduce(function (prevHash, currVal) {
return (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0;
}, 0);
const h = str.split('') // eslint-disable-next-line no-bitwise
.reduce((prevHash, currVal) => (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0, 0);
return Math.abs(h).toString(16);

@@ -19,7 +10,6 @@ } // extract a story id

function extractId(_ref) {
var id = _ref.id,
name = _ref.name;
var allocatedIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
export function extractId({
id,
name
}, allocatedIds = []) {
if (id) {

@@ -29,9 +19,10 @@ return id;

var generated = name.replace(/\W+(.|$)/g, function (_, chr) {
return chr.toUpperCase();
});
if (!name) {
throw new Error("Id or Name should be specified");
}
let generated = name.replace(/\W+(.|$)/g, (_, chr) => chr.toUpperCase());
if (allocatedIds.indexOf(generated) >= 0) {
_clientLogger.logger.warn("Story name conflict with exports - Please add an explicit id for story ".concat(name));
logger.warn(`Story name conflict with exports - Please add an explicit id for story ${name}`);
generated += hashCode(name);

@@ -38,0 +29,0 @@ }

@@ -1,23 +0,20 @@

"use strict";
var _extractId = require("./extract-id");
describe('extract-id', function () {
test('name with spaces', function () {
expect((0, _extractId.extractId)({
import { extractId } from './extract-id';
describe('extract-id', () => {
test('name with spaces', () => {
expect(extractId({
name: 'Name with spaces'
})).toBe('NameWithSpaces');
});
test('name with parenthesis', function () {
expect((0, _extractId.extractId)({
test('name with parenthesis', () => {
expect(extractId({
name: 'Name with (parenthesis)'
})).toBe('NameWithParenthesis');
});
test('duplicates id', function () {
expect((0, _extractId.extractId)({
test('duplicates id', () => {
expect(extractId({
name: 'Button'
}, ['Button'])).toBe('Button77471352');
});
test('No negative hash', function () {
expect((0, _extractId.extractId)({
test('No negative hash', () => {
expect(extractId({
name: 'Navbar'

@@ -24,0 +21,0 @@ }, ['Navbar'])).toBe('Navbar7557f7d0');

@@ -1,33 +0,17 @@

"use strict";
import dedent from 'ts-dedent';
import * as svelte from 'svelte/compiler';
import { extractId } from './extract-id';
import { toId, storyNameFromExport } from "@storybook/csf";
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extractStories = extractStories;
var _tsDedent = _interopRequireDefault(require("ts-dedent"));
var svelte = _interopRequireWildcard(require("svelte/compiler"));
var _extractId = require("./extract-id");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function getStaticAttribute(name, node) {
// extract the attribute
var attribute = node.attributes.find(function (att) {
return att.type === 'Attribute' && att.name === name;
});
const attribute = node.attributes.find(att => att.type === 'Attribute' && att.name === name);
if (!attribute) {
return null;
return undefined;
}
var value = attribute.value; // expect the attribute to be static, ie only one Text node
const {
value
} = attribute; // expect the attribute to be static, ie only one Text node

@@ -38,3 +22,3 @@ if (value && value.length === 1 && value[0].type === 'Text') {

throw new Error("Attribute ".concat(name, " is not static"));
throw new Error(`Attribute ${name} is not static`);
}

@@ -48,48 +32,50 @@ /**

function extractStories(component) {
export function extractStories(component) {
// compile
var _svelte$compile = svelte.compile(component),
ast = _svelte$compile.ast;
var allocatedIds = ['default'];
var localNames = {
const {
ast
} = svelte.compile(component);
const allocatedIds = ['default'];
const localNames = {
Story: 'Story',
Template: 'Template'
Template: 'Template',
Meta: 'Meta'
};
svelte.walk(ast.instance, {
enter: function enter(node) {
if (node.type === 'ImportDeclaration') {
if (node.source.value === '@storybook/addon-svelte-csf') {
node.specifiers.filter(function (n) {
return n.type === 'ImportSpecifier';
}).forEach(function (n) {
localNames[n.imported.name] = n.local.name;
});
if (ast.instance) {
svelte.walk(ast.instance, {
enter(node) {
if (node.type === 'ImportDeclaration') {
if (node.source.value === '@storybook/addon-svelte-csf') {
node.specifiers.filter(n => n.type === 'ImportSpecifier').forEach(n => {
localNames[n.imported.name] = n.local.name;
});
}
this.skip();
}
}
this.skip();
}); // extracts allocated Ids
svelte.walk(ast.instance, {
enter(node) {
if (node.type === 'ImportDeclaration') {
node.specifiers.map(n => n.local.name).forEach(name => allocatedIds.push(name));
this.skip();
}
}
}
}); // extracts allocated Ids
svelte.walk(ast.instance, {
enter: function enter(node) {
if (node.type === 'ImportDeclaration') {
node.specifiers.map(function (n) {
return n.local.name;
}).forEach(function (name) {
return allocatedIds.push(name);
});
this.skip();
}
}
});
var stories = {};
});
}
const stories = {};
const meta = {};
svelte.walk(ast.html, {
enter: function enter(node) {
enter(node) {
if (node.type === 'InlineComponent' && (node.name === localNames.Story || node.name === localNames.Template)) {
this.skip();
var isTemplate = node.name === 'Template'; // extract the 'name' attribute
const isTemplate = node.name === 'Template'; // extract the 'name' attribute
var name = getStaticAttribute('name', node); // templates has a default name
let name = getStaticAttribute('name', node); // templates has a default name

@@ -100,5 +86,5 @@ if (!name && isTemplate) {

var id = (0, _extractId.extractId)({
const id = extractId({
id: getStaticAttribute('id', node),
name: name
name
}, isTemplate ? undefined : allocatedIds);

@@ -108,26 +94,35 @@

// ignore stories without children
var source;
let source;
if (node.children.length > 0) {
var start = node.children[0].start;
var end = node.children[node.children.length - 1].end;
source = (0, _tsDedent["default"])(component.substr(start, end - start));
const {
start
} = node.children[0];
const {
end
} = node.children[node.children.length - 1];
source = dedent(component.substr(start, end - start));
}
stories[isTemplate ? "tpl:".concat(id) : id] = {
name: name,
stories[isTemplate ? `tpl:${id}` : id] = {
storyId: toId(meta.id || meta.title || id, storyNameFromExport(id)),
name,
template: isTemplate,
source: source,
hasArgs: node.attributes.find(function (att) {
return att.type === 'Let';
}) != null
source,
hasArgs: node.attributes.find(att => att.type === 'Let') != null
};
}
} else if (node.type === 'InlineComponent' && node.name === localNames.Meta) {
this.skip();
meta.title = getStaticAttribute("title", node);
meta.id = getStaticAttribute("id", node);
}
}
});
return {
stories: stories,
allocatedIds: allocatedIds
meta,
stories,
allocatedIds
};
}

@@ -1,30 +0,245 @@

"use strict";
import { extractStories } from './extract-stories';
describe('extractSource', () => {
test('Simple Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
var _extractStories = require("./extract-stories");
<Story name="MyStory">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"MyStory": Object {
"hasArgs": false,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "mystory--my-story",
"template": false,
},
},
}
`);
});
test('Explicit Id Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
describe('extractSource', function () {
test('Simple Story', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story name=\"MyStory\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"MyStory\": Object {\n \"hasArgs\": false,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
<Story id="myId" name="MyStory">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"myId": Object {
"hasArgs": false,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "myid--my-id",
"template": false,
},
},
}
`);
});
test('Explicit Id Story', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story id=\"myId\" name=\"MyStory\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"myId\": Object {\n \"hasArgs\": false,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Args Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
<Story name="MyStory" let:args>
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"MyStory": Object {
"hasArgs": true,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "mystory--my-story",
"template": false,
},
},
}
`);
});
test('Args Story', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story name=\"MyStory\" let:args>\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"MyStory\": Object {\n \"hasArgs\": true,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Simple Template', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Template name="MyTemplate">
<div>a template</div>
</Template>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"tpl:MyTemplate": Object {
"hasArgs": false,
"name": "MyTemplate",
"source": "<div>a template</div>",
"storyId": "mytemplate--my-template",
"template": true,
},
},
}
`);
});
test('Simple Template', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Template name=\"MyTemplate\">\n <div>a template</div>\n </Template>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"tpl:MyTemplate\": Object {\n \"hasArgs\": false,\n \"name\": \"MyTemplate\",\n \"source\": \"<div>a template</div>\",\n \"template\": true,\n },\n },\n }\n ");
test('Unnamed Template', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Template>
<div>a template</div>
</Template>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"tpl:default": Object {
"hasArgs": false,
"name": "default",
"source": "<div>a template</div>",
"storyId": "default--default",
"template": true,
},
},
}
`);
});
test('Unnamed Template', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Template>\n <div>a template</div>\n </Template>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"tpl:default\": Object {\n \"hasArgs\": false,\n \"name\": \"default\",\n \"source\": \"<div>a template</div>\",\n \"template\": true,\n },\n },\n }\n ");
test('Multiple Stories', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Story name="Story1">
<div>story 1</div>
</Story>
<Story name="Story2">
<div>story 2</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"Story1": Object {
"hasArgs": false,
"name": "Story1",
"source": "<div>story 1</div>",
"storyId": "story1--story-1",
"template": false,
},
"Story2": Object {
"hasArgs": false,
"name": "Story2",
"source": "<div>story 2</div>",
"storyId": "story2--story-2",
"template": false,
},
},
}
`);
});
test('Multiple Stories', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Story name=\"Story1\">\n <div>story 1</div>\n </Story>\n <Story name=\"Story2\">\n <div>story 2</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"Story1\": Object {\n \"hasArgs\": false,\n \"name\": \"Story1\",\n \"source\": \"<div>story 1</div>\",\n \"template\": false,\n },\n \"Story2\": Object {\n \"hasArgs\": false,\n \"name\": \"Story2\",\n \"source\": \"<div>story 2</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Renamed Import', () => {
expect(extractStories(`
<script>
import { Story as SBStory, Meta as SBMeta } from '@storybook/addon-svelte-csf';
</script>
<SBMeta title='test'/>
<SBStory name="Story1">
<div>story 1</div>
</SBStory>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"SBStory",
"SBMeta",
],
"meta": Object {
"id": undefined,
"title": "test",
},
"stories": Object {
"Story1": Object {
"hasArgs": false,
"name": "Story1",
"source": "<div>story 1</div>",
"storyId": "test--story-1",
"template": false,
},
},
}
`);
});
test('Renamed Import', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Story as SBStory, Meta as SBMeta } from '@storybook/addon-svelte-csf';\n </script>\n\n <SBMeta title='test'/>\n\n <SBStory name=\"Story1\">\n <div>story 1</div>\n </SBStory>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"SBStory\",\n \"SBMeta\",\n ],\n \"stories\": Object {\n \"Story1\": Object {\n \"hasArgs\": false,\n \"name\": \"Story1\",\n \"source\": \"<div>story 1</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Duplicate Id', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
import Button from './Button.svelte';
</script>
<Story name="Button">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
"Button",
],
"meta": Object {},
"stories": Object {
"Button77471352": Object {
"hasArgs": false,
"name": "Button",
"source": "<div>a story</div>",
"storyId": "button77471352--button-77471352",
"template": false,
},
},
}
`);
});
test('Duplicate Id', function () {
expect((0, _extractStories.extractStories)("\n <script>\n import { Story } from '@storybook/svelte';\n import Button from './Button.svelte';\n </script>\n\n <Story name=\"Button\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n \"Button\",\n ],\n \"stories\": Object {\n \"Button77471352\": Object {\n \"hasArgs\": false,\n \"name\": \"Button\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
});
});

@@ -1,43 +0,15 @@

"use strict";
import dedent from 'ts-dedent';
import { readFileSync } from 'fs';
import { extractStories } from './extract-stories';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
exports.getNameFromFilename = getNameFromFilename;
var _tsDedent = _interopRequireDefault(require("ts-dedent"));
var _fs = require("fs");
var _extractStories = require("./extract-stories");
var _templateObject;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var parser = require.resolve('./collect-stories').replace(/[/\\]/g, '/'); // From https://github.com/sveltejs/svelte/blob/8db3e8d0297e052556f0b6dde310ef6e197b8d18/src/compiler/compile/utils/get_name_from_filename.ts
const parser = require.resolve('./collect-stories').replace(/[/\\]/g, '/'); // From https://github.com/sveltejs/svelte/blob/8db3e8d0297e052556f0b6dde310ef6e197b8d18/src/compiler/compile/utils/get_name_from_filename.ts
// Copied because it is not exported from the compiler
function getNameFromFilename(filename) {
export function getNameFromFilename(filename) {
if (!filename) return null;
var parts = filename.split(/[/\\]/).map(encodeURI);
const parts = filename.split(/[/\\]/).map(encodeURI);
if (parts.length > 1) {
var index_match = parts[parts.length - 1].match(/^index(\.\w+)/);
const index_match = parts[parts.length - 1].match(/^index(\.\w+)/);

@@ -50,6 +22,6 @@ if (index_match) {

var base = parts.pop().replace(/%/g, 'u').replace(/\.[^.]+$/, '').replace(/[^a-zA-Z_$0-9]+/g, '_').replace(/^_/, '').replace(/_$/, '').replace(/^(\d)/, '_$1');
const base = parts.pop().replace(/%/g, 'u').replace(/\.[^.]+$/, '').replace(/[^a-zA-Z_$0-9]+/g, '_').replace(/^_/, '').replace(/_$/, '').replace(/^(\d)/, '_$1');
if (!base) {
throw new Error("Could not derive component name from file ".concat(filename));
throw new Error(`Could not derive component name from file ${filename}`);
}

@@ -62,23 +34,21 @@

// eslint-disable-next-line no-underscore-dangle
var resource = this._module.resource;
var componentName = getNameFromFilename(resource);
var source = (0, _fs.readFileSync)(resource).toString();
var storiesDef = (0, _extractStories.extractStories)(source);
var stories = storiesDef.stories;
var storyDef = Object.entries(stories).filter(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
def = _ref2[1];
return !def.template;
}).map(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
id = _ref4[0];
return "export const ".concat(id, " = __storiesMetaData.stories[").concat(JSON.stringify(id), "]");
}).join('\n');
var codeWithoutDefaultExport = code.replace('export default ', '//export default');
return (0, _tsDedent["default"])(_templateObject || (_templateObject = _taggedTemplateLiteral(["", "\n const { default: parser } = require('", "');\n const __storiesMetaData = parser(", ", ", ");\n export default __storiesMetaData.meta;\n ", ";\n "])), codeWithoutDefaultExport, parser, componentName, JSON.stringify(storiesDef), storyDef);
const {
resource
} = this._module;
const componentName = getNameFromFilename(resource);
const source = readFileSync(resource).toString();
const storiesDef = extractStories(source);
const {
stories
} = storiesDef;
const storyDef = Object.entries(stories).filter(([, def]) => !def.template).map(([id]) => `export const ${id} = __storiesMetaData.stories[${JSON.stringify(id)}]`).join('\n');
const codeWithoutDefaultExport = code.replace('export default ', '//export default');
return dedent`${codeWithoutDefaultExport}
const { default: parser } = require('${parser}');
const __storiesMetaData = parser(${componentName}, ${JSON.stringify(storiesDef)});
export default __storiesMetaData.meta;
${storyDef};
`;
}
var _default = transformSvelteStories;
exports["default"] = _default;
export default transformSvelteStories;

@@ -1,36 +0,9 @@

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.managerEntries = managerEntries;
exports.webpack = webpack;
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function managerEntries() {
var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return [].concat(_toConsumableArray(entry), [require.resolve('./manager')]);
import { svelteIndexer } from './indexer.js';
export function managerEntries(entry = []) {
return [...entry, require.resolve('./manager')];
}
function webpack(config) {
return _objectSpread(_objectSpread({}, config), {}, {
module: _objectSpread(_objectSpread({}, config.module), {}, {
rules: [].concat(_toConsumableArray(config.module.rules), [{
export function webpack(config) {
return { ...config,
module: { ...config.module,
rules: [...config.module.rules, {
test: /\.stories\.svelte$/,

@@ -41,5 +14,43 @@ enforce: 'post',

}]
}])
})
});
}
}]
}
};
}
export async function viteFinal(config, options) {
const {
plugins = []
} = config;
const svelteOptions = await options.presets.apply('svelteOptions', {}, options);
let svelteConfig = svelteOptions;
try {
const {
loadSvelteConfig
} = await import('@sveltejs/vite-plugin-svelte');
svelteConfig = { ...(await loadSvelteConfig()),
...svelteOptions
};
} catch (err) {
const {
log
} = console;
if (err.code === 'MODULE_NOT_FOUND') {
log('@sveltejs/vite-plugin-svelte not found. Unable to load config from svelte.config file');
} else {
throw err;
}
}
const svelteCsfPlugin = (await import('../plugins/vite-svelte-csf.js')).default.default;
plugins.push(svelteCsfPlugin(svelteConfig));
return { ...config,
plugins
};
}
export const storyIndexers = async indexers => {
return [{
test: /\.stories\.svelte$/,
indexer: svelteIndexer
}, ...(indexers || [])];
};

@@ -1,8 +0,4 @@

"use strict";
import { addons } from '@storybook/addons';
import { ADDON_ID } from '../constants'; // Register the addon
var _addons = require("@storybook/addons");
var _constants = require("../constants");
// Register the addon
_addons.addons.register(_constants.ADDON_ID, function () {});
addons.register(ADDON_ID, () => {});

@@ -1,17 +0,11 @@

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import { getContext, hasContext, setContext } from "svelte";
var CONTEXT_KEY = "storybook-registration-context";
export function createRenderContext() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
setContext(CONTEXT_KEY, _objectSpread({
const CONTEXT_KEY = "storybook-registration-context";
export function createRenderContext(props = {}) {
setContext(CONTEXT_KEY, {
render: true,
register: function register() {},
register: () => {},
meta: {},
args: {}
}, props));
args: {},
...props
});
}

@@ -21,3 +15,3 @@ export function createRegistrationContext(repositories) {

render: false,
register: function register(story) {
register: story => {
repositories.stories.push(story);

@@ -24,0 +18,0 @@ },

@@ -1,1 +0,1 @@

export var ADDON_ID = 'storybook/svelte-csf';
export const ADDON_ID = 'storybook/svelte-csf';

@@ -1,14 +0,18 @@

var svelte = require('svelte/compiler');
const svelte = require('svelte/compiler');
var parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
const parser = require.resolve('./parser/collect-stories').replace(/[/\\]/g, '/');
function process(src, filename) {
var result = svelte.compile(src, {
const result = svelte.compile(src, {
format: 'cjs',
filename: filename,
filename,
dev: true
});
var code = result.js ? result.js.code : result.code;
var z = {
code: "".concat(code, "\n const { default: parser } = require('").concat(parser, "');\n const md = parser(module.exports.default, {});\n module.exports = { default: md.meta, ...md.stories };\n Object.defineProperty(exports, \"__esModule\", { value: true });"),
const code = result.js ? result.js.code : result.code;
const z = {
code: `${code}
const { default: parser } = require('${parser}');
const md = parser(module.exports.default, {});
module.exports = { default: md.meta, ...md.stories };
Object.defineProperty(exports, "__esModule", { value: true });`,
map: result.js ? result.js.map : result.map

@@ -15,0 +19,0 @@ };

@@ -1,19 +0,1 @@

var _excluded = ["id", "name", "template", "component", "source"];
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
/* eslint-env browser */

@@ -36,12 +18,8 @@ import { logger } from '@storybook/client-logger';

var createFragment = document.createDocumentFragment ? function () {
return document.createDocumentFragment();
} : function () {
return document.createElement('div');
};
export default (function (StoriesComponent, _ref) {
var _ref$stories = _ref.stories,
stories = _ref$stories === void 0 ? {} : _ref$stories,
allocatedIds = _ref.allocatedIds;
var repositories = {
const createFragment = document.createDocumentFragment ? () => document.createDocumentFragment() : () => document.createElement('div');
export default ((StoriesComponent, {
stories = {},
allocatedIds
}) => {
const repositories = {
meta: null,

@@ -52,7 +30,7 @@ stories: []

try {
var context = new RegisterContext({
const context = new RegisterContext({
target: createFragment(),
props: {
Stories: StoriesComponent,
repositories: repositories
repositories
}

@@ -62,6 +40,8 @@ });

} catch (e) {
logger.error("Error extracting stories ".concat(e.toString()), e);
logger.error(`Error extracting stories ${e.toString()}`, e);
}
var meta = repositories.meta;
const {
meta
} = repositories;

@@ -73,33 +53,27 @@ if (!meta) {

var globalComponent = meta.component; // collect templates id
const {
component: globalComponent
} = meta; // collect templates id
var templatesId = repositories.stories.filter(function (story) {
return story.isTemplate;
}).map(function (story) {
return story.id;
}); // check for duplicate templates
const templatesId = repositories.stories.filter(story => story.isTemplate).map(story => story.id); // check for duplicate templates
var duplicateTemplatesId = templatesId.filter(function (item, index) {
return templatesId.indexOf(item) !== index;
});
const duplicateTemplatesId = templatesId.filter((item, index) => templatesId.indexOf(item) !== index);
if (duplicateTemplatesId.length > 0) {
logger.warn("Found duplicates templates id for stories '".concat(meta.name, "': ").concat(duplicateTemplatesId));
logger.warn(`Found duplicates templates id for stories '${meta.name}': ${duplicateTemplatesId}`);
}
return {
meta: meta,
stories: repositories.stories.filter(function (story) {
return !story.isTemplate;
}).reduce(function (all, story) {
var id = story.id,
name = story.name,
template = story.template,
component = story.component,
_story$source = story.source,
source = _story$source === void 0 ? false : _story$source,
props = _objectWithoutProperties(story, _excluded);
meta,
stories: repositories.stories.filter(story => !story.isTemplate).reduce((all, story) => {
const {
id,
name,
template,
component,
source = false,
...props
} = story;
const storyId = extractId(story, allocatedIds);
var storyId = extractId(story, allocatedIds);
if (!storyId) {

@@ -109,7 +83,7 @@ return all;

var unknownTemplate = template != null && templatesId.indexOf(template) < 0;
const unknownTemplate = template != null && templatesId.indexOf(template) < 0;
var storyFn = function storyFn(args, storyContext) {
const storyFn = (args, storyContext) => {
if (unknownTemplate) {
throw new Error("Story ".concat(name, " is referencing an unknown template ").concat(template));
throw new Error(`Story ${name} is referencing an unknown template ${template}`);
}

@@ -123,4 +97,4 @@

templateId: template,
args: args,
storyContext: storyContext,
args,
storyContext,
sourceComponent: component || globalComponent

@@ -132,14 +106,10 @@ }

storyFn.storyName = name;
Object.entries(props).forEach(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
Object.entries(props).forEach(([k, v]) => {
storyFn[k] = v;
}); // inject story sources
var storyDef = stories[template ? "tpl:".concat(template) : storyId];
var hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
const storyDef = stories[template ? `tpl:${template}` : storyId];
const hasArgs = storyDef ? storyDef.hasArgs : true; // inject source snippet
var rawSource = storyDef ? storyDef.source : null;
const rawSource = storyDef ? storyDef.source : null;

@@ -154,3 +124,3 @@ if (rawSource) {

var snippet;
let snippet;

@@ -157,0 +127,0 @@ if (source === true || source === false && !hasArgs) {

import collectStories from './collect-stories';
import TestStories from '../components/__tests__/TestStories.svelte';
describe('parse-stories', function () {
test('Extract Stories', function () {
var data = collectStories(TestStories, {
describe('parse-stories', () => {
test('Extract Stories', () => {
const data = collectStories(TestStories, {
stories: {

@@ -10,13 +10,33 @@ 'tpl:tpl2': 'tpl2src'

});
var stories = data.stories,
meta = data.meta;
expect(meta).toMatchInlineSnapshot("\n Object {\n \"title\": \"Test\",\n }\n ");
expect(stories).toMatchInlineSnapshot("\n Object {\n \"Story1\": [Function],\n \"Story2\": [Function],\n \"Story3\": [Function],\n }\n ");
const {
stories,
meta
} = data;
expect(meta).toMatchInlineSnapshot(`
Object {
"title": "Test",
}
`);
expect(stories).toMatchInlineSnapshot(`
Object {
"Story1": [Function],
"Story2": [Function],
"Story3": [Function],
}
`);
expect(stories.Story1.storyName).toBe('Story1');
expect(stories.Story1.parameters).toMatchInlineSnapshot("undefined");
expect(stories.Story1.parameters).toMatchInlineSnapshot(`undefined`);
expect(stories.Story2.storyName).toBe('Story2');
expect(stories.Story2.parameters).toMatchInlineSnapshot("undefined");
expect(stories.Story2.parameters).toMatchInlineSnapshot(`undefined`);
expect(stories.Story3.storyName).toBe('Story3');
expect(stories.Story3.parameters).toMatchInlineSnapshot("\n Object {\n \"docs\": Object {\n \"source\": Object {\n \"code\": \"xyz\",\n },\n },\n }\n ");
expect(stories.Story3.parameters).toMatchInlineSnapshot(`
Object {
"docs": Object {
"source": Object {
"code": "xyz",
},
},
}
`);
});
});
import { logger } from '@storybook/client-logger';
function hashCode(str) {
var h = str.split('') // eslint-disable-next-line no-bitwise
.reduce(function (prevHash, currVal) {
return (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0;
}, 0);
const h = str.split('') // eslint-disable-next-line no-bitwise
.reduce((prevHash, currVal) => (prevHash << 5) - prevHash + currVal.charCodeAt(0) | 0, 0);
return Math.abs(h).toString(16);

@@ -12,7 +10,6 @@ } // extract a story id

export function extractId(_ref) {
var id = _ref.id,
name = _ref.name;
var allocatedIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
export function extractId({
id,
name
}, allocatedIds = []) {
if (id) {

@@ -22,8 +19,10 @@ return id;

var generated = name.replace(/\W+(.|$)/g, function (_, chr) {
return chr.toUpperCase();
});
if (!name) {
throw new Error("Id or Name should be specified");
}
let generated = name.replace(/\W+(.|$)/g, (_, chr) => chr.toUpperCase());
if (allocatedIds.indexOf(generated) >= 0) {
logger.warn("Story name conflict with exports - Please add an explicit id for story ".concat(name));
logger.warn(`Story name conflict with exports - Please add an explicit id for story ${name}`);
generated += hashCode(name);

@@ -30,0 +29,0 @@ }

import { extractId } from './extract-id';
describe('extract-id', function () {
test('name with spaces', function () {
describe('extract-id', () => {
test('name with spaces', () => {
expect(extractId({

@@ -8,3 +8,3 @@ name: 'Name with spaces'

});
test('name with parenthesis', function () {
test('name with parenthesis', () => {
expect(extractId({

@@ -14,3 +14,3 @@ name: 'Name with (parenthesis)'

});
test('duplicates id', function () {
test('duplicates id', () => {
expect(extractId({

@@ -20,3 +20,3 @@ name: 'Button'

});
test('No negative hash', function () {
test('No negative hash', () => {
expect(extractId({

@@ -23,0 +23,0 @@ name: 'Navbar'

import dedent from 'ts-dedent';
import * as svelte from 'svelte/compiler';
import { extractId } from './extract-id';
import { toId, storyNameFromExport } from "@storybook/csf";
function getStaticAttribute(name, node) {
// extract the attribute
var attribute = node.attributes.find(function (att) {
return att.type === 'Attribute' && att.name === name;
});
const attribute = node.attributes.find(att => att.type === 'Attribute' && att.name === name);
if (!attribute) {
return null;
return undefined;
}
var value = attribute.value; // expect the attribute to be static, ie only one Text node
const {
value
} = attribute; // expect the attribute to be static, ie only one Text node

@@ -21,3 +22,3 @@ if (value && value.length === 1 && value[0].type === 'Text') {

throw new Error("Attribute ".concat(name, " is not static"));
throw new Error(`Attribute ${name} is not static`);
}

@@ -33,46 +34,48 @@ /**

// compile
var _svelte$compile = svelte.compile(component),
ast = _svelte$compile.ast;
var allocatedIds = ['default'];
var localNames = {
const {
ast
} = svelte.compile(component);
const allocatedIds = ['default'];
const localNames = {
Story: 'Story',
Template: 'Template'
Template: 'Template',
Meta: 'Meta'
};
svelte.walk(ast.instance, {
enter: function enter(node) {
if (node.type === 'ImportDeclaration') {
if (node.source.value === '@storybook/addon-svelte-csf') {
node.specifiers.filter(function (n) {
return n.type === 'ImportSpecifier';
}).forEach(function (n) {
localNames[n.imported.name] = n.local.name;
});
if (ast.instance) {
svelte.walk(ast.instance, {
enter(node) {
if (node.type === 'ImportDeclaration') {
if (node.source.value === '@storybook/addon-svelte-csf') {
node.specifiers.filter(n => n.type === 'ImportSpecifier').forEach(n => {
localNames[n.imported.name] = n.local.name;
});
}
this.skip();
}
}
this.skip();
}); // extracts allocated Ids
svelte.walk(ast.instance, {
enter(node) {
if (node.type === 'ImportDeclaration') {
node.specifiers.map(n => n.local.name).forEach(name => allocatedIds.push(name));
this.skip();
}
}
}
}); // extracts allocated Ids
svelte.walk(ast.instance, {
enter: function enter(node) {
if (node.type === 'ImportDeclaration') {
node.specifiers.map(function (n) {
return n.local.name;
}).forEach(function (name) {
return allocatedIds.push(name);
});
this.skip();
}
}
});
var stories = {};
});
}
const stories = {};
const meta = {};
svelte.walk(ast.html, {
enter: function enter(node) {
enter(node) {
if (node.type === 'InlineComponent' && (node.name === localNames.Story || node.name === localNames.Template)) {
this.skip();
var isTemplate = node.name === 'Template'; // extract the 'name' attribute
const isTemplate = node.name === 'Template'; // extract the 'name' attribute
var name = getStaticAttribute('name', node); // templates has a default name
let name = getStaticAttribute('name', node); // templates has a default name

@@ -83,5 +86,5 @@ if (!name && isTemplate) {

var id = extractId({
const id = extractId({
id: getStaticAttribute('id', node),
name: name
name
}, isTemplate ? undefined : allocatedIds);

@@ -91,26 +94,35 @@

// ignore stories without children
var source;
let source;
if (node.children.length > 0) {
var start = node.children[0].start;
var end = node.children[node.children.length - 1].end;
const {
start
} = node.children[0];
const {
end
} = node.children[node.children.length - 1];
source = dedent(component.substr(start, end - start));
}
stories[isTemplate ? "tpl:".concat(id) : id] = {
name: name,
stories[isTemplate ? `tpl:${id}` : id] = {
storyId: toId(meta.id || meta.title || id, storyNameFromExport(id)),
name,
template: isTemplate,
source: source,
hasArgs: node.attributes.find(function (att) {
return att.type === 'Let';
}) != null
source,
hasArgs: node.attributes.find(att => att.type === 'Let') != null
};
}
} else if (node.type === 'InlineComponent' && node.name === localNames.Meta) {
this.skip();
meta.title = getStaticAttribute("title", node);
meta.id = getStaticAttribute("id", node);
}
}
});
return {
stories: stories,
allocatedIds: allocatedIds
meta,
stories,
allocatedIds
};
}
import { extractStories } from './extract-stories';
describe('extractSource', function () {
test('Simple Story', function () {
expect(extractStories("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story name=\"MyStory\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"MyStory\": Object {\n \"hasArgs\": false,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
describe('extractSource', () => {
test('Simple Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
<Story name="MyStory">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"MyStory": Object {
"hasArgs": false,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "mystory--my-story",
"template": false,
},
},
}
`);
});
test('Explicit Id Story', function () {
expect(extractStories("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story id=\"myId\" name=\"MyStory\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"myId\": Object {\n \"hasArgs\": false,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Explicit Id Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
<Story id="myId" name="MyStory">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"myId": Object {
"hasArgs": false,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "myid--my-id",
"template": false,
},
},
}
`);
});
test('Args Story', function () {
expect(extractStories("\n <script>\n import { Story } from '@storybook/svelte';\n </script>\n\n <Story name=\"MyStory\" let:args>\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n ],\n \"stories\": Object {\n \"MyStory\": Object {\n \"hasArgs\": true,\n \"name\": \"MyStory\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Args Story', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
</script>
<Story name="MyStory" let:args>
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
],
"meta": Object {},
"stories": Object {
"MyStory": Object {
"hasArgs": true,
"name": "MyStory",
"source": "<div>a story</div>",
"storyId": "mystory--my-story",
"template": false,
},
},
}
`);
});
test('Simple Template', function () {
expect(extractStories("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Template name=\"MyTemplate\">\n <div>a template</div>\n </Template>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"tpl:MyTemplate\": Object {\n \"hasArgs\": false,\n \"name\": \"MyTemplate\",\n \"source\": \"<div>a template</div>\",\n \"template\": true,\n },\n },\n }\n ");
test('Simple Template', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Template name="MyTemplate">
<div>a template</div>
</Template>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"tpl:MyTemplate": Object {
"hasArgs": false,
"name": "MyTemplate",
"source": "<div>a template</div>",
"storyId": "mytemplate--my-template",
"template": true,
},
},
}
`);
});
test('Unnamed Template', function () {
expect(extractStories("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Template>\n <div>a template</div>\n </Template>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"tpl:default\": Object {\n \"hasArgs\": false,\n \"name\": \"default\",\n \"source\": \"<div>a template</div>\",\n \"template\": true,\n },\n },\n }\n ");
test('Unnamed Template', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Template>
<div>a template</div>
</Template>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"tpl:default": Object {
"hasArgs": false,
"name": "default",
"source": "<div>a template</div>",
"storyId": "default--default",
"template": true,
},
},
}
`);
});
test('Multiple Stories', function () {
expect(extractStories("\n <script>\n import { Template } from '@storybook/svelte';\n </script>\n\n <Story name=\"Story1\">\n <div>story 1</div>\n </Story>\n <Story name=\"Story2\">\n <div>story 2</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Template\",\n ],\n \"stories\": Object {\n \"Story1\": Object {\n \"hasArgs\": false,\n \"name\": \"Story1\",\n \"source\": \"<div>story 1</div>\",\n \"template\": false,\n },\n \"Story2\": Object {\n \"hasArgs\": false,\n \"name\": \"Story2\",\n \"source\": \"<div>story 2</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Multiple Stories', () => {
expect(extractStories(`
<script>
import { Template } from '@storybook/svelte';
</script>
<Story name="Story1">
<div>story 1</div>
</Story>
<Story name="Story2">
<div>story 2</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Template",
],
"meta": Object {},
"stories": Object {
"Story1": Object {
"hasArgs": false,
"name": "Story1",
"source": "<div>story 1</div>",
"storyId": "story1--story-1",
"template": false,
},
"Story2": Object {
"hasArgs": false,
"name": "Story2",
"source": "<div>story 2</div>",
"storyId": "story2--story-2",
"template": false,
},
},
}
`);
});
test('Renamed Import', function () {
expect(extractStories("\n <script>\n import { Story as SBStory, Meta as SBMeta } from '@storybook/addon-svelte-csf';\n </script>\n\n <SBMeta title='test'/>\n\n <SBStory name=\"Story1\">\n <div>story 1</div>\n </SBStory>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"SBStory\",\n \"SBMeta\",\n ],\n \"stories\": Object {\n \"Story1\": Object {\n \"hasArgs\": false,\n \"name\": \"Story1\",\n \"source\": \"<div>story 1</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Renamed Import', () => {
expect(extractStories(`
<script>
import { Story as SBStory, Meta as SBMeta } from '@storybook/addon-svelte-csf';
</script>
<SBMeta title='test'/>
<SBStory name="Story1">
<div>story 1</div>
</SBStory>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"SBStory",
"SBMeta",
],
"meta": Object {
"id": undefined,
"title": "test",
},
"stories": Object {
"Story1": Object {
"hasArgs": false,
"name": "Story1",
"source": "<div>story 1</div>",
"storyId": "test--story-1",
"template": false,
},
},
}
`);
});
test('Duplicate Id', function () {
expect(extractStories("\n <script>\n import { Story } from '@storybook/svelte';\n import Button from './Button.svelte';\n </script>\n\n <Story name=\"Button\">\n <div>a story</div>\n </Story>\n ")).toMatchInlineSnapshot("\n Object {\n \"allocatedIds\": Array [\n \"default\",\n \"Story\",\n \"Button\",\n ],\n \"stories\": Object {\n \"Button77471352\": Object {\n \"hasArgs\": false,\n \"name\": \"Button\",\n \"source\": \"<div>a story</div>\",\n \"template\": false,\n },\n },\n }\n ");
test('Duplicate Id', () => {
expect(extractStories(`
<script>
import { Story } from '@storybook/svelte';
import Button from './Button.svelte';
</script>
<Story name="Button">
<div>a story</div>
</Story>
`)).toMatchInlineSnapshot(`
Object {
"allocatedIds": Array [
"default",
"Story",
"Button",
],
"meta": Object {},
"stories": Object {
"Button77471352": Object {
"hasArgs": false,
"name": "Button",
"source": "<div>a story</div>",
"storyId": "button77471352--button-77471352",
"template": false,
},
},
}
`);
});
});

@@ -1,17 +0,1 @@

var _templateObject;
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
import dedent from 'ts-dedent';

@@ -21,3 +5,3 @@ import { readFileSync } from 'fs';

var parser = require.resolve('./collect-stories').replace(/[/\\]/g, '/'); // From https://github.com/sveltejs/svelte/blob/8db3e8d0297e052556f0b6dde310ef6e197b8d18/src/compiler/compile/utils/get_name_from_filename.ts
const parser = require.resolve('./collect-stories').replace(/[/\\]/g, '/'); // From https://github.com/sveltejs/svelte/blob/8db3e8d0297e052556f0b6dde310ef6e197b8d18/src/compiler/compile/utils/get_name_from_filename.ts
// Copied because it is not exported from the compiler

@@ -28,6 +12,6 @@

if (!filename) return null;
var parts = filename.split(/[/\\]/).map(encodeURI);
const parts = filename.split(/[/\\]/).map(encodeURI);
if (parts.length > 1) {
var index_match = parts[parts.length - 1].match(/^index(\.\w+)/);
const index_match = parts[parts.length - 1].match(/^index(\.\w+)/);

@@ -40,6 +24,6 @@ if (index_match) {

var base = parts.pop().replace(/%/g, 'u').replace(/\.[^.]+$/, '').replace(/[^a-zA-Z_$0-9]+/g, '_').replace(/^_/, '').replace(/_$/, '').replace(/^(\d)/, '_$1');
const base = parts.pop().replace(/%/g, 'u').replace(/\.[^.]+$/, '').replace(/[^a-zA-Z_$0-9]+/g, '_').replace(/^_/, '').replace(/_$/, '').replace(/^(\d)/, '_$1');
if (!base) {
throw new Error("Could not derive component name from file ".concat(filename));
throw new Error(`Could not derive component name from file ${filename}`);
}

@@ -52,22 +36,21 @@

// eslint-disable-next-line no-underscore-dangle
var resource = this._module.resource;
var componentName = getNameFromFilename(resource);
var source = readFileSync(resource).toString();
var storiesDef = extractStories(source);
var stories = storiesDef.stories;
var storyDef = Object.entries(stories).filter(function (_ref) {
var _ref2 = _slicedToArray(_ref, 2),
def = _ref2[1];
return !def.template;
}).map(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 1),
id = _ref4[0];
return "export const ".concat(id, " = __storiesMetaData.stories[").concat(JSON.stringify(id), "]");
}).join('\n');
var codeWithoutDefaultExport = code.replace('export default ', '//export default');
return dedent(_templateObject || (_templateObject = _taggedTemplateLiteral(["", "\n const { default: parser } = require('", "');\n const __storiesMetaData = parser(", ", ", ");\n export default __storiesMetaData.meta;\n ", ";\n "])), codeWithoutDefaultExport, parser, componentName, JSON.stringify(storiesDef), storyDef);
const {
resource
} = this._module;
const componentName = getNameFromFilename(resource);
const source = readFileSync(resource).toString();
const storiesDef = extractStories(source);
const {
stories
} = storiesDef;
const storyDef = Object.entries(stories).filter(([, def]) => !def.template).map(([id]) => `export const ${id} = __storiesMetaData.stories[${JSON.stringify(id)}]`).join('\n');
const codeWithoutDefaultExport = code.replace('export default ', '//export default');
return dedent`${codeWithoutDefaultExport}
const { default: parser } = require('${parser}');
const __storiesMetaData = parser(${componentName}, ${JSON.stringify(storiesDef)});
export default __storiesMetaData.meta;
${storyDef};
`;
}
export default transformSvelteStories;

@@ -1,27 +0,9 @@

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
export function managerEntries() {
var entry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return [].concat(_toConsumableArray(entry), [require.resolve('./manager')]);
import { svelteIndexer } from './indexer.js';
export function managerEntries(entry = []) {
return [...entry, require.resolve('./manager')];
}
export function webpack(config) {
return _objectSpread(_objectSpread({}, config), {}, {
module: _objectSpread(_objectSpread({}, config.module), {}, {
rules: [].concat(_toConsumableArray(config.module.rules), [{
return { ...config,
module: { ...config.module,
rules: [...config.module.rules, {
test: /\.stories\.svelte$/,

@@ -32,5 +14,43 @@ enforce: 'post',

}]
}])
})
});
}
}]
}
};
}
export async function viteFinal(config, options) {
const {
plugins = []
} = config;
const svelteOptions = await options.presets.apply('svelteOptions', {}, options);
let svelteConfig = svelteOptions;
try {
const {
loadSvelteConfig
} = await import('@sveltejs/vite-plugin-svelte');
svelteConfig = { ...(await loadSvelteConfig()),
...svelteOptions
};
} catch (err) {
const {
log
} = console;
if (err.code === 'MODULE_NOT_FOUND') {
log('@sveltejs/vite-plugin-svelte not found. Unable to load config from svelte.config file');
} else {
throw err;
}
}
const svelteCsfPlugin = (await import('../plugins/vite-svelte-csf.js')).default.default;
plugins.push(svelteCsfPlugin(svelteConfig));
return { ...config,
plugins
};
}
export const storyIndexers = async indexers => {
return [{
test: /\.stories\.svelte$/,
indexer: svelteIndexer
}, ...(indexers || [])];
};
import { addons } from '@storybook/addons';
import { ADDON_ID } from '../constants'; // Register the addon
addons.register(ADDON_ID, function () {});
addons.register(ADDON_ID, () => {});

@@ -61,3 +61,3 @@ import type { SvelteComponentTyped, SvelteComponent } from 'svelte';

*/
export class Story extends SvelteComponentTyped<StoryProps, any, Slots> { }
export class Story extends SvelteComponentTyped<StoryProps, {}, Slots> {}
/**

@@ -68,2 +68,2 @@ * Template.

*/
export class Template extends SvelteComponentTyped<TemplateProps, any, Slots> { }
export class Template extends SvelteComponentTyped<TemplateProps, {}, Slots> {}
{
"name": "@storybook/addon-svelte-csf",
"version": "2.0.11",
"version": "2.0.12--canary.94.71b3707.0",
"description": "Allows to write stories in Svelte syntax",

@@ -31,8 +31,10 @@ "keywords": [

"lint": "eslint --cache --cache-location=.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives",
"storybook": "start-storybook -p 6006",
"storybook": "sb dev -p 6006",
"start": "concurrently \"yarn storybook -- --no-manager-cache --quiet\" \"yarn build -- --watch\"",
"build-storybook": "build-storybook",
"build-storybook": "sb build",
"release": "yarn build && auto shipit"
},
"dependencies": {
"@babel/runtime": "^7.17.5",
"magic-string": "^0.26.6",
"ts-dedent": "^2.0.0"

@@ -44,12 +46,16 @@ },

"@babel/core": "^7.17.5",
"@babel/plugin-transform-runtime": "^7.17.5",
"@babel/preset-env": "^7.16.11",
"@babel/preset-react": "^7.16.7",
"@babel/preset-typescript": "^7.16.7",
"@storybook/addon-essentials": "^6.4.20",
"@storybook/addon-interactions": "^6.4.20",
"@storybook/addon-essentials": "^7.0.0-alpha.29",
"@storybook/addon-interactions": "^7.0.0-alpha.29",
"@storybook/addon-storyshots": "^7.0.0-alpha.29",
"@storybook/core-client": "^7.0.0-alpha.29",
"@storybook/core-server": "^7.0.0-alpha.29",
"@storybook/eslint-config-storybook": "^3.1.2",
"@storybook/jest": "^0.0.10",
"@storybook/svelte": "^7.0.0-alpha.29",
"@storybook/svelte-webpack5": "7.0.0-alpha.29",
"@storybook/testing-library": "^0.0.9",
"@storybook/addon-storyshots": "^6.4.20",
"@storybook/eslint-config-storybook": "^3.1.2",
"@storybook/svelte": "^6.4.20",
"auto": "^10.3.0",

@@ -67,15 +73,26 @@ "babel-jest": "^29.1.0",

"rimraf": "^3.0.2",
"svelte": "^3.46.6",
"sb": "7.0.0-alpha.29",
"svelte": "^3.50.0",
"svelte-jester": "^2.3.2",
"svelte-loader": "^3.1.2",
"typescript": "^3.9.7"
"typescript": "^3.9.7",
"vite": "^3.1.4"
},
"peerDependencies": {
"@storybook/svelte": ">=6.4.20",
"svelte": "^3.46.6",
"svelte-loader": "^3.1.2"
"@storybook/svelte": "^7.0.0-beta",
"@storybook/theming": "^7.0.0-beta",
"@sveltejs/vite-plugin-svelte": "^1.0.0 || ^2.0.0",
"svelte": "^3.50.0",
"svelte-loader": "^3.1.2",
"vite": "^3.0.0 || ^4.0.0"
},
"peerDependenciesMeta": {
"@sveltejs/vite-plugin-svelte": {
"optional": true
},
"svelte-loader": {
"optional": true
},
"vite": {
"optional": true
}

@@ -82,0 +99,0 @@ },

@@ -48,4 +48,22 @@ # Svelte Story Format

1. Add '@storybook/addon-svelte-csf' to your dev dependencies
2. In `.storybook/main.js`, add `*.stories.svelte` to the stories patterns
3. In `.storybook/main.js`, add `@storybook/addon-svelte-csf` to the addons array
1. `npm install --save-dev @storybook/addon-svelte-csf` or `yarn add --dev @storybook/addon-svelte-csf`
2. In `.storybook/main.js`, add `@storybook/addon-svelte-csf` to the addons array
3. In `.storybook/main.js`, add `*.stories.svelte` to the stories patterns
An example `main.js` configuration could look like this:
```js
module.exports = {
stories: ['../src/**/*.stories.@(js|jsx|ts|tsx|svelte)'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/addon-interactions',
'@storybook/addon-svelte-csf',
],
framework: '@storybook/svelte-vite',
};
```
> **Warning**
> v3 and above of this addon requires at least Storybook v7. If you're using Storybook between v6.4.20 and v7.0.0, you should instead use v2 of this addon with `npm install --save-dev @storybook/addon-svelte-csf@^2.0.10` or `yarn add --dev @storybook/addon-svelte-csf@^2.0.10`
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc