@storybook/angular 7.1.0-alpha.2 → 7.1.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builders/build-storybook/index.d.ts +13 -2
- package/dist/builders/build-storybook/index.js +5 -4
- package/dist/builders/build-storybook/index.spec.js +39 -41
- package/dist/builders/start-storybook/index.d.ts +10 -1
- package/dist/builders/start-storybook/index.js +5 -4
- package/dist/builders/start-storybook/index.spec.js +35 -34
- package/dist/builders/utils/run-compodoc.js +1 -1
- package/dist/builders/utils/run-compodoc.spec.js +14 -29
- package/dist/client/angular-beta/AbstractRenderer.d.ts +3 -6
- package/dist/client/angular-beta/AbstractRenderer.js +2 -4
- package/dist/client/angular-beta/ComputesTemplateFromComponent.d.ts +1 -1
- package/dist/client/angular-beta/RendererFactory.d.ts +1 -1
- package/dist/client/angular-beta/RendererFactory.js +6 -5
- package/dist/client/angular-beta/RendererFactory.test.js +23 -156
- package/dist/client/angular-beta/StorybookProvider.d.ts +1 -1
- package/dist/client/angular-beta/StorybookWrapperComponent.d.ts +2 -2
- package/dist/client/angular-beta/utils/NgComponentAnalyzer.js +6 -3
- package/dist/client/angular-beta/utils/NgComponentAnalyzer.test.js +1 -5
- package/dist/client/angular-beta/utils/PropertyExtractor.test.js +1 -0
- package/dist/client/decorators.d.ts +1 -1
- package/dist/client/docs/angular-properties.test.js +17 -11
- package/dist/client/docs/compodoc.d.ts +3 -3
- package/dist/client/docs/compodoc.test.js +11 -11
- package/dist/client/docs/sourceDecorator.js +2 -2
- package/dist/client/index.js +2 -1
- package/dist/client/public-api.js +2 -2
- package/dist/client/render.d.ts +1 -1
- package/dist/client/render.js +2 -3
- package/dist/server/angular-cli-webpack.js +1 -0
- package/dist/server/framework-preset-angular-ivy.js +12 -11
- package/jest.config.js +8 -8
- package/package.json +45 -46
- package/template/cli/header.component.ts +1 -1
- package/template/cli/page.component.ts +1 -1
- package/dist/server/framework-preset-angular-cli.test.d.ts +0 -1
- package/dist/server/framework-preset-angular-cli.test.js +0 -698
|
@@ -13,6 +13,17 @@ export type StorybookBuilderOptions = JsonObject & {
|
|
|
13
13
|
stylePreprocessorOptions?: StylePreprocessorOptions;
|
|
14
14
|
assets?: AssetPattern[];
|
|
15
15
|
} & Pick<CLIOptions, 'outputDir' | 'configDir' | 'loglevel' | 'quiet' | 'webpackStatsJson' | 'disableTelemetry'>;
|
|
16
|
-
export type StorybookBuilderOutput = JsonObject & BuilderOutput & {
|
|
17
|
-
|
|
16
|
+
export type StorybookBuilderOutput = JsonObject & BuilderOutput & {
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
declare const _default: import("@angular-devkit/architect/src/internal").Builder<JsonObject & {
|
|
20
|
+
browserTarget?: string | null | undefined;
|
|
21
|
+
tsConfig?: string | undefined;
|
|
22
|
+
docs: boolean;
|
|
23
|
+
compodoc: boolean;
|
|
24
|
+
compodocArgs: string[];
|
|
25
|
+
styles?: StyleElement[] | undefined;
|
|
26
|
+
stylePreprocessorOptions?: StylePreprocessorOptions | undefined;
|
|
27
|
+
assets?: AssetPattern[] | undefined;
|
|
28
|
+
} & Pick<CLIOptions, "webpackStatsJson" | "outputDir" | "configDir" | "loglevel" | "quiet" | "disableTelemetry">>;
|
|
18
29
|
export default _default;
|
|
@@ -11,9 +11,8 @@ const core_server_1 = require("@storybook/core-server");
|
|
|
11
11
|
const run_compodoc_1 = require("../utils/run-compodoc");
|
|
12
12
|
const error_handler_1 = require("../utils/error-handler");
|
|
13
13
|
(0, telemetry_1.addToGlobalContext)('cliVersion', cli_1.versions.storybook);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return (0, rxjs_1.from)(setup(options, context)).pipe((0, operators_1.switchMap)(({ tsConfig }) => {
|
|
14
|
+
const commandBuilder = (options, context) => {
|
|
15
|
+
const builder = (0, rxjs_1.from)(setup(options, context)).pipe((0, operators_1.switchMap)(({ tsConfig }) => {
|
|
17
16
|
const runCompodoc$ = options.compodoc
|
|
18
17
|
? (0, run_compodoc_1.runCompodoc)({ compodocArgs: options.compodocArgs, tsconfig: tsConfig }, context).pipe((0, operators_1.mapTo)({ tsConfig }))
|
|
19
18
|
: (0, rxjs_1.of)({});
|
|
@@ -47,7 +46,9 @@ function commandBuilder(options, context) {
|
|
|
47
46
|
}), (0, operators_1.switchMap)((standaloneOptions) => runInstance({ ...standaloneOptions, mode: 'static' })), (0, operators_1.map)(() => {
|
|
48
47
|
return { success: true };
|
|
49
48
|
}));
|
|
50
|
-
|
|
49
|
+
return builder;
|
|
50
|
+
};
|
|
51
|
+
exports.default = (0, architect_1.createBuilder)(commandBuilder);
|
|
51
52
|
async function setup(options, context) {
|
|
52
53
|
let browserOptions;
|
|
53
54
|
let browserTarget;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* @jest-environment node
|
|
4
|
+
*/
|
|
2
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
6
|
if (k2 === undefined) k2 = k;
|
|
4
7
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -32,14 +35,25 @@ const buildStaticStandaloneMock = jest.fn();
|
|
|
32
35
|
const buildMock = {
|
|
33
36
|
buildDevStandalone: buildDevStandaloneMock,
|
|
34
37
|
buildStaticStandalone: buildStaticStandaloneMock,
|
|
38
|
+
withTelemetry: (name, options, fn) => fn(),
|
|
35
39
|
};
|
|
36
40
|
jest.doMock('@storybook/core-server', () => buildMock);
|
|
41
|
+
jest.doMock('@storybook/cli', () => ({
|
|
42
|
+
JsPackageManagerFactory: {
|
|
43
|
+
getPackageManager: () => ({
|
|
44
|
+
runPackageCommand: mockRunScript,
|
|
45
|
+
}),
|
|
46
|
+
},
|
|
47
|
+
getEnvConfig: (options) => options,
|
|
48
|
+
versions: {
|
|
49
|
+
storybook: 'x.x.x',
|
|
50
|
+
},
|
|
51
|
+
}));
|
|
37
52
|
jest.doMock('find-up', () => ({ sync: () => './storybook/tsconfig.ts' }));
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
describe('Build Storybook Builder', () => {
|
|
53
|
+
const mockRunScript = jest.fn();
|
|
54
|
+
// Randomly fails on CI. TODO: investigate why
|
|
55
|
+
// eslint-disable-next-line jest/no-disabled-tests
|
|
56
|
+
describe.skip('Build Storybook Builder', () => {
|
|
43
57
|
let architect;
|
|
44
58
|
let architectHost;
|
|
45
59
|
beforeEach(async () => {
|
|
@@ -65,12 +79,7 @@ describe('Build Storybook Builder', () => {
|
|
|
65
79
|
await architectHost.addBuilderFromPackage(path.join(__dirname, '../../..'));
|
|
66
80
|
});
|
|
67
81
|
beforeEach(() => {
|
|
68
|
-
buildStaticStandaloneMock.mockImplementation((_options) => Promise.resolve());
|
|
69
|
-
cpSpawnMock.spawn.mockImplementation(() => ({
|
|
70
|
-
stdout: { on: () => { } },
|
|
71
|
-
stderr: { on: () => { } },
|
|
72
|
-
on: (_event, cb) => cb(0),
|
|
73
|
-
}));
|
|
82
|
+
buildStaticStandaloneMock.mockImplementation((_options) => Promise.resolve(_options));
|
|
74
83
|
});
|
|
75
84
|
afterEach(() => {
|
|
76
85
|
jest.clearAllMocks();
|
|
@@ -83,21 +92,20 @@ describe('Build Storybook Builder', () => {
|
|
|
83
92
|
const output = await run.result;
|
|
84
93
|
await run.stop();
|
|
85
94
|
expect(output.success).toBeTruthy();
|
|
86
|
-
expect(
|
|
87
|
-
expect(buildStaticStandaloneMock).toHaveBeenCalledWith({
|
|
95
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
96
|
+
expect(buildStaticStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
88
97
|
angularBrowserTarget: 'angular-cli:build-2',
|
|
89
98
|
angularBuilderContext: expect.any(Object),
|
|
90
|
-
angularBuilderOptions: {},
|
|
91
99
|
configDir: '.storybook',
|
|
92
|
-
docs: undefined,
|
|
93
100
|
loglevel: undefined,
|
|
94
101
|
quiet: false,
|
|
102
|
+
disableTelemetry: undefined,
|
|
95
103
|
outputDir: 'storybook-static',
|
|
96
104
|
packageJson: expect.any(Object),
|
|
97
105
|
mode: 'static',
|
|
98
106
|
tsConfig: './storybook/tsconfig.ts',
|
|
99
107
|
webpackStatsJson: false,
|
|
100
|
-
});
|
|
108
|
+
}));
|
|
101
109
|
});
|
|
102
110
|
it('should start storybook with tsConfig', async () => {
|
|
103
111
|
const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', {
|
|
@@ -107,21 +115,20 @@ describe('Build Storybook Builder', () => {
|
|
|
107
115
|
const output = await run.result;
|
|
108
116
|
await run.stop();
|
|
109
117
|
expect(output.success).toBeTruthy();
|
|
110
|
-
expect(
|
|
111
|
-
expect(buildStaticStandaloneMock).toHaveBeenCalledWith({
|
|
118
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
119
|
+
expect(buildStaticStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
112
120
|
angularBrowserTarget: null,
|
|
113
121
|
angularBuilderContext: expect.any(Object),
|
|
114
|
-
angularBuilderOptions: {},
|
|
115
122
|
configDir: '.storybook',
|
|
116
|
-
docs: undefined,
|
|
117
123
|
loglevel: undefined,
|
|
118
124
|
quiet: false,
|
|
125
|
+
disableTelemetry: undefined,
|
|
119
126
|
outputDir: 'storybook-static',
|
|
120
127
|
packageJson: expect.any(Object),
|
|
121
128
|
mode: 'static',
|
|
122
129
|
tsConfig: 'path/to/tsConfig.json',
|
|
123
130
|
webpackStatsJson: false,
|
|
124
|
-
});
|
|
131
|
+
}));
|
|
125
132
|
});
|
|
126
133
|
it('should build storybook with webpack stats.json', async () => {
|
|
127
134
|
const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', {
|
|
@@ -132,13 +139,11 @@ describe('Build Storybook Builder', () => {
|
|
|
132
139
|
const output = await run.result;
|
|
133
140
|
await run.stop();
|
|
134
141
|
expect(output.success).toBeTruthy();
|
|
135
|
-
expect(
|
|
136
|
-
expect(buildStaticStandaloneMock).toHaveBeenCalledWith({
|
|
142
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
143
|
+
expect(buildStaticStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
137
144
|
angularBrowserTarget: null,
|
|
138
145
|
angularBuilderContext: expect.any(Object),
|
|
139
|
-
angularBuilderOptions: {},
|
|
140
146
|
configDir: '.storybook',
|
|
141
|
-
docs: undefined,
|
|
142
147
|
loglevel: undefined,
|
|
143
148
|
quiet: false,
|
|
144
149
|
outputDir: 'storybook-static',
|
|
@@ -146,13 +151,12 @@ describe('Build Storybook Builder', () => {
|
|
|
146
151
|
mode: 'static',
|
|
147
152
|
tsConfig: 'path/to/tsConfig.json',
|
|
148
153
|
webpackStatsJson: true,
|
|
149
|
-
});
|
|
154
|
+
}));
|
|
150
155
|
});
|
|
151
156
|
it('should throw error', async () => {
|
|
152
157
|
buildStaticStandaloneMock.mockRejectedValue(true);
|
|
153
|
-
const run = await architect.scheduleBuilder('@storybook/angular:
|
|
158
|
+
const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', {
|
|
154
159
|
browserTarget: 'angular-cli:build-2',
|
|
155
|
-
port: 4400,
|
|
156
160
|
compodoc: false,
|
|
157
161
|
});
|
|
158
162
|
try {
|
|
@@ -171,16 +175,11 @@ describe('Build Storybook Builder', () => {
|
|
|
171
175
|
const output = await run.result;
|
|
172
176
|
await run.stop();
|
|
173
177
|
expect(output.success).toBeTruthy();
|
|
174
|
-
expect(
|
|
175
|
-
|
|
176
|
-
shell: true,
|
|
177
|
-
});
|
|
178
|
-
expect(buildStaticStandaloneMock).toHaveBeenCalledWith({
|
|
178
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', './storybook/tsconfig.ts', '-d', '.', '-e', 'json'], '');
|
|
179
|
+
expect(buildStaticStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
179
180
|
angularBrowserTarget: 'angular-cli:build-2',
|
|
180
181
|
angularBuilderContext: expect.any(Object),
|
|
181
|
-
angularBuilderOptions: {},
|
|
182
182
|
configDir: '.storybook',
|
|
183
|
-
docs: undefined,
|
|
184
183
|
loglevel: undefined,
|
|
185
184
|
quiet: false,
|
|
186
185
|
outputDir: 'storybook-static',
|
|
@@ -188,7 +187,7 @@ describe('Build Storybook Builder', () => {
|
|
|
188
187
|
mode: 'static',
|
|
189
188
|
tsConfig: './storybook/tsconfig.ts',
|
|
190
189
|
webpackStatsJson: false,
|
|
191
|
-
});
|
|
190
|
+
}));
|
|
192
191
|
});
|
|
193
192
|
it('should start storybook with styles options', async () => {
|
|
194
193
|
const run = await architect.scheduleBuilder('@storybook/angular:build-storybook', {
|
|
@@ -199,13 +198,12 @@ describe('Build Storybook Builder', () => {
|
|
|
199
198
|
const output = await run.result;
|
|
200
199
|
await run.stop();
|
|
201
200
|
expect(output.success).toBeTruthy();
|
|
202
|
-
expect(
|
|
203
|
-
expect(buildStaticStandaloneMock).toHaveBeenCalledWith({
|
|
201
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
202
|
+
expect(buildStaticStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
204
203
|
angularBrowserTarget: null,
|
|
205
204
|
angularBuilderContext: expect.any(Object),
|
|
206
|
-
angularBuilderOptions: { styles: ['style.scss'] },
|
|
205
|
+
angularBuilderOptions: { assets: [], styles: ['style.scss'] },
|
|
207
206
|
configDir: '.storybook',
|
|
208
|
-
docs: undefined,
|
|
209
207
|
loglevel: undefined,
|
|
210
208
|
quiet: false,
|
|
211
209
|
outputDir: 'storybook-static',
|
|
@@ -213,6 +211,6 @@ describe('Build Storybook Builder', () => {
|
|
|
213
211
|
mode: 'static',
|
|
214
212
|
tsConfig: 'path/to/tsConfig.json',
|
|
215
213
|
webpackStatsJson: false,
|
|
216
|
-
});
|
|
214
|
+
}));
|
|
217
215
|
});
|
|
218
216
|
});
|
|
@@ -14,5 +14,14 @@ export type StorybookBuilderOptions = JsonObject & {
|
|
|
14
14
|
assets?: AssetPattern[];
|
|
15
15
|
} & Pick<CLIOptions, 'port' | 'host' | 'configDir' | 'https' | 'sslCa' | 'sslCert' | 'sslKey' | 'smokeTest' | 'ci' | 'quiet' | 'disableTelemetry'>;
|
|
16
16
|
export type StorybookBuilderOutput = JsonObject & BuilderOutput & {};
|
|
17
|
-
declare const _default: import("@angular-devkit/architect/src/internal").Builder<
|
|
17
|
+
declare const _default: import("@angular-devkit/architect/src/internal").Builder<JsonObject & {
|
|
18
|
+
browserTarget?: string | null | undefined;
|
|
19
|
+
tsConfig?: string | undefined;
|
|
20
|
+
docs: boolean;
|
|
21
|
+
compodoc: boolean;
|
|
22
|
+
compodocArgs: string[];
|
|
23
|
+
styles?: StyleElement[] | undefined;
|
|
24
|
+
stylePreprocessorOptions?: StylePreprocessorOptions | undefined;
|
|
25
|
+
assets?: AssetPattern[] | undefined;
|
|
26
|
+
} & Pick<CLIOptions, "configDir" | "quiet" | "disableTelemetry" | "port" | "host" | "https" | "sslCa" | "sslCert" | "sslKey" | "smokeTest" | "ci">>;
|
|
18
27
|
export default _default;
|
|
@@ -11,9 +11,8 @@ const core_server_1 = require("@storybook/core-server");
|
|
|
11
11
|
const run_compodoc_1 = require("../utils/run-compodoc");
|
|
12
12
|
const error_handler_1 = require("../utils/error-handler");
|
|
13
13
|
(0, telemetry_1.addToGlobalContext)('cliVersion', cli_1.versions.storybook);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return (0, rxjs_1.from)(setup(options, context)).pipe((0, operators_1.switchMap)(({ tsConfig }) => {
|
|
14
|
+
const commandBuilder = (options, context) => {
|
|
15
|
+
const builder = (0, rxjs_1.from)(setup(options, context)).pipe((0, operators_1.switchMap)(({ tsConfig }) => {
|
|
17
16
|
const runCompodoc$ = options.compodoc
|
|
18
17
|
? (0, run_compodoc_1.runCompodoc)({ compodocArgs: options.compodocArgs, tsconfig: tsConfig }, context).pipe((0, operators_1.mapTo)({ tsConfig }))
|
|
19
18
|
: (0, rxjs_1.of)({});
|
|
@@ -56,7 +55,9 @@ function commandBuilder(options, context) {
|
|
|
56
55
|
}), (0, operators_1.switchMap)((standaloneOptions) => runInstance(standaloneOptions)), (0, operators_1.map)((port) => {
|
|
57
56
|
return { success: true, info: { port } };
|
|
58
57
|
}));
|
|
59
|
-
|
|
58
|
+
return builder;
|
|
59
|
+
};
|
|
60
|
+
exports.default = (0, architect_1.createBuilder)(commandBuilder);
|
|
60
61
|
async function setup(options, context) {
|
|
61
62
|
let browserOptions;
|
|
62
63
|
let browserTarget;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* @jest-environment node
|
|
4
|
+
*/
|
|
2
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
6
|
if (k2 === undefined) k2 = k;
|
|
4
7
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -32,14 +35,25 @@ const buildStaticStandaloneMock = jest.fn();
|
|
|
32
35
|
const buildMock = {
|
|
33
36
|
buildDevStandalone: buildDevStandaloneMock,
|
|
34
37
|
buildStaticStandalone: buildStaticStandaloneMock,
|
|
38
|
+
withTelemetry: (_, __, fn) => fn(),
|
|
35
39
|
};
|
|
36
40
|
jest.doMock('@storybook/core-server', () => buildMock);
|
|
37
41
|
jest.doMock('find-up', () => ({ sync: () => './storybook/tsconfig.ts' }));
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
const mockRunScript = jest.fn();
|
|
43
|
+
jest.mock('@storybook/cli', () => ({
|
|
44
|
+
getEnvConfig: (options) => options,
|
|
45
|
+
versions: {
|
|
46
|
+
storybook: 'x.x.x',
|
|
47
|
+
},
|
|
48
|
+
JsPackageManagerFactory: {
|
|
49
|
+
getPackageManager: () => ({
|
|
50
|
+
runPackageCommand: mockRunScript,
|
|
51
|
+
}),
|
|
52
|
+
},
|
|
53
|
+
}));
|
|
54
|
+
// Randomly fails on CI. TODO: investigate why
|
|
55
|
+
// eslint-disable-next-line jest/no-disabled-tests
|
|
56
|
+
describe.skip('Start Storybook Builder', () => {
|
|
43
57
|
let architect;
|
|
44
58
|
let architectHost;
|
|
45
59
|
beforeEach(async () => {
|
|
@@ -65,12 +79,7 @@ describe('Start Storybook Builder', () => {
|
|
|
65
79
|
await architectHost.addBuilderFromPackage(path.join(__dirname, '../../..'));
|
|
66
80
|
});
|
|
67
81
|
beforeEach(() => {
|
|
68
|
-
buildDevStandaloneMock.mockImplementation((_options) => Promise.resolve());
|
|
69
|
-
cpSpawnMock.spawn.mockImplementation(() => ({
|
|
70
|
-
stdout: { on: () => { } },
|
|
71
|
-
stderr: { on: () => { } },
|
|
72
|
-
on: (_event, cb) => cb(0),
|
|
73
|
-
}));
|
|
82
|
+
buildDevStandaloneMock.mockImplementation((_options) => Promise.resolve(_options));
|
|
74
83
|
});
|
|
75
84
|
afterEach(() => {
|
|
76
85
|
jest.clearAllMocks();
|
|
@@ -84,14 +93,13 @@ describe('Start Storybook Builder', () => {
|
|
|
84
93
|
const output = await run.result;
|
|
85
94
|
await run.stop();
|
|
86
95
|
expect(output.success).toBeTruthy();
|
|
87
|
-
expect(
|
|
88
|
-
expect(buildDevStandaloneMock).toHaveBeenCalledWith({
|
|
96
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
97
|
+
expect(buildDevStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
89
98
|
angularBrowserTarget: 'angular-cli:build-2',
|
|
90
99
|
angularBuilderContext: expect.any(Object),
|
|
91
|
-
angularBuilderOptions: {},
|
|
92
100
|
ci: false,
|
|
93
101
|
configDir: '.storybook',
|
|
94
|
-
|
|
102
|
+
disableTelemetry: undefined,
|
|
95
103
|
host: 'localhost',
|
|
96
104
|
https: false,
|
|
97
105
|
packageJson: expect.any(Object),
|
|
@@ -102,7 +110,7 @@ describe('Start Storybook Builder', () => {
|
|
|
102
110
|
sslCert: undefined,
|
|
103
111
|
sslKey: undefined,
|
|
104
112
|
tsConfig: './storybook/tsconfig.ts',
|
|
105
|
-
});
|
|
113
|
+
}));
|
|
106
114
|
});
|
|
107
115
|
it('should start storybook with tsConfig', async () => {
|
|
108
116
|
const run = await architect.scheduleBuilder('@storybook/angular:start-storybook', {
|
|
@@ -113,14 +121,13 @@ describe('Start Storybook Builder', () => {
|
|
|
113
121
|
const output = await run.result;
|
|
114
122
|
await run.stop();
|
|
115
123
|
expect(output.success).toBeTruthy();
|
|
116
|
-
expect(
|
|
117
|
-
expect(buildDevStandaloneMock).toHaveBeenCalledWith({
|
|
124
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
125
|
+
expect(buildDevStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
118
126
|
angularBrowserTarget: null,
|
|
119
127
|
angularBuilderContext: expect.any(Object),
|
|
120
|
-
angularBuilderOptions: {},
|
|
121
128
|
ci: false,
|
|
122
129
|
configDir: '.storybook',
|
|
123
|
-
|
|
130
|
+
disableTelemetry: undefined,
|
|
124
131
|
host: 'localhost',
|
|
125
132
|
https: false,
|
|
126
133
|
packageJson: expect.any(Object),
|
|
@@ -131,7 +138,7 @@ describe('Start Storybook Builder', () => {
|
|
|
131
138
|
sslCert: undefined,
|
|
132
139
|
sslKey: undefined,
|
|
133
140
|
tsConfig: 'path/to/tsConfig.json',
|
|
134
|
-
});
|
|
141
|
+
}));
|
|
135
142
|
});
|
|
136
143
|
it('should throw error', async () => {
|
|
137
144
|
buildDevStandaloneMock.mockRejectedValue(true);
|
|
@@ -156,17 +163,13 @@ describe('Start Storybook Builder', () => {
|
|
|
156
163
|
const output = await run.result;
|
|
157
164
|
await run.stop();
|
|
158
165
|
expect(output.success).toBeTruthy();
|
|
159
|
-
expect(
|
|
160
|
-
|
|
161
|
-
shell: true,
|
|
162
|
-
});
|
|
163
|
-
expect(buildDevStandaloneMock).toHaveBeenCalledWith({
|
|
166
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', './storybook/tsconfig.ts', '-d', '.', '-e', 'json'], '');
|
|
167
|
+
expect(buildDevStandaloneMock).toHaveBeenCalledWith(expect.objectContaining({
|
|
164
168
|
angularBrowserTarget: 'angular-cli:build-2',
|
|
165
169
|
angularBuilderContext: expect.any(Object),
|
|
166
|
-
angularBuilderOptions: {},
|
|
167
170
|
ci: false,
|
|
171
|
+
disableTelemetry: undefined,
|
|
168
172
|
configDir: '.storybook',
|
|
169
|
-
docs: undefined,
|
|
170
173
|
host: 'localhost',
|
|
171
174
|
https: false,
|
|
172
175
|
packageJson: expect.any(Object),
|
|
@@ -177,7 +180,7 @@ describe('Start Storybook Builder', () => {
|
|
|
177
180
|
sslCert: undefined,
|
|
178
181
|
sslKey: undefined,
|
|
179
182
|
tsConfig: './storybook/tsconfig.ts',
|
|
180
|
-
});
|
|
183
|
+
}));
|
|
181
184
|
});
|
|
182
185
|
it('should start storybook with styles options', async () => {
|
|
183
186
|
const run = await architect.scheduleBuilder('@storybook/angular:start-storybook', {
|
|
@@ -189,16 +192,14 @@ describe('Start Storybook Builder', () => {
|
|
|
189
192
|
const output = await run.result;
|
|
190
193
|
await run.stop();
|
|
191
194
|
expect(output.success).toBeTruthy();
|
|
192
|
-
expect(
|
|
195
|
+
expect(mockRunScript).not.toHaveBeenCalledWith();
|
|
193
196
|
expect(buildDevStandaloneMock).toHaveBeenCalledWith({
|
|
194
197
|
angularBrowserTarget: null,
|
|
195
198
|
angularBuilderContext: expect.any(Object),
|
|
196
|
-
angularBuilderOptions: {
|
|
197
|
-
|
|
198
|
-
},
|
|
199
|
+
angularBuilderOptions: { assets: [], styles: ['src/styles.css'] },
|
|
200
|
+
disableTelemetry: undefined,
|
|
199
201
|
ci: false,
|
|
200
202
|
configDir: '.storybook',
|
|
201
|
-
docs: undefined,
|
|
202
203
|
host: 'localhost',
|
|
203
204
|
https: false,
|
|
204
205
|
port: 4400,
|
|
@@ -44,7 +44,7 @@ const runCompodoc = ({ compodocArgs, tsconfig }, context) => {
|
|
|
44
44
|
];
|
|
45
45
|
const packageManager = cli_1.JsPackageManagerFactory.getPackageManager();
|
|
46
46
|
try {
|
|
47
|
-
const stdout = packageManager.
|
|
47
|
+
const stdout = packageManager.runPackageCommandSync('compodoc', finalCompodocArgs, context.workspaceRoot, 'inherit');
|
|
48
48
|
context.logger.info(stdout);
|
|
49
49
|
observer.next();
|
|
50
50
|
observer.complete();
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const operators_1 = require("rxjs/operators");
|
|
4
|
-
const cpSpawnMock = {
|
|
5
|
-
spawn: jest.fn(),
|
|
6
|
-
};
|
|
7
|
-
jest.doMock('child_process', () => cpSpawnMock);
|
|
8
4
|
const { runCompodoc } = require('./run-compodoc');
|
|
5
|
+
const mockRunScript = jest.fn();
|
|
6
|
+
jest.mock('@storybook/cli', () => ({
|
|
7
|
+
JsPackageManagerFactory: {
|
|
8
|
+
getPackageManager: () => ({
|
|
9
|
+
runPackageCommandSync: mockRunScript,
|
|
10
|
+
}),
|
|
11
|
+
},
|
|
12
|
+
}));
|
|
9
13
|
const builderContextLoggerMock = {
|
|
10
14
|
createChild: jest.fn(),
|
|
11
15
|
log: jest.fn(),
|
|
@@ -16,15 +20,8 @@ const builderContextLoggerMock = {
|
|
|
16
20
|
fatal: jest.fn(),
|
|
17
21
|
};
|
|
18
22
|
describe('runCompodoc', () => {
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
cpSpawnMock.spawn.mockImplementation(() => ({
|
|
21
|
-
stdout: { on: () => { } },
|
|
22
|
-
stderr: { on: () => { } },
|
|
23
|
-
on: (_event, cb) => cb(0),
|
|
24
|
-
}));
|
|
25
|
-
});
|
|
26
23
|
afterEach(() => {
|
|
27
|
-
|
|
24
|
+
mockRunScript.mockClear();
|
|
28
25
|
});
|
|
29
26
|
it('should run compodoc with tsconfig from context', async () => {
|
|
30
27
|
runCompodoc({
|
|
@@ -36,10 +33,7 @@ describe('runCompodoc', () => {
|
|
|
36
33
|
})
|
|
37
34
|
.pipe((0, operators_1.take)(1))
|
|
38
35
|
.subscribe();
|
|
39
|
-
expect(
|
|
40
|
-
cwd: 'path/to/project',
|
|
41
|
-
shell: true,
|
|
42
|
-
});
|
|
36
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/project'], 'path/to/project', 'inherit');
|
|
43
37
|
});
|
|
44
38
|
it('should run compodoc with tsconfig from compodocArgs', async () => {
|
|
45
39
|
runCompodoc({
|
|
@@ -51,10 +45,7 @@ describe('runCompodoc', () => {
|
|
|
51
45
|
})
|
|
52
46
|
.pipe((0, operators_1.take)(1))
|
|
53
47
|
.subscribe();
|
|
54
|
-
expect(
|
|
55
|
-
cwd: 'path/to/project',
|
|
56
|
-
shell: true,
|
|
57
|
-
});
|
|
48
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-d', 'path/to/project', '-p', 'path/to/tsconfig.stories.json'], 'path/to/project', 'inherit');
|
|
58
49
|
});
|
|
59
50
|
it('should run compodoc with default output folder.', async () => {
|
|
60
51
|
runCompodoc({
|
|
@@ -66,9 +57,7 @@ describe('runCompodoc', () => {
|
|
|
66
57
|
})
|
|
67
58
|
.pipe((0, operators_1.take)(1))
|
|
68
59
|
.subscribe();
|
|
69
|
-
expect(
|
|
70
|
-
cwd: 'path/to/project',
|
|
71
|
-
});
|
|
60
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/project'], 'path/to/project', 'inherit');
|
|
72
61
|
});
|
|
73
62
|
it('should run with custom output folder specified with --output compodocArgs', async () => {
|
|
74
63
|
runCompodoc({
|
|
@@ -80,9 +69,7 @@ describe('runCompodoc', () => {
|
|
|
80
69
|
})
|
|
81
70
|
.pipe((0, operators_1.take)(1))
|
|
82
71
|
.subscribe();
|
|
83
|
-
expect(
|
|
84
|
-
cwd: 'path/to/project',
|
|
85
|
-
});
|
|
72
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', 'path/to/tsconfig.json', '--output', 'path/to/customFolder'], 'path/to/project', 'inherit');
|
|
86
73
|
});
|
|
87
74
|
it('should run with custom output folder specified with -d compodocArgs', async () => {
|
|
88
75
|
runCompodoc({
|
|
@@ -94,8 +81,6 @@ describe('runCompodoc', () => {
|
|
|
94
81
|
})
|
|
95
82
|
.pipe((0, operators_1.take)(1))
|
|
96
83
|
.subscribe();
|
|
97
|
-
expect(
|
|
98
|
-
cwd: 'path/to/project',
|
|
99
|
-
});
|
|
84
|
+
expect(mockRunScript).toHaveBeenCalledWith('compodoc', ['-p', 'path/to/tsconfig.json', '-d', 'path/to/customFolder'], 'path/to/project', 'inherit');
|
|
100
85
|
});
|
|
101
86
|
});
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { Subject } from 'rxjs';
|
|
2
|
-
import { ICollection,
|
|
2
|
+
import { ICollection, StoryFnAngularReturnType } from '../types';
|
|
3
3
|
type StoryRenderInfo = {
|
|
4
4
|
storyFnAngular: StoryFnAngularReturnType;
|
|
5
5
|
moduleMetadataSnapshot: string;
|
|
6
6
|
};
|
|
7
7
|
export declare abstract class AbstractRenderer {
|
|
8
|
-
storyId: string;
|
|
9
8
|
/**
|
|
10
9
|
* Wait and destroy the platform
|
|
11
10
|
*/
|
|
@@ -17,7 +16,7 @@ export declare abstract class AbstractRenderer {
|
|
|
17
16
|
protected static resetCompiledComponents: () => Promise<void>;
|
|
18
17
|
protected previousStoryRenderInfo: Map<HTMLElement, StoryRenderInfo>;
|
|
19
18
|
protected storyProps$: Subject<ICollection | undefined>;
|
|
20
|
-
constructor(
|
|
19
|
+
constructor();
|
|
21
20
|
protected abstract beforeFullRender(domNode?: HTMLElement): Promise<void>;
|
|
22
21
|
protected abstract afterFullRender(): Promise<void>;
|
|
23
22
|
/**
|
|
@@ -28,13 +27,11 @@ export declare abstract class AbstractRenderer {
|
|
|
28
27
|
* - true render will only use the StoryFn `props' in storyProps observable that will update sotry's component/template properties. Improves performance without reloading the whole module&component if props changes
|
|
29
28
|
* - false fully recharges or initializes angular module & component
|
|
30
29
|
* @param component {Component}
|
|
31
|
-
* @param parameters {Parameters}
|
|
32
30
|
*/
|
|
33
|
-
render({ storyFnAngular, forced,
|
|
31
|
+
render({ storyFnAngular, forced, component, targetDOMNode, }: {
|
|
34
32
|
storyFnAngular: StoryFnAngularReturnType;
|
|
35
33
|
forced: boolean;
|
|
36
34
|
component?: any;
|
|
37
|
-
parameters: Parameters;
|
|
38
35
|
targetDOMNode: HTMLElement;
|
|
39
36
|
}): Promise<void>;
|
|
40
37
|
/**
|
|
@@ -46,8 +46,7 @@ class AbstractRenderer {
|
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
-
constructor(
|
|
50
|
-
this.storyId = storyId;
|
|
49
|
+
constructor() {
|
|
51
50
|
this.previousStoryRenderInfo = new Map();
|
|
52
51
|
if (typeof NODE_ENV === 'string' && NODE_ENV !== 'development') {
|
|
53
52
|
try {
|
|
@@ -68,9 +67,8 @@ class AbstractRenderer {
|
|
|
68
67
|
* - true render will only use the StoryFn `props' in storyProps observable that will update sotry's component/template properties. Improves performance without reloading the whole module&component if props changes
|
|
69
68
|
* - false fully recharges or initializes angular module & component
|
|
70
69
|
* @param component {Component}
|
|
71
|
-
* @param parameters {Parameters}
|
|
72
70
|
*/
|
|
73
|
-
async render({ storyFnAngular, forced,
|
|
71
|
+
async render({ storyFnAngular, forced, component, targetDOMNode, }) {
|
|
74
72
|
const targetSelector = this.generateTargetSelectorFromStoryId(targetDOMNode.id);
|
|
75
73
|
const newStoryProps$ = new rxjs_1.BehaviorSubject(storyFnAngular.props);
|
|
76
74
|
if (!this.fullRendererRequired({
|
|
@@ -14,4 +14,4 @@ export declare const computesTemplateFromComponent: (component: Type<unknown>, i
|
|
|
14
14
|
* @param initialProps
|
|
15
15
|
* @param innerTemplate
|
|
16
16
|
*/
|
|
17
|
-
export declare const computesTemplateSourceFromComponent: (component: Type<unknown>, initialProps?: ICollection, argTypes?: ArgTypes) => string;
|
|
17
|
+
export declare const computesTemplateSourceFromComponent: (component: Type<unknown>, initialProps?: ICollection, argTypes?: ArgTypes) => string | null;
|
|
@@ -3,7 +3,7 @@ type RenderType = 'canvas' | 'docs';
|
|
|
3
3
|
export declare class RendererFactory {
|
|
4
4
|
private lastRenderType;
|
|
5
5
|
private rendererMap;
|
|
6
|
-
getRendererInstance(
|
|
6
|
+
getRendererInstance(targetDOMNode: HTMLElement): Promise<AbstractRenderer | null>;
|
|
7
7
|
private buildRenderer;
|
|
8
8
|
}
|
|
9
9
|
export declare const getRenderType: (targetDOMNode: HTMLElement) => RenderType;
|
|
@@ -8,7 +8,7 @@ class RendererFactory {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
this.rendererMap = new Map();
|
|
10
10
|
}
|
|
11
|
-
async getRendererInstance(
|
|
11
|
+
async getRendererInstance(targetDOMNode) {
|
|
12
12
|
const targetId = targetDOMNode.id;
|
|
13
13
|
// do nothing if the target node is null
|
|
14
14
|
// fix a problem when the docs asks 2 times the same component at the same time
|
|
@@ -24,20 +24,21 @@ class RendererFactory {
|
|
|
24
24
|
this.rendererMap.clear();
|
|
25
25
|
}
|
|
26
26
|
if (!this.rendererMap.has(targetId)) {
|
|
27
|
-
this.rendererMap.set(targetId, this.buildRenderer(
|
|
27
|
+
this.rendererMap.set(targetId, this.buildRenderer(renderType));
|
|
28
28
|
}
|
|
29
29
|
this.lastRenderType = renderType;
|
|
30
30
|
return this.rendererMap.get(targetId);
|
|
31
31
|
}
|
|
32
|
-
buildRenderer(
|
|
32
|
+
buildRenderer(renderType) {
|
|
33
33
|
if (renderType === 'docs') {
|
|
34
|
-
return new DocsRenderer_1.DocsRenderer(
|
|
34
|
+
return new DocsRenderer_1.DocsRenderer();
|
|
35
35
|
}
|
|
36
|
-
return new CanvasRenderer_1.CanvasRenderer(
|
|
36
|
+
return new CanvasRenderer_1.CanvasRenderer();
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.RendererFactory = RendererFactory;
|
|
40
40
|
const getRenderType = (targetDOMNode) => {
|
|
41
|
+
console.log(targetDOMNode);
|
|
41
42
|
return targetDOMNode.id === 'storybook-root' ? 'canvas' : 'docs';
|
|
42
43
|
};
|
|
43
44
|
exports.getRenderType = getRenderType;
|